问题
使用 UDP 协议在局域网中一次传输最多能传多少数据?
分析
****以太网数据帧的最大长度为1500字节,即 IP 数据报文的长度,即数据链路层的MTU(最大传输单元)****
- 数据链路层 是什么东西? TCP/IP 协议分层,从下到上:数据链路层、网络层、运输层、应用层。见下图
TCP/IP 协议分层 | 职责简记 | 如何提供服务 |
---|---|---|
数据链路层 | 物理传输,从驱动到网卡再到物理设备 | 发送和接收纯数据,不关心数据中的任何内容 |
网络层 | 网络拓扑结构,IP 定位网络节点 | 关心数据中的 IP,通过 IP 寻找到网络上的节点 |
传输层 | 点到点传输,TCP可靠传输,UDP基本传输 | 屏蔽网络层细节,提供上层简化的接口 |
应用层 | 特定应用,实现各种行为 | 特化协议的应用领域,更加抽象,给具体应用使用。 |
IP 数据报 是什么东西? 是网络层传递给数据链路层的数据报文,也可以说是 IP 协议(网络层协议)的报文。
以太网 是什么东西? 就是局域网的数据链路层,受物理特性限制一次只能传递上层传递来的1500字节。
下图为 IP 数据报的详细格式:
可以看到,报头区占据 32 * 5 = 160 bits(不算可选部分),也就是 20 字节,那么留给上层协议的字节数就剩下 1500 - 20 = 1480 字节了。
也就是说,UDP 协议作为 IP 协议的上层,一次传输只剩下 1480 个字节了。UDP 报文的结构如下图所示:
可以看到,UDP 协议的报头占了 8 个字节。所以,UDP 留给上层的一次传输大小,只剩下了 1480 - 8 = 1472 个字节了。
结论
1500(以太网单次最大) - 20(IP协议占用) - 8(UDP协议占用) = 1472(留给应用的单次传输大小)
在局域网中使用 UDP 协议,最好限制单词传输数据在 1472 字节以内。
如果超了会发生什么?
在发送端,IP 协议会将数据分割成多个 IP 报文来发送;在接收端要进行数据报的重组。这样不但有分片和重组的计算开销,而且丢失一个 IP 数据报会导致整个 UDP 数据报传输失败,增加失败的概率。