提到网络层最重要的协议,当属IP协议莫属。IP协议根据端到端的设计原则,IP只为主机提供一种无连接、不可靠、尽力而为的数据报传输服务。设计IP地址的目的是提高网络的可扩展性,一方面解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络应用之间的耦合关系,有利于两者的独立发展。
如图所示,IP数据报分为首部与数据部分。
1)数据部分:由传输层传下来的TCP或UDP报文
2)首部:IP协议的主要体现,传输层数据+IP首部 = IP数据报。首部可分为固定部分与可变部分,具体说明请往下看。
IP数据报首部分为固定部分和可变部分。如图,每一行是四个字节,固定部分占5行,共20字节,可变部分大小不定,但不超过40字节,且一定为4字节的整数倍。针对首部中的各个部分,以下是详细说明:
1)版本:指定了IP数据报的版本, 常用的有IPv4(4)与IPv6(6)
2)首部长度:指定了IP数据报首部的长度,单位为4字节。
例如首部长度部分为0111->7,则表示首部共占7*4=28字节,也可以推出可变部分为28-20=8字节
3)区分服务:指定本IP数据报的上层协议的服务类型,通常不适用,置为0。
在特殊时候,如某些数据报希望优先通过,可在这些数据包上增加区分服务字段,并通告所有路由器,让带有该区分服务字段的数据报优先传输
4)总长度:指定整个IP数据报的长度,单位为1字节,最大值为65535,但由于MTU的限制,通常都无法达到这个长度。
由上可知,IP数据报的总长度可能会大于MTU(链路层数据帧最大传输单元),此时就需要对IP数据报进行分片。而分片后的片段管理就和一下三个字段有关:标识、标志、片偏移
5)标识:同一数据报的不同分片取一个共同标志,来说明它们"同属一家"。
6)标志:共三位 一个无用位(设为0)、一个禁止分片位(DF)、一个更多分片位(MF)
当DF=1时,说明该数据报没有分片,其他分片相关的字段也没有意义了
当DF=0时,说明该数据包经过了分片处理,若MF=0,代表该数据报是多个分片中的最后一个分片,即其后没有更多分片,若MF=1,代表该数据报不是最后一个分片
7) 片偏移:指定本数据报在原数据报中的偏移位,单位为8字节。
8)生存时间:指定IP数据报的最大生存时间,每经过一个路由器-1,减小至0则销毁IP数据报。
此字段可解决环路死循环造成的流浪IP数据报浪费带宽的问题。
各系统发送数据报的默认生存时间:Linux(64)、Windows(128)、Unix(255)
9)协议:指定本数据报应交付给何种协议进程。
常见协议号:ICMP (1) IGMP(2) TCP(6) UDP(17) IPv6(41)OSPF(89)
10) 首部检验和:一个检验字段,检查首部是否遭到了修改。
检验算法是:发送方将首部两字节对齐,取反码求和,获得的结果存在首部检验和中。接收方将首部两两对其,取反码求和,若最终结果为0,认为首部正常,否则,丢弃该数据报。
11)源地址/目的地址:数据报的源IP地址/目的IP地址(IP地址在下一节中详解)
12)可选字段:丰富IP数据报可提供的功能,不详述。
13)填充:由于可选字段大小不定,需要填充字段将整个首部补齐成4字节的整数倍,保证4字节对齐原则