当前位置:   article > 正文

4.7、IPv4 数据报的首部格式_ipv4首部格式

ipv4首部格式

image-20230101191053436

固定部分:每个 IP 数据报首部都必须包含的内容

  • 某些 IP 数据报的首部除了包含 20 20 20 字节的固定部分外,还包含一些可选的字段来增加 IP 数据报的功能

IP 数据报的首部常以 32 32 32 个比特为单位进行描述

  • 图中的每一行都由 32 32 32 个比特(也就是 4 4 4 字节)构成

每个小格子称为字段或者域

每个字段或某些字段的组合用来表达 IP 协议的相关功能

1、版本字段(4 bit)

版本字段

  • 4 4 4 比特,表示 IP 协议的版本。
    通信双方使用的 IP 协议的版本必须一致。目前广泛使用的 IP 协议版本号为 4 4 4(即 IPv4 )。

image-20230101200113190


2、首部长度字段(4 bit)

首部长度字段

  • 4 4 4 比特,表示 lP 数据报首部的长度。该字段的取值以 4 4 4 字节为单位。
  • 最小十进制取值为 5 5 5 0101 0101 0101) ,表示 IP 数据报首部只有 20 字节固定部分;
  • 最大十进制取值为 15 15 15 1111 1111 1111),表示 IP 数据报首部包含 20 20 20 字节固定部分和最大 40 40 40 字节可变部分。

image-20230101200122082


2、可选字段(1~40 B)

可选字段

  • 长度从 1 1 1 个字节到 40 40 40 个字节不等。用来支持排错、测量及安全等措施
  • 可选字段增加了 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。
  • 这就增加了每一个路由器处理 IP 数据报的开销。实际上可选字段很少被使用。

image-20230101200136513


3、填充字段(全 0)

填充字段

  • 确保首部长度为 4 4 4 字节的整数倍。使用全 0 0 0 进行填充。

IP 数据报的首部长度一定是 4 4 4 字节的整数倍。

  • 由于首部中的可选字段的长度从 1 1 1 个字节到 40 40 40 个字节不等。
  • 那么,当 20 20 20 字节的固定部分 + 1 1 1 40 40 40 字节长度不等的可变部分
  • 会造成首部长度不是 4 4 4 字节的整数倍时,就用取值为全 0 0 0 的填充字段填充相应的字节
  • 以确保 IP 数据报的首部长度时 4 4 4 字节的整数倍

image-20230101200148802


4、区分服务(8 bit)

区分服务

  • 8 8 8 比特,用来获得更好的服务。
  • 该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。
  • 1998 1998 1998 年,因特网工程任务组 IETF 把这个字段改名为区分服务。
  • 利用该字段的不同数值可提供不同等级的服务质量。
  • 只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。

image-20230101200056392


5、总长度(16 bit)

总长度

  • 16 16 16 比特,表示 lP 数据报的总长度(首部 + 数据载荷)。
  • 最大取值为十进制的 65535 65535 65535 2 16 − 1 2^{16}-1 2161),以字节为单位。

image-20230101200224915


首部长度字段和总长度字段的区别与联系

image-20230101200512369

假设首部中的首部长度字段的二进制取值为 0101 0101 0101

  • 则可以计算出 IP 数据报的首部长度: ( 0101 ) 2 × 4 = 5 × 4 = 20 (0101)_2 \times 4 = 5 \times 4 =20 (0101)2×4=5×4=20(字节)

假设首部中的总长度字段的二进制取值为 0000001111111100 0000001111111100 0000001111111100

  • 则可以计算出 IP 数据报的总长度: ( 0000001111111100 ) 2 = 1020 (0000001111111100)_2 = 1020 (0000001111111100)2=1020(字节)

进而可以算出数据载荷的长度

  • 数据载荷长度 = 总长度 - 首部长度 = 1000 1000 1000(字节)

image-20230101200910985


6、标识(16 bit)、标志(3 bit)、片偏移(13 bit)

标识、标志、片偏移

  • 它们共同用于 IP 数据报的分片

image-20230101201033849

这是网络层IP 数据报,它将在数据链路层封装成帧。

每一种数据链路层协议都规定了帧的数据载荷的最大长度

  • 最大传输单元 MTU

image-20230101201315796

需要将原 IP 数据报分片为更小的 IP 数据报,在将各分片 IP 数据报封装成帧

标识字段

  • 16 16 16 比特,属于同一个数据报的各分片数据报应该具有相同的标识。
  • IP 软件维持一个计数器,每产生一个数据报,计数器值加 1 1 1 ,并将此值赋给标识字段。

标志

3 3 3 比特,各比特含义如下:

DF 位:

  • 1 1 1 表示不允许分片;
  • 0 0 0 表示允许分片

MF 位:

  • 1 1 1 表示 “后面还有分片”;

  • 0 0 0 表示 “这是最后一个分片”

保留位:

  • 必须为 0 0 0

