【网络原理】IP协议的地址管理和路由选择

系列文章目录

【网络通信基础】网络中的常见基本概念

【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文)

【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)

【网络原理】TCP协议的相关机制(确认应答、超时重传)

【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)


目录

系列文章目录

IP协议

1. IP协议的协议头格式(报文结构)

2. 地址管理

2.1 IP地址的数量限制 

a. 动态分配地址

b. NAT机制(网络地址转换)

c. IPv6 

2.2 网段划分

2.3 特殊的IP地址

3. 路由选择 


IP协议

网络这个模块中,已经介绍了传输层中的两个非常重要的协议,UDP协议和TCP协议。这次介绍网络层中最基础的协议——IP协议(以下出现的IP协议指的都是IPv4协议)。

TCP/IP协议族是一套整个网络体系最基础也是最核心的协议。IP协议作为TCP/IP协议族中的一部分,类似于TCP,IP协议也非常复杂。

作为后端开发的程序员,大概率会直接和TCP打交道,而IP协议是从事路由器、网关,防火墙等相关网络设备开发的人员更应该关注的,因此这里介绍的是IP协议比较基础的部分(后面的数据链路层也一样)主要从两方面进行介绍:

  1. 地址管理:分配和管理 IP 地址,确保每个设备在网络中具有唯一的标识。
  2. 路由选择:确定数据包从源到目的地所经过的路径。

1. IP协议的协议头格式(报文结构)

先认识IP协议的报头,再分别介绍地址管理和路由选择的内容。

基本结构如下: 

4位版本号: 标识IP协议的版本号,取值只有两种。在IPv4中,这个字段的值是4,IPv6中,则为6。

4位头部长度: 和TCP的类似,表示IP头部的长度,表示有多少个4字节。

8位服务类型: 用于指定数据包的优先级和处理方式,实际上只有4位有效。

  • 前3位是优先权字段,已被标记为弃用;接下来4位是服务类型字段,分别表示最小延迟、最大吞吐量、最高可靠性和最小成本,在同一时刻,只能选择这四种状态之一;最后一位是保留字段,必须置为0。

16位总长度: 表示整个IP数据包的总长度,包括头部和数据部分。

  • 看到这个字段,就想到和前面UDP一样有64KB的限制了,那如果构造一个非常大的TCP数据,IP是否就传输不了了?
  • 虽然IP自身确实有长度限制,但是IP提供了拆包和组包这样的功能。因此,即使数据很大,在IP这一层会自动拆成多个IP数据包,每个IP数据包来携带一部分数据。但是,其实IP数据包的拆包并不是因为达到64K,而是在数据链路层还有限制(后面再说)。
  • 拆包和组包,则和接下来的三个字段有关联。

16位标识:用于标识一个IP数据包及其片段。当一个大数据包被拆分成多个小数据包时,这些小数据包的16位标识都是相同的,这样接收端就可以根据这个标识将它们正确重组起来。

3位标志位:控制数据包的分片和重组。只有两位有效,其中1位标识这个包是否拆包了,还有一位表示最后一个拆的包的位置,即指示了结束位置。

13位片偏移:表示数据包片段在原数据包中的位置。这样,在接收端进行组包时,就可以根据这个位置顺序将小数据包正确重组起来,还原成原始的大数据包。

8位生存时间(TTL):指定数据包在网络中的最大存活时间,防止数据包无限制在网络中循环和传输。

  • 需要注意的是,此处的单位并不是真正的时间单位,而是一个整数,表示“次数”。
  • 每当一个数据包经过一个路由器或者节点时,TTL的值就会-1。如果TTL的值减到0了,那么该数据包就会被丢弃。
  • 比如,如果指定的接收方IP地址,是一个错误的IP地址,就不能让这个数据包无限循环和传输下去,找到一定程度还没找到,就应该丢弃了。TTL在操作系统中的设置值都有所不同,例如,Linux通常为64或255,Windows通常是128,Windows 98则为32。
  • 这些数值看起来都不大,实际上传输到地球的任何地方都够用了。因为路由转发的过程采用了高效的路由算法和路由表结构。通过Windows的一个命令 tracert,就可以看到当前网络通信的路径是怎样的。此处通过访问巴西政府官网来看当前网络通信的路径情况:

