• (王道考研计算机网络)第四章网络层-第三节1:IP数据报格式及分片


    一:IP数据报格式

    • 网络层最重要的便是IP协议,它定义了数据传送的基本单元——IP数据报
      在这里插入图片描述

    IP数据报格式:一个IP分组由首部数据两部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。IP 数据报的格式如下图所示

    在这里插入图片描述

    • 版本:指IP的版本,目前广泛使用的版本号为4,即IPv4

    • 首部长度:占4位,以32位为单位,最大值为60B (15×4B)。 最常用的首部长度是20B,此时不使用任何选项(即可选字段)

    • 区分服务:用于指示期望获得哪种类型的服务

    • 总长度:占16位。指首部和数据之和的长度,单位为字节,因此数据报的最大长度为216-1= 65535B。以太网帧的最大传送单元(MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部加数据) 一定不能超过下面数据链路层的MTU值

    • 标识:占16位。它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。但它并不是“序号”(因为IP是无连接服务)。当一个数据报的长度超过网络的MTU时,必须分片,此时每个数据报片都复制一次标识号,以便能正确重装成原来的数据报

    • 标志:占3位。标志字段的最低位为MF,MF= 1表示后面还有分片、MF=0表示最后一个分片。标志字段中间的一位是DF,只有当DF=0时才允许分片

    • 片偏移:占13位。它指出较长的分组在分片后某片在原分组中的相对位置。片偏移以8个字节为偏移单位,即每个分片的长度一定是8B (64位)的整数倍

    • 首部校验和:占16位。IP数据报的首部校验和只校验分组的首部,而不校验数据部分

    • 生存时间(TTL):占8位。数据报在网络中可通过的路由器数的最大值,标识分组在网络中的寿命,以确保分组不会永远在网络中循环。路由器在转发分组前,先把TTL减1。若TTL被减为0,则该分组必须丢弃

    • 协议:占8位。指出此分组携带的数据使用何种协议,即分组的数据部分应交给哪个传输层协议,如TCP、UDP等(值为6表示TCP,值为17表示UDP)

    • 源地址字段:占4B,标识发送方的IP地址

    • 目的地址字段:占4B,标识接收方的IP地址

    • 可选字段:占0-40B,用于支持排错、测量及安全等措施

    • 填充:全0,用于把首部补成4B的整数倍

    二:IP数据报分片

    IP数据报分片:前面说过,最大传送单元(MTU)是指链路层数据报能承载的最大数据量。因此,由于IP数据报被封装在链路层数据报中,所以链路层的MTU严格限制着IP数据报的长度,而且在IP数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同搞得MTU。所以,当IP数据报的总长度大于链路MTU时,就需要将IP数据报中的数据分装在两个或多个较小的IP数据报中,这些较小的数据报称为

    在这里插入图片描述

    要完成IP数据报的分片与重组,需要借助IP数据报格式中的标识、标志和片偏移

    • 标识:同一数据报的分片使用同一标识
    • 标志中间为DF(DF=1表示禁止分片;DF=0表示允许分片)和最低位MF(MF=1表示后面还有分片;MF=0表示最后一片或者没有分片了)
    • 片偏移:指出较长分组分片后某片在原分组中的相对位置,以8B位单位

    特别注意: 除了最后一个分片,每个分片长度一定是8B的整数倍

    如下是一个分片的典型例子

    在这里插入图片描述

  • 相关阅读:
    如何把MapGIS的区文件转为ArcGIS的SHAPE面文件
    【Rust日报】2022-07-05 让 Rust 库更优美的九个建议
    力扣 138. 随机链表的复制
    通过Dapr实现一个简单的基于.net的微服务电商系统(二十)——Saga框架实现思路分享
    go使用 github.com/influxdata/influxdb/client/v2 写数据到 influxdb
    脑机接口的商业化道路,还要走多远多长?
    分布式数据库难题(一):数据分区
    下载工程resources目录下的模板excel文件
    实名核验类API推荐
    MD5 绕过第二式:数组绕过
  • 原文地址:https://blog.csdn.net/qq_39183034/article/details/125284942