IP 数据包分包组包

为什么要分包

由于数据链路层MTU的限制,对于较⼤的IP数据包要进⾏分包.

什么是MTU

MTU相当于发快递时对包裹尺⼨的限制.这个限制是不同的数据链路对应的物理层,产⽣的限制.

• 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填 充位;

• 最⼤值1500称为以太⽹的最⼤传输单元(MTU),不同的⽹络类型有不同的MTU;

• 如果⼀个数据包从以太⽹路由到拨号链路上,数据包⻓度⼤于拨号链路的MTU了,则需要对数据包进 ⾏分⽚(fragmentation);

• 不同的数据链路层标准的MTU是不同的;

MTU对IP协议的影响

• 将较⼤的IP包分成多个⼩包,并给每个⼩包打上标签;

• 每个⼩包IP协议头的16位标识(id)都是相同的;

• 每个⼩包的IP协议头的3位标志字段中,第2位置为0,表⽰允许分⽚,第3位来表⽰结束标记(当前是否 是最后⼀个⼩包,是的话置为1,否则置为0);

• 到达对端时再将这些⼩包,会按顺序重组,拼装到⼀起返回给传输层;

• ⼀旦这些⼩包中任意⼀个⼩包丢失,接收端的重组就会失败.但是IP层不会负责重新传输数据;

分包组包过程中和哪些 IP 报头字段有关联

• 16位标识(id):唯⼀的标识主机发送的报⽂.如果IP报⽂在数据链路层被分⽚了,那么每⼀个⽚⾥⾯的 这个id都是相同的.

• 3位标志字段:第⼀位保留(保留的意思是现在不⽤,但是还没想好说不定以后要⽤到).第⼆位置为1表 ⽰禁⽌分⽚,这时候如果报⽂⻓度超过MTU,IP模块就会丢弃报⽂.第三位表⽰"更多分⽚",如果分⽚ 了的话,最后⼀个分⽚置为1,其他是0.类似于⼀个结束标记.

• 13位分⽚偏移(framegament offset):是分⽚相对于原始IP报⽂开始处的偏移.其实就是在表⽰当前 分⽚在原报⽂中处在哪个位置.实际偏移的字节数是这个值*8得到的.因此,除了最后⼀个报⽂之 外,其他报⽂的⻓度必须是8的整数倍(否则报⽂就不连续了).

组包时如何保证数据的顺序和完整性?

一、保证数据顺序

1. 利用标识字段

  • IP 报头中的标识字段对于来自同一原始数据包的所有分片都是相同的。在组包时,可以依据这个标识来确定哪些分片属于同一个数据包,从而为正确排序提供基础。

  • 例如,当接收到多个分片时,首先根据标识字段将它们分类到不同的原始数据包集合中。

2. 依赖片偏移字段

  • 片偏移字段指出了每个分片在原始数据包中的相对位置。组包时,可以按照片偏移的值从小到大的顺序对分片进行排列。

  • 比如,从片偏移为 0 的分片开始,依次处理后续具有连续片偏移值的分片,确保数据包的各个部分按照正确的顺序组合起来。

二、保证数据完整性

1. 检查标识和标志字段

  • 确认所有属于同一数据包的分片具有相同的标识。如果发现标识不一致的分片,可能意味着存在错误或数据丢失。

  • 同时,检查标志字段中的"更多分片"标志位。当接收到一个分片且该标志位为 0 时,表示这是该数据包的最后一个分片。如果在组包过程中一直未收到标志位为 0 的分片,可能存在数据丢失的情况。

2. 计算和验证校验和

  • IP 报头中包含校验和字段。在组包时,可以重新计算整个数据包(包括重组后的 IP 报头和数据部分)的校验和,并与接收到的分片的校验和进行比较。如果校验和不一致,说明数据可能在传输过程中被损坏,需要采取相应的纠错措施,如请求重新发送丢失或损坏的分片。

3. 超时机制和重传请求

  • 设置合理的超时时间,当在一定时间内没有收到所有属于一个数据包的分片时,认为数据包可能丢失,向发送方发送重传请求。

  • 例如,在接收端维护一个定时器,对于每个正在组包的数据包,如果在超时时间内没有完成组包,则触发重传机制,请求发送方重新发送该数据包的所有分片。

相关推荐
涔溪37 分钟前
HTTP TCP三次握手深入解析
网络·tcp/ip·http
憨子周37 分钟前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
三菱-Liu2 小时前
三菱MR-J4-B伺服连接器和信号排列
网络·驱动开发·硬件工程·制造·mr
WeeJot嵌入式2 小时前
网络安全:挑战、策略与未来趋势
网络
Ztiddler4 小时前
【Linux Shell命令-不定期更新】
linux·运维·服务器·ssh
小小不董5 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
IPdodo全球网络5 小时前
如何利用静态住宅IP优化Facebook商城的网络稳定性与运营效率
运维·服务器
a1denzzz5 小时前
Linux系统的网络设置
linux·服务器·网络
黑客K-ing6 小时前
网络安全名词解释
开发语言·网络·安全·网络安全·php
zyp2468106 小时前
Linux之DNS服务器
linux·运维·服务器