这里显示最多30个跃点跟踪,好像并没有访问到巴西政府官网,但是我们可以通过IP地址查询工具,看看每次到达哪个位置了。其中“请求超时”是因为有些设备关闭了“ICMP功能”,看不到详情,但是不影响tracert的执行。当看到延时较高可能就是已经出镜了,这里查询几个IP地址看看:

 可以看到,第12次就已经到美国了,第15次就到达巴西。

8位协议:指示数据包承载的传输层协议,如TCP、UDP等。

16位头部校验和:用于验证头部的完整性。这里只针对IP的头部进行校验,是因为封装的过程中,IP数据包的数据部分是TCP/UDP数据包,它们都自带了校验和。

32位源IP地址和32位目的IP地址:即表示发送方的IP地址,和接收方的IP地址。

可选字段: 长度可变,允许附加额外信息。

数据部分: 可变长度,包含传输的实际数据。 

2. 地址管理

IP地址(IPv4)本质上就是一个 32 位的整数,为了方便,就以点分十进制的方式表示。通过3个点,分成4个部分(十进制数)。每个部分 8 位,即一个字节,每个部分的取值范围是 0 到 255。

IP地址的存在,目的就是为了能够区分网络上的不同设备,希望每个网络设备都有唯一的一个IP地址。

但是,IPv4 地址的格式和长度(32位整数),就决定了其能够表示的唯一 IP 地址数量,即约为 42 亿个。

这个数字看起来很大,但是随着互联网的发展和普及,这个数量已经远远不够满足需求了,尤其是考虑到每个人都可能拥有多个设备连接到互联网。

IP地址不够用的问题,就显得十分严峻了。这一问题,早在互联网发展初期就被意识到,但在20世纪90年代末和21世纪初变得更加显著。解决这一问题也有了多种方案。

2.1 IP地址的数量限制 

a. 动态分配地址

考虑到全世界的设备,并不会同一时刻都在上网,管理机构就可以通过重新分配,和回收未使用的IPv4地址来延长IPv4地址池的使用寿命。

但是这只是权益之计,并不能根本上解决问题。

b. NAT机制(网络地址转换)

先把IP地址分成两个大类:

  1. 私网IP(局域网IP):IP地址以 10.*,172.16-172.31.*,192.168.*,这三类都是数据私网(局域网)地址,这些地址在局域网内部是唯一的。
  2. 公网IP(广域网IP):上述剩下的就都是公网IP了。公网IP则是在全球范围内都是唯一的。

由于上述设定,就有一些重要的限制:

  1. 公网设备访问公网设备,可以直接访问。
  2. 局域网设备访问同一个局域网的设备,也可以直接访问。
  3. 局域网设备访问不同局域网的设备,不允许直接访问。
  4. 局域网设备访问公网设备,需要对局域网设备的IP地址进行地址转换。
  5. 公网设备访问局域网设备,需要对公网IP地址进行地址转换

NAT机制的主要作用就是实现私有网络地址与公网地址之间的转换。

  • 当局域网内的设备需要访问Internet上的资源时,NAT机制会将私有IP地址转换为公网IP地址,以便设备能够与Internet上的其他设备进行通信。同时,当Internet上的设备访问局域网内的设备时,NAT机制也会将公网IP地址转换为私有IP地址,以确保数据能够正确地路由到目标设备。

NAT机制的实现通常依赖于路由器或NAT服务器等设备。

  • 这些设备会维护一个映射表,记录私有IP地址与公网IP地址之间的映射关系。当数据包从内网发送到外网时,路由器会修改数据包的源IP地址,将其替换为路由器的公网IP地址;当数据包从外网发送到内网时,路由器会根据映射表将目的IP地址转换为相应的私有IP地址。

总的来说,NAT机制通过地址转换和映射关系的建立,有效地解决了IP地址不足的问题。同时,NAT机制也增强了网络的安全性,因为外部设备无法直接访问内部网络的私有IP地址。

c. IPv6 

IPv6是用于替代IPv4的下一代IP地址,它从根本上解决了IPv4地址不足的问题。

  • IPv4 使用 4 个字节(32位)表示IP地址,能提供约为42亿9千万个IP地址.
  • IPv6 使用 16 个字节(128位)表示IP地址,能提供约340 亿亿亿亿个IP地址.

IPv6能为地球每一粒沙子提供IP地址,这句话已经很熟悉了,只要人类还在地球生存,IPv6是一定够用的。

