本章将从两个方面讨论 IP 协议:
IP头部信息:IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。
IP数据报的路由和转发:IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。它们决定数据报是否应该转发以及如何转发。
2.1- IP服务的特点
IP协议的特点是为上层提供无状态、无连接、不可靠的服务。
无状态:指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。
缺点:无法处理乱序和重复的IP数据报。
优点:简单、高效。
无连接:指IP通信双方都不长久地维持对方的任何信息。这样,上层协议每次发送数据的时候,都必须明确指定对方的IP地址。
不可靠:指IP协议不能保证IP数据报准确地到达接收端,它只是承诺尽最大努力(best effort)。很多种情况都能导致IP数据报发送失败。
2.2- IPv4 头部结构
头部信息占4位,最长位60字节(2^4-1)*4。
总长度 占16位,最大长度为65535字节( 2^16-1 ),但由于MTU(最大传输单元)的限制,长度超过MUT的数据报都将被分片传输。
2.3- IP分片
由于MTU的限制,长度超过MUT的IP数据报都将被分片传输。
IP头部中的如下三个字段给IP的分片和重组提供了足够的信息:数据报标识、标志和片偏移。一个IP数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但具有不同的片偏移。并且除了最后一个分片外,其他分片都将设置MF标志。此外,每个分片的IP头部的总长度字段将被设置为该分片的长度。
如图为将数据长度为1501字节的IP数据包分片,第一个IP片长度为1500字节,且第一个分片必须要设置MF标志位。第二个分片实际有效数据只有1字节,但是每一个子分片都必须包含相同的IP头部,便于识别和后面的数据拼接。(p.s. IP头部中包含数据报标识、标志和片偏移)
2.4- IP路由
IP协议的一个核心任务是数据报的路由,即决定发送数据报到目标机器的路径。
2.4.1- IP模块工作流程
2.5- IP转发
不是发送给本机的IP数据报将由数据报转发子模块来处理。路由器都能执行数据报的转发操作,而主机一般只发送和接收数据报,这是因为主机上 /proc/sys/net/ipv4/ip_forward内核参数默认被设置为0。我们可以通过修改它来使能主机的数据报转发功能。
2.7- IPv6头部结构
IPv6协议是网络层技术发展的必然趋势。它不仅解决了IPv4地址不够用的问题,还做了很大的改进。比如,增加了多播和流的功能,为网络上多媒体内容的质量提供精细的控制﹔引入自动配置功能,使得局域网管理更方便﹔增加了专门的网络安全功能等。
注:IPv6协议并不是IPv4协议的简单扩展,而是完全独立的协议。