TCP中報文段大小(MSS) MTU

2021-08-01 11:59:26 字數 1970 閱讀 7562

」因為當初相關網路的知識剛剛複習,比較生疏。我當時還以為他是想考我tcp報文段中「視窗」欄位的意思呢,我當時想了一下,回答了「第三次」。面試官聽到我的答案後沒有什麼表情,現在想想自己當初的回答是多麼的low比。面試官給了我很大的面子沒有嘲笑我。以後要好好複習。今天在這裡總結下tcp最大報文段的相關知識點。

我們知道tcp傳輸可靠性的保證中有一點是:tcp會將應用層交付下來的資料分為tcp認為最適合傳送的資料塊。這裡的資料塊大小就是mss(maximum segment size最大分段長度)。mss欄位位於tcp首部中的選項字段。

一句話,mss就是tcp報文段所允許傳送的最大資料部分的長度,如果上層交付下來的資料太大,就對其進行資料分塊。這個分塊過程是在運輸層完成的,在接收端的運輸層對分塊的tcp報文段的資料部分進行重組。

注意:這個mss指的是tcp報文段中資料部分的最大長度,並不是整個tcp報文段長度。整個tcp報文段長度 = tcp首部長度 + tcp資料部分長度。

mss的值是在tcp三次握手建立連線的過程中,經通訊雙方協商確定的。我們都知道鏈路層使用乙太網的話,ip層的mtu是1500 byte,這樣去掉ip資料報首部(20 byte),在去掉tcp首部(20 byte)後為1460 byte,此時在預設情況下tcp「選項」欄位的mss值為1460 byte = 1500 - 20 - 20。在 internet 標準中,ip層的mtu是576 byte,那麼此時tcp「選項」欄位的mss值為536 byte = 576 - 20 - 20。

以上是預設情況下乙個tcp報文段中的mss值,下面我們詳細說明mss值的確定過程。

(1)首先客戶端會傳送乙個syn請求報文,這個syn報文的「選項」欄位中會有mss值(mss = mut - ip首部長度 - tcp首部長度)。該mss值是為了告知對方最大的傳送資料大小。

(2)當伺服器端收到syn報文後,會向請求端返回syn+ack(同步確認報文)報文,其中的「選項」欄位也會有mss值。

(3)通訊雙方選擇syn和syn+ack報文中最小的mss最為此次tcp連線的mss,從而達到通訊雙發協商mss的效果。

綜上,可以回答開始時的問題。在第二次握手後就可以確定tcp中最大傳輸報文(mss)大小。

mtu是最大傳輸單元,這個根據由具體的網路決定的,如乙太網mtu=1500,internet的mtu=576。

如果ip層所要傳輸的資料長度》mtu的話,要對這個資料進行分片處理,每個片長度都小於mtu,每個片構成乙個ip資料報進行傳輸。

在服務端的ip層使用ip資料報的首部資訊對這些分片的ip資料報進行重組。這樣使得ip層的分片對傳輸層看起來是透明的(傳輸層不知道ip層進行了分片操作)。

(1)如果ip層每個分片都正確到達目的端,那自然是很好的。但是如果ip層在傳送端對要傳送的資料(tcp報文段)進行分片操作,但是在傳輸過程中某個分片發生了錯誤,這樣會使整個tcp報文段重傳。因為ip層不負責可靠性(超時和重傳),可靠性有傳輸層提供。

這也是tcp對資料分段的乙個原因,分段後的資料在往下交付後肯定不會超過mtu,這樣避免了因為分片而帶來的的麻煩。

(2)如果udp進行資料傳輸的話,udp將應用層交付下來的整個資料封裝為udp資料報(沒有像tcp分塊的操作)。這樣ip層的資料很容易超過mtu,造成資料分片。而tcp的資料分塊,不會導致ip層的分片。

總的來說udp不會分段,就由ip來分片。tcp分段,也就不用ip來分片了!

總結:

1、ip分片是由於傳輸的資料超過了mtu,tcp分塊是由於資料超過了mss。

2、ip分片是在傳送端的網路層中進行的,ip重組是在接收端的網路層中,根據ip首部完成的。tcp資料分塊是在傳送端的傳輸層進行的,tcp重組是在接收端的傳輸層完成的。ip層的分片與重組對傳輸層是透明的。

一般情況下,使用udp、icmp傳送資料時,在網路層要進行分片。而使用tcp傳輸的話,tcp的mss分塊避免了分片。

TCP協議中報文段詳解

一 tcp協議報文段格式詳解 1 源埠和目標埠號字段 各佔2位元組,埠是傳輸層與應用層的服務連線口,傳輸層的分用和復用功能都要通過埠來實現 埠對應程序 2 序號字段 佔4位元組,tcp連線中傳送的每乙個報文段都有乙個序號 該報文段多包含位元組數中第乙個位元組編號 3 確認號 佔4位元組,tcp協議在...

TCP首部報文段格式

最近 計算機網路 這本書看到了傳輸層的 tcp 協議,因為tcp 的全部功能都體現在它的首部中,因此覺得有必要將這些知識梳理一下。首先tcp 是面向位元組流的。這個流指的是流入到程序或從程序流出的位元組序列。面向位元組流的含義是 應用程式與 tcp 的互動是一次乙個資料塊 大小不等 但是 tcp 把...

tcp報文傳送工具 tcp報文段首部結構分析

tcp雖然是面向位元組流的,但tcp傳送的資料單元卻是報文段。tcp報文段如apr報文 ip資料報一樣,也是由首部與資料區域組成,tcp首部內容很豐富,各個欄位都有特定的含義,一般來說tcp首部只有20個位元組,tcp報文段首部的前20個位元組是固定的,後面有4n位元組是根據需要而增加的選項字段 n...