尽管 IPv6 已经存在多年,但是 IPv4 仍然是互联网最广泛使用的协议,而 IPv6 要广泛应用还需要一些时间,原因主要有以下几个方面:

  1. 兼容性问题:IPv4和IPv6并不兼容(报头结构也存在区别),这意味着IPv6无法直接替换IPv4。因此,要想升级到IPv6则需要更换支持IPv6的设备。
  2. IPv6的设备和软件成本较高:IPv6的部署需要新的设备和软件,这些设备和软件的成本较高,对于大多数企业来说,是一个较大的阻碍。
  3. IPv4仍然可用:IPv4仍然是目前互联网的主要协议,因此,许多组织并没有足够的动力去升级到IPv6。

综上,就导致当前IPv6的推进节奏非常缓慢。尽管如此,我国对IPv6的普及率还是很高的。截至2023年5月,我国IPv6的活跃用户数量达到7.63亿,用户占比达到71.51%。

为了推动IPv6的普及和应用,我国政府出台了一系列政策和措施。例如,政府要求基础电信企业加快IPv6规模部署,提升IPv6网络服务质量,推动IPv6在各个领域的应用。此外,政府还鼓励企业加强IPv6技术创新和应用研发,推动IPv6产业链的发展。

这点还是很容易验证的,打开一些应用程序,如淘宝/支付宝等,它们的首页的最下面就会有一行小字:支持IPv6协议。

国家如此大力推动IPv6的发展,除了是为我国的互联网发展提供更好的基础和支持外,还有一部分政治原因,具体的原因,真诚建议大家一定一定去看看下面这个视频,里面也有大量介绍计算机网络相关的基础知识:

电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅icon-default.png?t=N7T8https://www.bilibili.com/video/BV1i14y157YV/?spm_id_from=333.337.search-card.all.click&vd_source=a3aa6ca18f9b64b%E2%80%A6

2.2 网段划分

一个IP地址分为两个部分,网络号和主机号。

  • 网络号:保证相互连接的两个网段具有不同的标识。
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。

在同一个局域网内,网络号(前半部分)都是相同的,主机号(后半部分)都是不同的。

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同。

但是手动配置IP地址,是一件相当麻烦的事。并且我们也能发现,我们从来没有手动配置过IP地址,但是仍然能够上网。

  • 这其实得益于一个技术,叫做DHCP,能够自动的帮我们配置局域网的IP地址。
  • 一般的路由器都带有DHCP功能,因此路由器也可以看做是一个DHCP服务器。

哪些部分是网络号,哪些部分是主机号,则是通过子网掩码的方式来区分的。

子网掩码和IP地址一样,也是一个32位的二进制数,子网掩码中,1表示对应的IP地址位是网络号,0表示对应的IP地址位是主机号。子网掩码总是前面一段全是1,后面一段全是0,不会出现1和0交替出现的情况。

例如,子网掩码为255.255.255.0,则表示前3个字节是网络号,后1个字节是主机号,这也是家用宽带默认的子网掩码。

注意几点: 

  • 在同一个局域网中,网络号一定是相同的,如果主机号相同,是无法上网的。
  • 如果该局域网的一个设备,网络号和路由器的网络号不相同,同样是无法上网的。
  • 两个相邻的局域网,网络号不能相同。原因是相邻的局域网如果使用相同的网络号,那么它们会被视为同一个网络,导致通信混乱和数据传输错误。

子网掩码是现在使用的网段划分方案,过去使用的网段划分方案则把所有IP地址分为五类,如下图所示:

  • A类 0.0.0.0到127.255.255.255
  • B类 128.0.0.0到191.255.255.255
  • C类 192.0.0.0到223.255.255.255
  • D类 224.0.0.0到239.255.255.255
  • E类 240.0.0.0到247.255.255.255

随着互联网的飞速发展,这种划分方案的局限性也很快显现出来,大多数组织申请B类网络地址,导致B类地址很快就分配完了。

而A类地址的主机号有24位,就导致A类地址的局域网能容纳的设备数量约 2^32。实际上没有这么大的局域网,能包含这么多主机,因此大量的IP地址就都被浪费了。

针对这种情况,大佬们提出了新的划分方案,称为CIDR(Classless Interdomain Routing),也就是前面所说的通过子网掩码的方式进行网段划分。

