一 概念
IP是TCP/IP协议族在网络层使用的传输机制,是一种不可靠的无连接数据报协议(尽最大努力交付),它依靠更高层的协议来解决可靠性问题。
二 数据报
网络层的分组称为数据报,数据报是一个可变长度的分组,它由两部分组成:首部和数据。如下图所示:
VER:版本,目前为4。
HLEN:首部长度,以4字节为单位,最小长度为20字节。
总长度:以字节为单位。为何需要该字段?
封装在一个帧里不仅仅只有数据报,有时还有填充字段(IP数据报长度小于46字节时),此时剥去帧的首部和尾部得到的是数据报+填充字段,当机器对该数据报进行拆装时,必须检查总长度字段。以便确认数据的真正长度。
备注:数据长度=总长度-首部长度
标识、标志、分片偏移:用于分片。
生存时间:经过一个路由器减一,为0时丢弃,该字段目的:
(1)防止路由表毁坏导致数据报在两个或多个路由器间逗留很长时间,也没能交付到主机。
(2)设置该字段为1可把该分组闲着在局域网范围。
协议:定义了使用此IP层服务的高层协议。
源地址、目的地址:两个字段始终保持不变。
三 分片
3.1 最大传输单元MTU
当数据报被封装成帧时,数据报的总长度必须小于数据链路层数据字段最大长度(以太网1500B)。而IP数据报的最大长度为65535B,如果IP数据报长度大于MTU,则需要分割数据报,这就是分片。
数据报可以被源主机或途中的任何路由器分片,但数据报的重装却只能在目的主机上进行,理由如下:
(1)一个数据报的多个数据报片会走不同的路径。
(2)同一数据报的多个数据报片总会到达目的主机。
(3)传输期间重装会严重影响效率。
3.2 与分片相关的字段
对数据报进行分片的主机或路由器必须改变三个字段的值:标志、分片偏移、总长度。其余字段必须被复制,不管是否进行分片,校验和总是要重新计算。
与一个数据报的分片与重装有关的字段是:标识、标志和分片偏移。
标识:标识+源IP地址唯一确定这个数据报。数据报分片时,标识字段的值要复制到所有分片中,即所有分片都具有相同的标识号。终点会将具有相同标识的分片组装成一个数据报。
标志:3位,第一位保留;第二位为“不分片”位,为1不可分片;第三位为“还有分片”位,为1标识其后还有分片。
分片偏移:分片在整个数据报中的相对位置(永远是相对于原始数据报的)。以8B位单位。——第一个分片的字节数量能被8除。
3.3 重装策略
(1)第一个分片的分片偏移字段为0。
(2)第一个分片的长度除以8得到第二个分片偏移值。
(3)第一个和第二个分片总长度除以8,得到第三个分片偏移值。
(4)继续以上过程,直到最后一个分片的“还有分片”位为0。
四 选项
IP数据报首部由两部分组成:固定部分(20B)和可变部分(选项,最长40B)。
8位的长度字段定义了选项的总长度,包括类型字段和长度字段本身。
编号字段:
无操作:用作选项和选项间的填充,使下一个选项16或32位对齐。
选项结束:选项字段结束时的填充,后面跟着数据部分。
记录路由:记录处理数据报的因特网路由。
严格路由:预先指定数据报传送时的路由。
不严格路由:所列路由器必须通过,但也可以通过其他路由器。
时间戳:记录路由器处理数据报的时间。
备注:traceroute跟踪分组的路由,-g选项实现不严格路由,-G实现严格路由。
五 校验和
发送端计算校验和,接收端进行相同的计算,相符合则接受分组,否则丢弃分组。
5.1 发送端计算校验和
(1)把分组划分k段,每段n位(一般为16)。
(2)反码算术运算把所有段相加。
(3)最终结果取反码。
5.2 接收端计算校验和
(1)把分组划分k段。
(2)把所有段相加。
(3)将和取反码,结果为0则接收分组。
5.3 IP分组中的校验和
(1)把校验和字段置为0。
(2)把首部划分为16位的段。
(3)各段相加结果取反,并插入校验和字段。
备注:IP分组校验和仅覆盖首部,而不管数据,原因?
(1)将数据封装在IP数据报中的所有高层协议,都有一个涉及整个分组的校验和字段。
(2)没经过一个路由器,IP数据报的首部就要有所变化,但数据部分保持不变。校验变化部分即可。