TCP/IP协议,涉及到四层:链路层、网络层、传输层、应用层。
其中以太网的数据帧在链路层
IP包在网络层
TCP或UDP包在传输层
TCP或UDP中的数据(Data)在应用层
它们的关系是数据帧{IP包{TCP或者UDP包{Data}}}
————————————————————————————————
在应用程序中我们用到的Data的长度最大是多少,直接取决于底层限制。
我们从下到上分析一下:
1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)—(1500 + 18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;
2.在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20 = 1480;
3.在传输层,对于UDP包的首部要占8字节,所以这的MTU为1480 - 8 = 1472;
所以,在应用层,您的Data最大长度为1472字节。(当我们UDP包中的数据多于1472时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃。)
从上面的分析来看,普通的局域网环境下,UDP的数据最大是1472字节最好,避免分片重组。
但是在网络编程中,Internet中的路由器可能设置成不同的值(小于默认值)