2.3 特殊的IP地址

  • 127.* 的IP地址都是环回地址,用于本机环回测试,通常使用127.0.0.1。
  • IP地址的主机号(主机地址)为全0,表示“这个网段”,也就是该局域网。
  • IP地址的主机号(主机地址)为全1,表示“广播地址”,使用广播地址发送信息,局域网中的所有设备都会收到(必须使用UDP协议,TCP不支持广播)。

这里的主机号全1或者全0,指的是二进制比特位。例如最后一个字节表示主机号的情况,错误示例:192.168.0.111;正确示例:192.168.0.255。

除去这两种情况后,最后一个字节表示主机号,实际能分配的最多为254个。但是这里还有例外,很多路由器,在配置的时候,会有一个配置项,分配IP地址的范围,实际可用的主机号还会更少。

3. 路由选择 

路由选择:确定数据包从源到目的地所经过的路径(规划路线)。

网络结构非常复杂,每个路由器无法掌握全局的信息,会根据当前网络状态等进行路由选择。因此,路由器规划出来的线路,是一个“较优解”,并不是绝对最优解。

例如,使用现在的导航软件进行导航,导航软件会给出多种方案,在这种情况下,最优解也是取决于多种因素的:

  1. 最快路线:导航软件可能会提供一条被认为是最快的路线,根据实时交通状况和历史数据计算得出。然而,这条路线可能并不是最适合你的需求,因为它可能会经过拥堵区域或高速公路收费站。

  2. 最短路线:另一方面,导航软件可能会提供一条被认为是最短的路线,即使这条路线可能需要经过一些小路或者交通相对繁忙的地区。

  3. 景观路线:有时,导航软件可能会提供一条风景优美的路线,虽然它可能比其他路线慢一些,但能够为你提供更愉悦的驾驶体验。

IP数据包的传输过程和问路是类似的:

  • 当IP数据包,到达路由器时,路由器会先查看该数据包的目的IP;
  • 路由器判断这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器:
  • 依次反复,知道到达目的IP地址.

判定当前这个数据包要发送到哪里的依据,就是依靠每个路由器或交换机内部维护的一个路由表。这是路由器或交换机等网络设备上的一个重要的数据结构,它存储了网络中可达目的地的信息以及如何到达这些目的地的路由信息。

一个路由表通常包含:目的网络地址,下一跳地址,出跳口等内容。

路由表可以由网络管理员手动配置并维护(静态路由),也可以通过一些路由表生成算法自动生成(动态路由)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315613.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 【网络…

扭蛋机小程序带来了什么优势?扭蛋机收益攻略

在当下的潮流消费时代,人们对潮玩也日益个性化,扭蛋机作为一种新型的娱乐消费模式,深受大众喜爱。扭蛋机的价格低,各个年龄层的玩家都可以进行购买,潜在玩家量非常大。扭蛋机商品主打热门IP周边等,种类繁多…

大型零售企业,适合什么样的企业邮箱大文件解决方案?

大型零售企业通常指的是在全球或特定地区内具有显著市场影响力和知名度的零售商。这些企业不仅在零售业务收入上达到了惊人的规模,而且在全球范围内拥有广泛的销售网络和实体店铺。它们在快速变化的零售行业中持续创新,通过实体店、电商平台等多种渠道吸…

第十一章 Spring Boot 整合 WebSocket

第十一章 Spring Boot 整合 WebSocket 1. 为什么需要 WebSocket2. WebSocket 简介3. Spring Boot 整合 WebSocket3.1 实现消息群发1. 依赖2. 配置 WebSocket ************************************************************ 1. 为什么需要 WebSocket 2. WebSocket 简介 3. Spri…

QT支持多种开发语言

QT主要是一个C应用程序框架,但它也提供了对其他一些编程语言的官方或非官方支持。以下是QT支持的一些语言版本及其特点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.Python (PyQt) : PyQt是QT的官方Pyth…

axios.get请求 重复键问题??

封装的接口方法: 数据: 多选框多选后 能得到对应的数组 但是请求的载荷却是这样的,导致会请求不到数据 departmentChecks 的格式看起来是一个数组,但是通常 HTTP 请求的查询参数不支持使用相同的键(key)名多次。如…

【Redis 开发】Redis哨兵

哨兵 作用和原理服务状态监控选举新的master 搭建哨兵集群RedisTemplate的哨兵模式 作用和原理 Redis提供了哨兵机制来实现主从集群中的自动故障恢复: 哨兵也是一个集群 监控:会不断检查master和slave是否按预期工作自动故障恢复:如果mast…

