MTU: Maxitum Transmission Unit 最大传输单元
MSS: Maxitum Segment Size 最大分段大小
以太网(Ethernet)数据帧的长度必须在 64Bytes-1518Bytes 字节之间,这是由于以太网传输电气方面限制的,EthernetII 协议报头结构如下:
| 目的地址(DMAC) | 源地址(SMAC) | 类型(TYPE) | 数据(DATA) | 校验(CRC) |
6Bytes 6Bytes 4Bytes 46-1500Bytes 2Bytes
由于以太网最大的数据帧是 1518Bytes,刨去以太网帧的帧头(目标MAC地址,源MAC地址和类型)14Bytes 以及帧尾 CRC(大家有时候叫它: FCS) 校验部分4Bytes 那么剩下承载上层协议的地方也就是 Data 域最大就只能有1500Bytes 这个值我们就把它称之为 MTU。
- UDP 包的大小(MSS)是 1500 - IP头(20) - UDP头(8) = 1472(BYTES)
- TCP 包的大小(MSS)是 1500 - IP头(20) - TCP头(20) = 1460 (BYTES)
注:PPPoE导致MTU变小了,以太网的 MTU 是 1500,再减去PPP的包头包尾的开销(8Bytes),MTU 就变成1492。
MTU 对我们的 UDP 编程很重要,那如何查看路由的MTU值呢?
# windows OS: ping -f -l
$ ping -f -l 1472 www.bing.com
#如果提示:需要拆分数据包但是设置 DF。
#则表明 MTU 小于1500,不断改小data_length值,可以最终测算出gateway的MTU值。
#linux OS: ping -c -M do -s
$ ping -c 1 -M do -s 1472 www.bing.com
#如果提示 Frag nee

本文介绍了网络通信中MTU(最大传输单元)和MSS(最大分段大小)的概念。以太网的MTU通常为1500字节,扣除IP和UDP/TCP头部,UDP的MSS为1472字节,TCP的MSS为1460字节。当数据超过MTU时,IP层会分片,可能导致UDP数据包丢失,而TCP会重传。建议UDP编程时数据长度控制在1472字节以下,Internet环境建议控制在548字节以内。
最低0.47元/天 解锁文章
2279

被折叠的 条评论
为什么被折叠?



