IP 协议(五)
TCP/IP 系列文章
网络基础知识(一)
TCP/IP基础知识(二)
物理层(三)
数据链路层(四)
IP 协议(五)
IP 协议相关技术(六)
TCP与UDP(七)
前言
网络层的关键作用在于路由寻址,这主要依靠路由选择协议来实现,路由选择协议的核心在于利用路由算法生成路由表。
IP (Internet Protocol)即网际协议,主要负责将数据包发送给最终的目标计算机。因此, IP 能让世界上任何两台计算机之间进行通信。
数据链路层的作用在于实现同一种数据链路下的包传递,而网络层则可以实现跨越不同数据链路的包传递。比如主机A通过Wi-Fi连接到路由器B,路由器B通过以太网连接到路由器C,而路由器C又通过Wi-Fi与主机D保持连接。这时主机A向D发送的数据包就依赖于网络层进行传输。
一、IP基础知识
1.1 IP 地址
IP地址是一种在网络层用于识别通信对端信息的地址。不同于于数据链路层中的 MAC 地址,MAC 地址用于标识同一链路下不同的计算机。
IP地址由 32 位正整数表示,在计算机内部以二进制形式处理,分成4个部分,每个部分由 8 位整数组成,对应十进制的范围就是0-255。
IP 地址
2 的 32 次方约等于 43 亿,你可能会认为最多允许43亿太设备连接到计算机网络。实际并非如此,实际数值远远小于这个值。 IP 地址的分配并非是根据主机台数配置的,而是每一台主机的每一块网卡(NIC)都要设置 IP 地址。通常一块网卡只设置一个 IP 地址(其实一块网卡也可以配置多个 IP 地址)。而一台路由器通常会配置两个以上的网卡,因此要设置两个以上的 IP 。
IP 地址由“网络标识”和“主机标识”两部分组合而成。网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不重复。而相同段内相连的网络主机必须具有相同的网络地址。“主机标识”则不允许在同一个网段内重复出现。由此可见, IP 地址具有唯一性。
1.2 IP 分类
IP地址分为四个级别,分别为A类、B类、C类和D类。分类的依据是IP地址的前四位。
IP 分类
如上图:
- A类
IP地址是第一位为0
的地址。前8位是网络标识,用十进制标识的话0.0.0.0 - 127.0.0.0
是A类IP地址的理论范围。后 24 位是主机标识, 每个网段内主机上限为2的24次方,也就是16777214
个。 - B类
IP 地址前两位为10
。前16位是网络标识,用十进制标识的话128.0.0.0-191.255.0.0
是 B 类 IP 地址的范围。B 类 IP 地址的后 16 位相当于主机标识,因此一个网段内可容纳主机地址上限为65534个。 - C类
IP地址是前三位为110
的地址。C类IP地址的前 24 位是网络标识,用十进制标识的话192.0.0.0-223.255.255.0
是 C 类 IP 地址的范围。C 类地址的后 8 位是主机标识,共容纳 254 个主机地址。 - D类
IP地址是前四位为1110
的地址。D类IP地址的网络标识长 32位,没有主机标识,因此常用于多播。 - 注意点:
在分配 IP 地址时关于主机标识哟一点需要注意。用比特位标识主机地址时,不可以全部为 0 或全部为 1.因为 全部为 0 是在对应的 IP 地址无法获取的情况下才使用,全部为 1 的 IP 地址通常作为广播地址。因此实际分配 IP 的过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只有 254 (而不是256)个主机地址的原因所在。
1.3 子网掩码
IP 地址总长度32位,它能表示的主机数量大约在43亿左右。然而由于 IP 地址分类会造成极大的浪费。如:B 类 IP 理论上一个链路内大约允许 6 万 5 千多台计算机连接。然而实际网络架构中,一般不会再同一个链路上连接如此多的设备,因此这种网络架构实际上不存在的。
IP 地址分类的本质是区分网络标识和主机标识,通过使用子网掩码可以解决这种浪费问题。子网掩码长度是 32 位,计算机内部由一段连续的 1 和 一段连续的0组成。其中 1 的长度表示网络标识的长度。以IP地址172.20.100.52
为例,它本来是一个 B 类IP地址(前16位是网络标识),但通过子网掩码,它可以是前26为为网络标识的IP地址,可以极大程度上扩充 IP 地址的数量。
二、路由控制
网络层的关键作用在于路由寻址,这主要依靠路由选择协议来实现,路由选择协议的核心在于利用路由算法生成路由表。路由控制(Routing)是指将分组数据发送到目标地址的功能,这个功能一般由路由器完成,其中路由器中保存着路由控制表。请仔细看下图,通过对下图的详细讲解来看一下路由控制的整个流程。
路由控制- 第一步:
主机A的地址是10.1.1.30
,要把数据发往地址为10.1.2.10
的主机。在主机A的路由表中,保存了两个字段,由于目标地址10.1.2.10
与10.1.1.0/24
段不匹配,所以它被发往默认路由10.1.1.1
也就是图中路由器1的左侧网卡的IP地址。 - 第二步:
路由器 1 继续在它自己的路由控制表中查找目标地址10.1.2.10
,它发现目标地址属于10.1.2.0/24
这一段,因此将数据转发至下一个路由器10.1.0.2
,也就是路由器 2 的左侧网卡的地址。 - 第三步:
路由器 2 在自己的路由控制表中查找目标地址10.1.2.10
,根据表中记录将数据发往10.1.2.1
接口,也就是自己的右侧网卡的 IP 地址。主机 B 检查目标IP地址和自己相同,于是接收数据。
- 环回地址
环回地址是在同一台计算机上的程序之间进行网络通讯时所使用的一个默认地址。计算机使用一个特殊的 IP 地址127.0.0.1
作为环回地址。与该地址具有相同意义的是一个叫做localhost
的主机名。使用这个 IP 或主机名时,数据包不会流向网络。
三、IP 分割处理与再构成处理
3.1 IP报文分割与重组
分片处理往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。下图展示了分片处理的过程。由于数据链路层中以太网默认的 MTU 是 1500 字节,因此 4342 字节的 IP 数据无法在一个帧当中完成。此时路由器将数据分成了3个分片进行发送。因为不同数据链路的 MTU 不同,所以这种分片的处理只要路由器认为有必要,会周而复始的进行。目标主机会对分片后的 IP 数据进行重组。
3.2 路径 MTU 发现
上面提到的分片机制有两个不足点。
- 路由器的处理负荷增加。路由器本身就又很多工作要做(如网络安全中的数据过滤)。
- 分片处理中,一旦某个分片丢失,则会造成整个 IP 数据作废。
针对以上问题,产生了一种新技术 “路径 MTU 发现”。所谓的路径 MTU 就是存在所有数据链路中最小的 MTU。 主机会首先获取整个路径中所有数据链路的最小MTU,并按照整个大小将数据分片。因此传输过程中的任何一个路由器都不用进行分片工作。
路径 MTU 发现具体流程。
- 第一步:
主机首先发送整个数据包,并将IP首部的禁止分片标志设为 1 。这样路由器在遇到需要分片才能处理的包时不会分片,而是直接丢弃数据并通过 ICMP 协议将整个不可达的消息发回给主机。- 第二步:
主机将 ICMP 通知中的 MTU 设置为当前MTU,根据整个MTU对数据进行分片处理。- 第三步:
如此反复执行第一步和第二步,直到不再收到 ICMP 通知,此时的MTU就是路径MTU。
如下图是 UDP 协议 MTU 路径发现的流程。
UDP协议为例,路径 MTU 发现机制四、IPV6 和 IPV4
4.1 IPV6
首先要知道 IPV6 是为了从根本上解决 IPV4 地址耗尽的问题,而被标准化的网际协议。IPV4 地址长度为 4 个 8 位字节,即 32 比特。而 IPV6 的地址长度则是原来的 4倍,即 128 比特,一般写成 8 个 16 位字节。另外还要知道 IPV6 不仅能解决 IPV4地址耗尽的问题,还能弥补 IPV4 的一些缺陷。
4.2 IPV4首部介绍
如下图是 IPV4 的首部结构,理解了首部结构能更好的有利于我们理解 IP 协议。
IPV4 首部结构总长度:表示IP首部与数据部分总的字节数,该段长16比特,所以IP包的最大长度为65535字节(2^16)。虽然不同数据链路的MTU不同,但是IP协议屏蔽了这些区别,通过自己实现的数据分片功能,从上层的角度来看,IP协议总是能够以65535为最大包长进行传输。
标识:用于分片重组。属于同一个分片的帧的ID相同。但即使ID相同,如果目标地址、源地址、上层协议中有任何一个不同,都被认为不属于同一个分片。
标志:由三个比特构成。
第一个比特未使用,目前必须是0。
第二个比特表示是否进行分片,0表示可以分片,1表示不能分片。在路径MTU发现技术中就用到了这个位。
第三个比特表示在分片时,是否表示最后一个包。1表示不是最后一个包,0表示分配中最后一个包。
片偏移:由13比特组成,表示被分片的段相对于原始数据的位置。它可以表示8192(2^13)个位置,单位为8字节,所以最大可以表示8 x 8192 = 65536字节的偏移量。
生存时间(TTL: Time To Live):表示包可以经过多少个路由器的中转。每经过一个路由器,TTL 减1。这样可以避免无限传递包的问题。
协议: 表示IP首部的下一个首部属于哪个协议。比如TCP协议的编号为6,UDP编号为17。
首部校验和:用于检查IP首部是否损坏。
可选项:仅在测试或诊断时用,可以没有。如果有,需要配合填充(Padding)使用,占满32比特。