片偏移

  • 13 13 13 比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
  • 8 8 8 个字节为单位

image-20230101201033849


7、对 IP 数据报分片

IPv4 数据报进行分片

如下所示:该 IP 数据报的总长度: 3820 3820 3820 个字节

image-20230101202142715

假设使用以太网传送该 IP 数据报。

  • 以太网的最大传送单元 MTU 1500 1500 1500 字节

也就是以太网的数据载荷部分最大为 1500 1500 1500 字节(上层的固定首部 + 数据载荷 = 下层的数据载荷)

  • 无法封装 3820 3820 3820 字节长的 IP 数据报

因此,需要把该 IP 数据报分片成几个更小的 IP 数据报

  • 每个长度不能大于 1500 1500 1500 个字节

然后再将每个分片 IP 数据报封装成一个以太网帧进行传输


我们对原 IP 数据报的数据载荷分成三个更小的分片

前两个分片分别为: 1400 1400 1400 个字节

第三个分片为: 1000 1000 1000 个字节

说明:分片的总长度不能超过 1420 1420 1420 字节

分片结束后,给每个分片重新添加一个首部,使之称为 IP 数据报

image-20230101202844553

思考:给各分片添加的首部是否完全相同呢?

image-20230101203624436

其中分片 1 1 1IP 数据报数据载荷部分的第一个字节,就是原 IP 数据报数据载荷部分的第一个字节

  • 因此片偏移字段的取值为 0 / 8 0/8 0/8(除以 8 8 8 的原因是片偏移字段以 8 8 8 字节为单位)

现在假定分片 2 2 2 的数据报经过某个网络时还需要再进行分片

image-20230101203741857


8、生存时间 TTL (8 bit)

生存时间 TTL

  • 8 8 8 比特,最初以秒为单位,最大生存周期为 255 255 255 2 8 − 1 2^8-1 281) 秒;

    • 路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减去 IP 数据报在本路由器上所耗费的时间,
    • 若不为 0 0 0 就转发,否则就丢弃。
  • 现在以 “跳数” 为单位,路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减 1 1 1

    • 若不为 0 0 0 就转发,否则就丢弃。

image-20230101203956310


9、生存时间 TTL 的作用

生存时间 TTL 的作用

  • 防止 IP 数据报在网络中永久兜圈

如下所示

image-20230101204328680

为了简单起见,只给出了路由表中的由人工配置的静态路由条目

例如:R2 的路由表的目的网络 N2 条目

image-20230101204451072


假设我们在人工配置这条静态路由条目时,错将下一跳 R3 配置成了 R1

  • 这将导致将去往网络 N2IP 数据报错误地转发给路由器 R1

image-20230101204626931

假设 N1 要发给 N2 IP 数据报

image-20230101213214058

若没有其他措施,IP 数据报将在路由环路中永久兜圈


10、协议字段 (8 bit)

协议字段

  • 8 8 8 比特,指明 IPv4 数据报的数据部分是何种协议数据单元。
  • 常用的一些协议和相应的协议字段值如下。

image-20230101213426030

例如:image-20230101213454788


11、首部检验和字段(16 bit)

首部检验和字段

  • 16 16 16 比特,用来检测首部在传输过程中是否出现差错。

  • CRC 检验码简单,称为因特网检验和。

IP 数据报每经过一个路由器,路由器都要重新计算首部检验和

  • 因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。

由于 IP 层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作

  • 因此在 IPv6 中,路由器不再计算首部校验和,从而更快转发 IP 数据报。

image-20230101213552709


12、源 IP 地址(32 bit)和目的 IP 地址(32 bit)

源 IP 地址和目的 IP 地址

  • 各占 32 32 32 比特,用来填写发送该 IP 数据报的源主机的 IP 地址和接收该 IP 数据报的目的主机的 IP 地址。

image-20230101213810333


13、习题 ! ! \color{red}!! !!

image-20230101213919446

image-20230101214506671

image-20230101214631743


image-20230101215156058

IP 分组头中,目的 IP 地址字段前还有 16 16 16 个字节的内容

在以太网帧中,数据载荷前还有 14 14 14 个字节的内容

因此,在以太网帧中,从第 31 31 31 个字节开始的 4 4 4 个字节,实际上就是 IP 地址的内容

image-20230101215736690

题目所给的以太网数据帧的第一列数据,实际上并不是以太网帧的内容,仅仅作为行号

  • 其增量为 16 16 16 ,表示每行有 16 16 16 个字节的内容

image-20230101220027206

从图中可知,主机的默认网关就是路由器 R,主机会将 Web 请求发送给默认网关

  • 由默认网关将 Web 请求转发到因特网。

因此,以太网帧头中的目的 MAC 地址字段,封装的就是默认网关的 MAC 地址。

image-20230101220220851

4 4 4

image-20230101220304874

14、小结

image-20230101220336398

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/483140
推荐阅读
相关标签
  

闽ICP备14008679号