天天看點

Java. tcp封包長度_tcp,udp封包最大長度

tcp,udp封包最大長度是怎麼樣的呢?

先來看看各個封包格式:

ip封包

Java. tcp封包長度_tcp,udp封包最大長度

tcp封包

Java. tcp封包長度_tcp,udp封包最大長度

udp封包

Java. tcp封包長度_tcp,udp封包最大長度

ip和udp都有16位的長度字段,是以ip和udp封包的最大負載長度應該為2^16,64KB

網絡層限制:

MTU(Maximum Transmission Unit,最大傳輸單元),這限制了ip封包長度,ip封包長度大于mtu,就需要分片。通常設為1500位元組。

在網絡層,ip提供不可靠傳輸服務,一旦收到的資料報分片丢失部分或部分出現差錯,就會全部丢棄,而不會選擇重傳。

傳輸層限制:

tcp協定中有個MSS,tcp通常将資料分成長度為MSS的若幹塊。

總結:

ip封包由于其長度字段限制,最大負載長度為64KB,而由mtu限制,封包會分片為長度為mtu的若幹段。

udp因沒有序号等字段,是以無法分片,最大負載長度64KB,受制ip封包限制,資料最大負載為64KB-20(ip)-8(udp)

tcp:目前來看,tcp的最大負載限制應該是其分片序号,2^32*mss,如果按MSS=1460來算,接近6TB,但這絕不可能,畢竟還有重傳等操作,不過我覺得可以認為tcp的最大負載很大。(—_—)