关于udp传输分片问题-MTU

关于udp传输分片问题-MTU

编者:李国帅

qq:9611153 微信lgs9611153

时间:2008/6/1

背景原因:

相关问题在2008年遇到,简要提供如下建议。

对于大批量,高频度的网络收发,总会遇到这样的问题。

 

概念:

MTU,即Maximum Transmission Unit(最大传输单元),此值设定TCP/IP协议传输数据报时的最大传输单元。

设置多大的MTU值取决于你的上网方式,不同的上网方式支持不同的MTU,下面列出了一些上网方式的MTU值:

EtherNet(一般上网方式,默认值):1500

PPPoE/ADSL:1492

Dial Up/Modem:576

链路层MTU:

链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。

 

链路层一般只能发1514,就是MTU的大小,多余的就就要分片,理论是64K,但是实际中,首先网卡要支持64K的,但是现在的千兆一般也才支持8k巨帧,然后交换机也要支持巨帧,普通交换机也不支持,支持的一般也是8K,所以,实际使用中UDP在局域网一般是1514(含42字节头),而如果要通过路由器,路由器所支持的UDP一般是536,这样又只能用536的了

 

具体分析如下:

一个IPv4包需要14字节mac头,20字节IP头,很可能需要8字节ppp封装(ADSL上网)。

一个以太网封包大小限制1514,所以一个ipv4包的数据大概有1472或者1480

IP层分片

我们假设数据的净荷(payload)部分预留是1472字节。如果数据部分大于1472字节,就会出现分片现象。

 

另外IP层对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。

 

IP首部包含了分片和重组所需的信息:

 

Identification:发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。

R:保留未用。

DF:Don't Fragment,“不分片”位,如果将这一比特置1 ,IP层将不对数据报进行分片。

MF:More Fragment,“更多的片”,除了最后一片外,其他每个组成数据报的片都要把该比特置1。

Fragment Offset:该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。

 

当数据报被分片后,每个片的总长度值要改为该片的长度值。

而每一个分片的有效载荷需要减去分片信息(32字节),所以

如果要发送的IP数据包是4096字节(包含tcp/udp头),

发送的IP数据20(IP头)+4090,将会被分三次发送:

         32(IP分包头部)+(1472-32),

         32(IP分包头部)+(1472-32),

         32(IP分包头部)+(1230+填充数据)。

每次发送的IP数据都为发送3次,每次1500字节。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值