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

posted @ 2020-08-11 18:00  _Sandman  阅读(2294)  评论(0编辑  收藏  举报