本地生活服务平台有哪些?哪个靠谱?

随着多家互联网大厂的本地生活服务布局日益展开,不少人都看到了其中的巨大市场缺口和广阔前景,想要入驻本地生活服务平台,瓜分这块巨大的蛋糕。而在当下这个选择大于努力的时代,能否分到蛋糕以及分到多少蛋糕的关键,就…

Vast+产品展厅 | Vastbase G100数据库是什么架构?(2)

Vastbase G100是海量数据融合了多年对各行业应用场景的深入理解,基于openGauss内核开发的企业级关系型数据库。 上一期,《Vast产品展厅》为您介绍了Vastbase G100的部署架构和物理架构。 本期,我们将为您详细讲解Vastbase G100的物理架构和…

基于Python实现心脏病数据可视化DEA+预测【500010103.1】

一、数据说明 该心脏病数据集是通过组合 5 个已经独立可用但以前未合并的流行心脏病数据集来策划的。在这个数据集中,5 个心脏数据集结合了 11 个共同特征,使其成为迄今为止可用于研究目的的最大心脏病数据集。 该数据集由 1190 个实例和 11 个特征组成…

PVE虚拟机隐藏状态栏虚拟设备

虚拟机启动后,状态栏会出现一些虚拟设备,点击弹出会导致虚拟机无法使用。 解决方案: 1、在桌面新建disable_virtio_removale.bat文件,内容如下: ECHO OFF FOR /f %%A IN (reg query "HKLM\SYSTEM\CurrentContro…

低代码+定制物资管理:创新解决方案探析

引言 在当今快速变化的商业环境中,企业面临着不断增长的挑战,如提高效率、降低成本、满足客户需求等。为了应对这些挑战,企业需要不断创新并采用先进的技术解决方案。在这样的背景下,低代码开发和定制化物资管理成为了引领企业变…

Spark-机器学习(7)分类学习之决策树

在之前的文章中,我们学习了分类学习之支持向量机,并带来简单案例,学习用法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。…

selenium在Pycharm中结合python的基本使用、交互、无界面访问

下载 下载与浏览器匹配的浏览器驱动文件,这里一定注意的是,要选择和浏览器版本号相同的驱动程序,否则后面会有很多问题。 (1)浏览器(以google为例)版本号的查询: 我这里的版本号是1…

MySQL数据库安装——zip压缩包形式

安装压缩包zip形式的 MySQL 8数据库 一 、先进入官网下载 https://dev.mysql.com/downloads/mysql/ 二、解压到某个文件夹 我解压到了D:\mysql\mysql8 下面 然后在这个文件夹下手动创建 my.ini 文件和 data 文件夹 my.ini 内容如下: 注意 basedir 和 datadi…

vue做导入导出excel文档

系统中经常会遇到要实现批量导入/导出数据的功能,导入就需要先下载一个模板,然后在模板文件中填写内容,最后导入模板,导出就可能是下载一个excel文件。 1、导出 新建一个export.js文件如下: import {MessageBox,Mes…

文件摆渡:安全、高效的摆渡系统助力提升效率

很多组织和企业都会通过网络隔离的方式来保护内部的数据,网络隔离可以是物理隔离,也可以是逻辑隔离,如使用防火墙、VPN、DMZ等技术手段来实现,隔离之后还会去寻找文件摆渡方式,来保障日常的业务和经营需求。 进行网络隔…

线上社交app的搭建,圈子社交系统,小程序+app+H5三端,源码交付,支持二开!

在科技飞速发展的大背景下,年轻人社交不再局限于面对面,线上社交app已深入各大年轻人的手机中。相比于传统交友方式,线上社交app为用户提供了更加新奇的交友体验。同时,它还可以吸引更多的朋友,提高用户的整体交友体验…

Spring Boot整合Redisson的两种方式

项目场景 Spring Boot整合Redisson的两种方式,方式一直接使用yml配置,方式二创建RedissonConfig配置类。 前言 redisson和redis区别: Redis是一个开源的内存数据库,支持多种数据类型,如字符串、哈希、列表、集合和有序…

python-pytorch 如何使用python库Netron查看模型结构(以pytorch官网模型为例)0.9.2

Netron查看模型结构 参照模型安装Netron写netron代码运行查看结果需要关注的地方 2024年4月27日14:32:30----0.9.2 参照模型 以pytorch官网的tutorial为观察对象,链接是https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html 模型代…