TCP和UDP数据包的最大长度分别是多少?
以常见的以太网环境为例,标准MTU通常设为1500字节。要计算TCP的最大数据载荷,需要从MTU中减去IP头部和TCP头部的大小。IP头部通常为20字节,TCP头部最小也为20字节。因此,TCP的最大报文段长度MSS通常是1460字节。这意味着在不携带任何TCP选项的情况下,TCP每个报文段能携带的有效数据最多为1460字节。
以常见的以太网环境为例,标准MTU通常设为1500字节。要计算TCP的最大数据载荷,需要从MTU中减去IP头部和TCP头部的大小。IP头部通常为20字节,TCP头部最小也为20字节。因此,TCP的最大报文段长度MSS通常是1460字节。这意味着在不携带任何TCP选项的情况下,TCP每个报文段能携带的有效数据最多为1460字节。
IP和TCP头确实通常各20字节,但要注意这仅是最小值。实际网络中IPv6或者携带了TLS等选项时,头部长度会显著增加,导致MSS变小。另外,现代网卡普遍支持Jumbo Frame(巨型帧),MTU可达9000,这时候MSS也会相应变大,所以1460并不是绝对的上限,得看具体配置。
讲得挺清楚,不过别忘了IP头部和TCP头部都是有选项字段的,实际协商MSS时可能会因为MTU或头部选项变得更小。另外,虽然以太网MTU是1500,但Jumbo Frame下MTU能到9000,这时候TCP单包能塞进的数据就多多了。UDP同理,没有MSS限制,但受限于底层MTU和IPv4/IPv6头部大小,单包最大也就是差不多1472字节左右,超过就得 fragmentation 了。