IP分割和重组

数据链路层不同,MTU(最大传输单元)就不同。但是IP协议是网络层的协议,它需要将数据链路层进行抽象。使得所有的数据链路对于上层的表现是一致的。

任何一台主机必要对IP分片进行相应的处理。因为,较大的报文无法一下子发送出去,需要进行分片分次发送。是否有必要进行分片是由路由器决定的,只要路由器认为有必要分片,就会进行分片。路由器只管分片,不管重组。重组是需要在目标主机上完成的。分片以8字节的倍数进行。IP首部的“片偏移”字段表示之后每个分片在用户数据中的相对位置和该分片之后是否还有其它后续分片。

分片机制并不完美,随着互联网的快速发展。分片机制带给路由器的负担越来越重。并且分片带来了如果丢失其中一个分片,那么整个报文就会作废。但是如果让上层协议封装的数据流变得更小,会导致网路利用率下降。为了解决上述问题,路径MTU发现。

路径MTU发现是指从发送端主机到接收端主机所经过的所有数据链路中最小的MTU。按照路径MTU分片以后,就无需再中途的路由器上进行分片处理了。路径MTU的实现依赖于路由器所搭载的操作系统。

在上层协议是UDP协议的情形下,首先在发送端主机发送IP包的时候设置分片禁止标志。途中的路由器即使遇到了包的大小超过了数据链路的MTU,也不去分片,直接将包丢弃。随后,通过ICMP的不可达消息返回一个MTU的值给发送主机。下一次,根据这个ICMP所通知的MTU去进行分片处理,接着发送出去,如果分片仍旧在传输过程中大于某一数据链路的MTU,仍将分片丢弃,ICMP继续返回一个当前MTU,如此一直进行下去,直到找到一个合适的MTU。

在上层协议是TCP协议的情形下。由于TCP协议是面向有连接的(两台主机之间要维护这个连接)。TCP协议会根据路径MTU的大小来计算出最大段长度MSS。一旦TCP连接采用了路径MTU发现,那么在IP层就不会在进行分片处理。因为,MSS最大就是路径MTU。

转载于:https://www.cnblogs.com/zy666/p/10504244.html

### IP 分片与重组的过程 IP 分片重组是网络通信中的重要组成部分,用于处理超过链路最大传输单元 (MTU) 的数据包。以下是关于这一过程的具体工作原理: #### 1. **分片的必要性触发条件** 当一个较大的 IP 数据包需要通过 MTU 较小的链路时,路由器会对其进行分片操作。这种行为由 IP 协议头中的字段控制,特别是“标志位”(Flags) “分片偏移量”(Fragment Offset)[^1]。 - **标志位**: 包含三个比特,其中最重要的一个是“更多片段”(More Fragments),表示当前分片后面还有其他后续分片。 - **分片偏移量**: 表明当前分片相对于原始数据包起始位置的偏移量,单位为 8 字节[^1]。 #### 2. **分片算法** 为了正确分割数据包并保持其可组装性,分片遵循严格的规则: - 原始数据包被划分为多个较小的部分,每部分都具有独立的 IP 头部信息。 - 每个分片保留原数据包的目标地址、源地址以及协议号等关键字段。 - 使用唯一的标识符 (Identifier) 来标记属于同一原始数据包的所有分片,以便接收端能够识别它们之间的关联关系[^4]。 #### 3. **重组逻辑** 在目标主机上完成分片的重新组合是一个复杂但有序的过程: - 接收方依据接收到的各个分片中的标识符匹配来自相同原始数据包的不同碎片。 - 利用分片偏移量确定各分片应放置的位置顺序,并最终拼接成完整的数据流。 - 如果某个预期中的分片未能按时到达(通常定义了一个固定时间窗口),则整个重组尝试可能失败,并向发送者返回 ICMP 错误消息通知超时情况[^3]。 #### 4. **软件实现案例——DPDK 中的 IP 重组** 以 DPDK 库为例,在高性能环境中实现了高效的 IP 分片管理功能。每当调用 `rte_ipv4_frag_reassemble_packet` 或类似的函数来进行实际的数据包重组时,都会涉及如下机制: - 提供专门的数据结构 (`death_row`) 存储那些因各种原因无法成功参与重组流程而需清理掉的老化或异常条目[^5]。 ```c struct rte_mbuf *reassembled_pkt; struct rte_ipfrag_death_row death_row; // 调用API执行具体的操作... if (!rte_ipv4_frag_reassemble_packet(&table, mbuf, &reassembled_pkt, &death_row)) { // 成功重组后的进一步处理... } ``` 以上展示了如何利用现代框架支持下的技术手段优化传统 IP 层面上的功能表现。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值