wireshark中“tcp segment of a reassembled pdu”的解釋

“TCP segment of a reassembled PDU”指TCP層收到上層大塊報文後分解成段後發出去。於是有個疑問,TCP層完全可以把大段報文丟給IP層,讓IP層完成分段,爲什麼要在TCP層分呢? 其實這個是由TCP的MSS(Maximum Segment Size,最大報文段長度)決定的,TCP在發起連接的第一個報文的TCP頭裏通過MSS這個可選項告知對方本端能夠接收的最大報文(當然,這個大小是TCP淨荷的大小),以太網上這個值一般設置成1460,因爲1460Byte淨荷+20Byte TCP頭+20Byte IP頭 = 1500字節,正好符合鏈路層最大報文的要求。

至於收到一個報文後如何確定它是一個"TCP segment"?如果有幾個報文的ACK序號都一樣,並且這些報文的Sequence Number都不一樣,並且後一個Sequence Number爲前一個Sequence Number加上前一個報文大小再加上1的話,肯定是TCP segment了,對於沒有ACK標誌時,則無法判斷。

 

Ethernet Header以下的IP數據報最大傳輸單位爲MTU(Maximum Transmission Unit,Effect of short board),對於大多數使用以太網的局域網來說,MTU=1500。

TCP數據包每次能夠傳輸的最大數據分段爲MSS,爲了達到最佳的傳輸效能,在建立TCP連接時雙方協商MSS值,雙方提供的MSS值的最小值爲這次連接的最大MSS值。MSS往往基於MTU計算出來,通常MSS=MTU-sizeof(IP Header)-sizeof(TCP Header)=1500-20-20=1460。

這樣,數據經過本地TCP層分段後,交給本地IP層,在本地IP層就不需要分片了。但是在下一跳路由(Next Hop)的鄰居路由器上可能發生IP分片!因爲路由器的網卡的MTU可能小於需要轉發的IP數據報的大小。這時候,在路由器上可能發生兩種情況:

1).如果源發送端設置了這個IP數據包可以分片(May Fragment,DF=0),路由器將IP數據報分片後轉發。

2).如果源發送端設置了這個IP數據報不可以分片(Don’t Fragment,DF=1),路由器將IP數據報丟棄,併發送ICMP分片錯誤消息給源發送端。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章