ipv4报文头部详解

ipv4报文头

Type of Service 在部分资料中又称为DS Field

各字段解释

版本(Version)
该字段规定了 IP协议的版本,值为4。长度为4位。
Internet 报头长度(Internet Header Length, IHL)
该字段表示有效载荷之前的4字节块的数量。该字段长度为4位。因为IPv4报头的最 小长度为20字节,所以其值最小为5。
服务类型(Type of Service, ToS)
该字段指定路由器在传送过程中如何处理数据报文,也即表示这个数据报文在由IPv4 网络中的路由器转发时所期待的服务。这个字段长度为8位。这个字段也可以解释为区分业务编码点(Differentiated Services Codepoints, DSCP)。RFC2474 提供了关于 DSCP 的
详细定义。
总长度(Total Length)
该字段表示IP数据报文的总长度(单位为字节),包括报头和有效载荷。这个字段的 长度为16位。
标识(Identification)
16位标识(identification)唯一地标识主机发送的每一个数据报。其初始值由系统随机生成;每发送一个数据报,其值就加1。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标识值。
标志(Flags)
该字段长度为3位,当前只定义了 2位,一个用来表示是否可以对IPv4数据报文进行 拆分,另一个表示在当前的分段之后是否还有分段。
IP协议的首部“标志”中标志(flag) 占 3 位,只有后两位有意义。标志字段中间的一位是 DF (Don’t Fragment) 只有当 DF =0 时才允许分片。
标志字段的最低位是 MF (More Fragment)。MF =1 表示后面“还有分片”。MF =0 表示最后一个分片。
片段偏移量(Fragment Offset)
该字段表示相对于原始IPv4有效载荷起始位置的相对位置。这个字段的长度为13位。
生存时间(Time to Live)
该字段指出了一个IPv4数据报文在被丢弃前,可以经过的链路的最大数量。该字段值 每经过一个路由器时减去1,当为0时,数据报文将被丢弃。长度为8位。
协议(Protocol)
该字段用于标识有效载荷中的上层协议。长度为8位。

协议(Protocol):长度8比特。标识了上层所使用的协议。
以下是比较常用的协议号:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF

报头校验和(HeaderChecksum)
表示IP报头的校验和,用于错误检查。该字段仅用于IP报头的校验和,有效载荷不包 括在校验和计算中。数据报文沿途的每个中间路由器都重新计算和验证该字段(因为路由器 转发数据报文时,TTL值都会变化)。该字段长度为16位。
源地址(Source Address)
发送方的IP地址,长度为32位。
目的地址(Destination Address)
接收方的IP地址,长度为32位。
选项(Options)
该字段是一个可选项。


分片详解

在这里插入图片描述

• 网络中转发的IP报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度,则报文就需要分割成若干个较小的片段才能够在链路上传输。将报文分割成多个片段的过程叫做分片。
• 接收端根据分片报文中的标识符(Identification),标志(Flags),及片偏移(Fragment Offset)字段对分片报文进行重组。标识符用于识别属于同一个数据包的分片,以区别于同一主机或其他主机发送的其它数据包分片,保证分片被正确的重新组合。标志字段用于判断是否已经收到最后一个分片。最后一个分片的标志字段设置为0,其他分片的标志字段设置为1,目的端在收到标志字段为0的分片后,开始重组报文。片偏移字段表示每个分片在原始报文中的位置。第一个分片的片偏移为0,第二个分片的片偏移表示紧跟第一个分片后的第一个比特的位置。比如,如果首片报文包含1259比特,那么第二分片报文的片偏移字段值就应该为1260。

IP协议的首部“标志”中标志(flag) 占 3 位,只有后两位有意义。标志字段的最低位是 MF (More Fragment)。MF =1 表示后面“还有分片”。MF  0 表示最后一个分片。标志字段中间的一位是 DF (Don’t Fragment) 只有当 DF =0 时才允许分片。

