日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

TCP報文結(jié)構(gòu)

 SheldonDemo 2017-04-12

img

源端口、目標(biāo)端口:計算機(jī)上的進(jìn)程要和其他進(jìn)程通信是要通過計算機(jī)端口的,而一個計算機(jī)端口某個時刻只能被一個進(jìn)程占用,所以通過指定源端口和目標(biāo)端口,就可以知道是哪兩個進(jìn)程需要通信。源端口、目標(biāo)端口是用16位表示的,可推算計算機(jī)的端口個數(shù)為2^16個。

序列號:表示本報文段所發(fā)送數(shù)據(jù)的第一個字節(jié)的編號。在TCP連接中所傳送的字節(jié)流的每一個字節(jié)都會按順序編號。由于序列號由32位表示,所以每2^32個字節(jié),就會出現(xiàn)序列號回繞,再次從 0 開始。那如何區(qū)分兩個相同序列號的不同TCP報文段就是一個問題了,后面會有答案,暫時可以不管。

確認(rèn)號:表示接收方期望收到發(fā)送方下一個報文段的第一個字節(jié)數(shù)據(jù)的編號。也就是告訴發(fā)送發(fā):我希望你(指發(fā)送方)下次發(fā)送的數(shù)據(jù)的第一個字節(jié)數(shù)據(jù)的編號是這個確認(rèn)號。也就是告訴發(fā)送方:我希望你(指發(fā)送方)下次發(fā)送給我的TCP報文段的序列號字段的值是這個確認(rèn)號。

TCP首部長度:由于TCP首部包含一個長度可變的選項部分,所以需要這么一個值來指定這個TCP報文段到底有多長?;蛘呖梢赃@么理解:就是表示TCP報文段中數(shù)據(jù)部分在整個TCP報文段中的位置。該字段的單位是32位字,即:4個字節(jié)。

URG:表示本報文段中發(fā)送的數(shù)據(jù)是否包含緊急數(shù)據(jù)。URG=1,表示有緊急數(shù)據(jù)。后面的緊急指針字段只有當(dāng)URG=1時才有效。

ACK:表示是否前面的確認(rèn)號字段是否有效。ACK=1,表示有效。只有當(dāng)ACK=1時,前面的確認(rèn)號字段才有效。TCP規(guī)定,連接建立后,ACK必須為1。

PSH:告訴對方收到該報文段后是否應(yīng)該立即把數(shù)據(jù)推送給上層。如果為1,則表示對方應(yīng)當(dāng)立即把數(shù)據(jù)提交給上層,而不是緩存起來。

RST:只有當(dāng)RST=1時才有用。如果你收到一個RST=1的報文,說明你與主機(jī)的連接出現(xiàn)了嚴(yán)重錯誤(如主機(jī)崩潰),必須釋放連接,然后再重新建立連接?;蛘哒f明你上次發(fā)送給主機(jī)的數(shù)據(jù)有問題,主機(jī)拒絕響應(yīng)。

SYN:在建立連接時使用,用來同步序號。當(dāng)SYN=1,ACK=0時,表示這是一個請求建立連接的報文段;當(dāng)SYN=1,ACK=1時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置為1。

FIN:標(biāo)記數(shù)據(jù)是否發(fā)送完畢。如果FIN=1,就相當(dāng)于告訴對方:“我的數(shù)據(jù)已經(jīng)發(fā)送完畢,你可以釋放連接了”

窗口大小:表示現(xiàn)在運行對方發(fā)送的數(shù)據(jù)量。也就是告訴對方,從本報文段的確認(rèn)號開始允許對方發(fā)送的數(shù)據(jù)量。

校驗和:提供額外的可靠性。具體如何校驗,參考其他資料。

緊急指針:標(biāo)記緊急數(shù)據(jù)在數(shù)據(jù)字段中的位置。

選項部分:其最大長度可根據(jù)TCP首部長度進(jìn)行推算。TCP首部長度用4位表示,那么選項部分最長為:(2^4-1)*4-20=40字節(jié)。

選項部分的應(yīng)用

  1. MSS最大報文段長度(Maxium Segment Size):指明數(shù)據(jù)字段的最大長度,數(shù)據(jù)字段的長度加上TCP首部的長度才等于整個TCP報文段的長度。MSS值指示自己期望對方發(fā)送TCP報文段時那個數(shù)據(jù)字段的長度。通信雙方可以有不同的MSS值。如果未填寫,默認(rèn)采用536字節(jié)。MSS只出現(xiàn)在SYN報文中。即:MSS出現(xiàn)在SYN=1的報文段中。
  2. 窗口擴(kuò)大選項(Windows Scaling):由于TCP首部的窗口大小字段長度是16位,所以其表示的最大數(shù)是65535。但是隨著時延和帶寬比較大的通信產(chǎn)生(如衛(wèi)星通信),需要更大的窗口來滿足性能和吞吐率,所以產(chǎn)生了這個窗口擴(kuò)大選項。
  3. SACK選擇確認(rèn)項(Selective Acknowledgements):用來確保只重傳缺少的報文段,而不是重傳所有報文段。比如主機(jī)A發(fā)送報文段1、2、3,而主機(jī)B僅收到報文段1、3。那么此時就需要使用SACK選項來告訴發(fā)送方只發(fā)送丟失的數(shù)據(jù)。那么又如何指明丟失了哪些報文段呢?使用SACK需要兩個功能字節(jié)。一個表示要使用SACK選項,另一個指明這個選項占用多少字節(jié)。描述丟失的報文段2,是通過描述它的左右邊界報文段1、3來完成的。而這個1、3實際上是表示序列號,所以描述一個丟失的報文段需要64位即8個字節(jié)的空間。那么可以推算整個選項字段最多描述(40-2)/8=4個丟失的報文段。
  4. 時間戳選項(Timestamps):可以用來計算RTT(往返時間),發(fā)送方發(fā)送TCP報文時,把當(dāng)前的時間值放入時間戳字段,接收方收到后發(fā)送確認(rèn)報文時,把這個時間戳字段的值復(fù)制到確認(rèn)報文中,當(dāng)發(fā)送方收到確認(rèn)報文后即可計算出RTT。也可以用來防止回繞序號PAWS,也可以說可以用來區(qū)分相同序列號的不同報文。因為序列號用32為表示,每2^32個序列號就會產(chǎn)生回繞,那么使用時間戳字段就很容易區(qū)分相同序列號的不同報文。
  5. NOP(NO-Operation):它要求選項部分中的每種選項長度必須是4字節(jié)的倍數(shù),不足的則用NOP填充。同時也可以用來分割不同的選項字段。如窗口擴(kuò)大選項和SACK之間用NOP隔開。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多