计算机网络(18)——IPv4 数据报格式及分片


因特网网络层包括三个主要组件:
IP 协议
路由选择部分,它决定了数据分组从源到目的所流经的路径,由路由选择协议计算出用于网络中转发分组的 转发表
ICMP 协议,即互联网控制报文协议,用于网络层的差错和信息报告。ICMP 协议可以看作是 IP 协议的伴随协议,通常实现 IP 协议的同时也需要实现 ICMP 协议。
在这里插入图片描述

IPv4 数据报

IPv4 数据报格式

在这里插入图片描述

IPv4数据报中的关键字段如下:

  • 版本号字段占 4 位:IP 协议的版本号。如 4 指 IPv4协议,6 指 IPv6 协议。
  • 首部长度字段占 4 位:IP 分组首部长度,以 4 字节位单位。大多数 IP 数据报不包含选项字段,所以一般的 IP 数据报具有 20 字节的首部,即该字段为 5。
  • 服务类型(TOS)字段占 8 位:指示期望获得哪种类型的服务,以便对时延、吞吐量或可靠性等有要求的数据报能互相区别开来。只有在网络提供区分服务(DiffServ)时才使用该字段,一般情况下不使用,通常该字段的值为零。
  • 总长度字段占 16 位:IP 分组的总字节数(首部+数据),以字节为单位。因为该字段长 16 位,所以 IP 数据报的理论最大长度位 65535 字节。然而受最大传输单元(Maximum Transmission Unit,MTU)的限制,达不到这么大的分组长度。
  • 标识、标志位、片偏移与 IP 数据报分片有关。
  • 生存时间(TTL)字段占 8 位:IP 分组在网络中可以通过的路由器数(或跳步数)。每当数据报由一台路由器处理时,该字段的值减 1。若 TTL 字段减为 0,则该数据报必须丢弃(并向源主机发送 ICMP 报文)。
  • 协议字段占 8 位:指示 IP 数据报的数据部分应交给哪个特定的传输层协议,仅在 IP 数据报到达其最终目的地才会有用,用于实现多路复用 / 分用。例如,值为 6 表明数据部分要交给 TCP,值为 17 表明数据要交给 UDP,值为 1 表明数据要交给 ICMP
  • 首部校验和字段占 16 位,实现对 IP 分组首部的差错检测。与 UDP 校验和计算是一样的。逐跳计算,逐跳检验
  • 源 IP 地址、目的 IP 地址字段各占 32 位:分别标识发送分组的源主机 / 路由器(网络接口)和接收分组的目的主机 / 路由器(网络接口)的 IP 地址。
  • 选项字段长度可变,范围在 0~40 字节之间:携带安全、源选路径、时间戳和路有记录等内容,实际上很少被使用。
  • 填充字段长度可变,范围在 0~3 字节之间:目的是补齐整个首部,符合 32 位对其,即保证首部长度是 4 字节的倍数。

IP 数据报分片

并不是所有的链路层协议都能承载相同长度的网络层分组,网络链路存在最大传输单元(Maximum Transmission Unit,MTU),指该链路数据帧可封装数据的上限,因此链路层协议的 MTU 严格地限制着 IP 数据报的长度。不同链路的 MTU 可能是不相同的。例如,以太网帧能够承载不超过 1500 字节的数据,某些广域网链路地帧可承载不超过 576 字节的数据。

在这里插入图片描述

当大的 IP 分组向较小 MTU 链路转发时,可以被“分片”,IP 分片到达目的主机后进行“重组”(路由器只负责分片,不负责组装)。IP 首部的相关字段(总长度、标识、标志位和片偏移)用于标识分片以及确定分片的相对顺序:

  • 标识字段占 16 位:标识一个 IP 分组。
    IP 协议利用一个计数器,发送主机每产生 IP 分组计数器加 1,作为该 IP 分组的标识。当某路由器需要对一个数据报分片时,形成的每个分片具有初始数据报的源地址、目的地址和标识号

  • 标志位字段占 3 位。
    DF(Don’t Fragment) 为 1 表示禁止分片;
    MF(More Fragment) 为 1 表示已经分片了,且该分片非最后一片;MF 为 0 则表示该分片为最后一片或未分片(通过下一个片偏移字段区分)。
    在这里插入图片描述

  • 片偏移字段占 13 位:一个 IP 分组分片封装原 IP 分组数据的相对偏移量,以 8 字节为单位

假设原 IP 分组总长度为 L L L,待转发链路的 MTU 为 M M M,若 L > M L>M L>M D F = 0 DF=0 DF=0,则可以 / 需要分片:每个分片具有初始数据报的源地址、目的地址和标识号。通常分片时,除最后一个分片,其他分片均分为 MTU 允许的最大分片,一个最大分片可封装的数据应该是 8 的倍数(由于片偏移字段以 8 字节为单位),因此一个最大分片可封装的数据字节数为:
d = ⌊ M − 20 8 ⌋ ∗ 8 d = \lfloor \frac{M-20}{8}\rfloor * 8 d=8M208需要的总片数为:
n = ⌈ L − 20 d ⌉ n = \lceil \frac{L-20}{d} \rceil n=dL20每片的片偏移字段取值为:
F i = d 8 ∗ ( i − 1 ) , 1 ≤ i ≤ n F_i= \frac{d}{8} * (i-1), 1 \leq i \leq n Fi=8d(i1),1in每片的总长度字段取值为:
L i = { d + 20 1 ≤ i < n L − ( n − 1 ) d i = n L_i=\left\{ \begin{array}{lc} d+20 & 1 \leq i <n \\ L-(n-1)d & i=n \end{array} \right. Li={d+20L(n1)d1i<ni=n每片的 MF 标志位为:
MF i = { 1 1 ≤ i < n 0 i = n \textbf{MF}_i=\left\{ \begin{array}{lc} 1 & 1 \leq i <n \\ 0 & i=n \end{array} \right. MFi={101i<ni=n举例:

下面的例子中,原 IP 分组总长度为 4000 字节,链路层 MTU 为 1500 字节,DF=0 表示可以分片。那么一个最大分片可封装的数据恰好为 1500-20 = 1480 字节(为 8 的倍数),因此原数据报可以分为 3 片。
在这里插入图片描述

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值