<think> 我们正在讨论IPv4报文中的标志位。根据用户提供的引用,特别是引用[2]和引用[3],我们可以得知IPv4报文头部中有一个标志字段(Flags),占3位。这个标志字段用于控制数据报的分片和重组。 标志位包括三个部分: 1. 保留位(Reserved Bit):占1位,必须为0。 2. 不分片(Don't Fragment, DF)位:占1位。 - 当DF=1时,表示该数据报不允许被分片。如果数据报长度超过MTU,路由器会丢弃该数据报并发送ICMP差错报文。 - 当DF=0时,表示允许分片。 3. 更多分片(More Fragments, MF)位:占1位。 - 当MF=1时,表示该分片之后还有更多分片(即不是最后一个分片)。 - 当MF=0时,表示这是最后一个分片,或者该数据报没有分片(即唯一的一个分片)。 另外,标识字段(Identification)占16位,用于唯一标识一个数据报。同一个数据报的所有分片具有相同的标识值,以便接收端重组。 分片的过程: 1. 当路由器需要转发一个超过出口链路MTU的数据报时,会检查DF位: - 若DF=1,则丢弃并返回ICMP差错报文。 - 若DF=0,则进行分片。 2. 分片时,除最后一个分片外,每个分片的MF位都设置为1,最后一个分片设置为0。 3. 每个分片的标识字段都设置为原始数据报的标识符值。 4. 每个分片的总长度字段设置为该分片的长度。 5. 分片偏移字段则表示该分片在原始数据报中的相对位置(以8字节为单位)。 注意:分片偏移量(Fragment Offset)字段占13位,因此偏移量以8字节为单位,这样最大可表示8191*8=65528字节,加上头部最多可达65535字节(与总长度字段一致)。 下面我们用示意图展示分片过程: 假设原始数据报: - 总长度:4000字节(包括20字节IP头部,所以数据部分3980字节) - MTU:1500字节(每个分片最大1500字节,包括IP头部) 分片计算: - 第一个分片:携带1480字节数据(因为MTU=1500,所以数据部分=1500-20=1480),分片偏移=0,MF=1(因为后面还有分片) - 第二个分片:同样1480字节数据,分片偏移=1480/8=185,MF=1 - 第三个分片:剩余数据=3980-1480*2=1020字节,分片偏移=370(即1480*2/8=370),MF=0 注意:分片偏移量必须为整数,而且因为是以8字节为单位,所以每个分片的数据长度(除最后一个)必须是8的倍数。这里1480是8的倍数(1480÷8=185)。 因此,IPv4标志位在分片过程中起着关键作用。 下面我们用表格总结标志位: | 位位置(从左到右) | 名称 | 含义 | |--------------------|---------|--------------------------------------------------------------| | 最高位(第0位) | 保留位 | 必须为0 | | 中间位(第1位) | DF位 | 0:允许分片;1:不允许分片 | | 最低位(第2位) | MF位 | 0:最后一个分片;1:还有更多分片(或未分片时为0,但未分片只有一个分片,所以MF=0) | 注意:在实际传输中,未分片的数据报MF=0,且分片偏移=0。 此外,引用[3]中提到IPv4头部基本长度为20字节,通过选项字段可扩展至60字节。在分片时,每个分片都会包含IP头部(原始头部的拷贝,但总长度、标志和分片偏移会修改)。 现在,让我们回答用户的问题:IPv4报文中的标志位的详细介绍。 结构: 1. 介绍标志位的组成(3位) 2. 分别说明每一位的含义(保留位、DF位、MF位) 3. 结合分片过程解释DF和MF的作用 4. 举一个分片的例子(用上面4000字节的例子) 5. 表格总结 最后,生成相关问题。 </think> ### IPv4报文标志位详解 IPv4报文头部中的**标志位(Flags)** 是一个关键控制字段,位于头部的第7字节(偏移量13-15位),共占**3个比特位**。其具体构成与功能如下: #### 1. 标志位结构 ```mermaid graph LR A[标志位 3比特] --> B[位0: 保留位] A --> C[位1: DF位<br>Don't Fragment] A --> D[位2: MF位<br>More Fragments] ``` | 比特位 | 名称 | 取值 | 功能说明 | |--------|-----------------|------|--------------------------------------------------------------------------| | **0** | 保留位(Reserved) | 0 | 必须设为0,保留为未来使用 | | **1** | DF位(Don't Fragment) | 0/1 | 0=允许分片<br>1=禁止分片(若需分片则丢弃并发送ICMP错误)[^2][^3] | | **2** | MF位(More Fragments) | 0/1 | 0=最后一个分片<br>1=还有后续分片(除末片外所有分片置1)[^2][^3] | #### 2. 核心功能解析 1. **DF位(禁止分片控制)** - **DF=0**:允许路由器对数据报分片(默认值) - **DF=1**: - 若数据报长度超过MTU,路由器直接丢弃 - 返回ICMP类型3代码4错误(Fragmentation Needed) - **典型应用**:`ping -f`命令用于路径MTU发现 2. **MF位(分片状态指示)** - **MF=1**:表示当前分片不是最后一个(后还有分片) - **MF=0**:表示当前分片是原始报文的最后一个分片 - **完整未分片报文**:MF=0且分片偏移量=0 #### 3. 分片操作演示 以4000字节数据报(MTU=1500字节)为例: ```mermaid flowchart LR S[原始数据报 4000B] --> F1[分片1:1480B] S --> F2[分片2:1480B] S --> F3[分片3:1020B] F1 -->|标志位| DF0[DF=0, MF=1] F2 -->|标志位| DF0[DF=0, MF=1] F3 -->|标志位| DF0[DF=0, MF=0] ``` - **分片1**:载荷1480B,偏移量=0,**MF=1**(非末片) - **分片2**:载荷1480B,偏移量=185 (1480/8),**MF=1** - **分片3**:载荷1020B,偏移量=370 (2960/8),**MF=0**(末片) > 注:分片偏移量以**8字节**为单位计算,因此实际字节位移=偏移量值×8[^2][^3] #### 4. 与其他字段的关联 | 关联字段 | 作用 | |------------------|----------------------------------------------------------------------| | **标识符(16位)** | 同一数据报的所有分片共享相同标识符[^2] | | **分片偏移(13位)** | 指示分片在原始数据报中的位置(需配合MF位判断是否结束)[^3] | | **总长度(16位)** | 包含IP头部,每个分片独立设置该值 | #### 5. 典型应用场景 - **路径MTU发现**:设置DF=1探测路径最小MTU - **VoIP/QoS**:设置DF=1避免分片引起的延迟抖动 - **防火墙策略**:过滤MF=1的分片数据报防御分片攻击 - **数据报重组**:接收端根据标识符+MF位+分片偏移重组原始报文 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值