IP数据报格式以及分片
网络层协议主要有4个:
ARP协议
IP协议 最重要
ICMP协议
IGMP协议
IP数据报的格式
IP数据报要是比较大,就需要分隔,分隔后的小单元就是分组
固定部分:顾名思义一定要有,所有IP数据报都有,大小20字节
可变部分:大多数情况下都是没有可变部分的。可有可无optiona
上图是IP数据报首部的图,固定部分+可变部分
数据部分其实就是传输层。等到传输层再讲
-
版本字段:IPV4 还是IPV6
-
首部长度 占4bit,理论范围是0-15,但是考虑到固定部分必须有20字节,它的范围就是5-15 单位是4B 最小5的话,\(5✖️4B=20B(固定长度)\)
-
区分服务 这个字段很少用,有时候急着发送的时候会有加急选项。反正很少用
-
总长度 首部长度+数据部分长度 整个IP数据报的长度 单位是1B
IP数据报长度上限值 是$2^{16}-1=65535B $ 但是考虑到数据链路层的MTU,实际中还是不会取到65535,早早都已经分片了
-
标识
-
标志
-
片偏移
上面三个都是和IP数据报分片成分组相关
-
生存时间TTL :每经过一个路由器,TTL就会减一,变成0就丢弃。防止不能传输到目的的数据报不会在网络中无限传输,让它传一会就死掉
-
协议字段 数据部分使用的的协议(传输层使用的协议)
-
首部检验和:
首部的这些字段中,诸如生存时间、片偏移、标识每经过一个路由器都会发生变化。首部检验和就是看整个首部有没有变化到出错。
-
源地址
-
目的地址 32位IP地址
-
可选字段 可有可无。有的话,可能会增强一些功能。
-
填充字段。补0 自然要填充成4B的整数倍,呼应首部长度4B单位的要求
IP数据报分片的过程
以太网中,链路层的数据部分最大传输单元MTU1500字节。
而链路层的数据部分就是一个IP数据报,也就是一个IP数据报的整个长度都不能超过1500字节! 要是IP数据报的首部是20字节,那么数据部分的最大长度就是1480字节
对于有的IP数据报的长度要是超过1500B,多数情况都需要分片 ,分成IP分组;但是也有例外,要是IP数据报不同意分组,这个数据报就不能传输给链路层封装,就返回一个错误,ICMP错误!
分片的话,就要结合IP数据报的三个字段:
-
标识: 同一数据报的分片 都会使用相同的标识。最终组合起来就是靠着标识
-
标志:
标志字段有三位,只要后两位有意义 \(X ~\_~\_\)
中间位表示"禁止分片", don't fragment (DF):1 表示不许分片 0 :表示允许分片
最低位表示 "更多分片" more fragment (MF) :1 表示后面还有分片
0: 表示后面没有分片/最后一个分片了
-
片偏移:
IP数据报分组分片后,某一个片在原来片中的相对位置,以8B为单位。解决中间分片的位置关系 , 占13bit 除了最后一个分片,每一个分片都是8B的整数倍
这个MTU是1420 不同数据链路层协议的MTU不同
分片2的偏移量是 \(1400B /8=175\)
分片3的偏移量 \(2800B /8=350\)
IP数据报格式几个字段格式单位区分:
总长度 ——1B
首部长度——4B
片偏移——8B