TCP_Header

TCP_Header

TCP+bit%E5%89%AF%E6%9C%AC.png


源端口號(Source Port):16位,標識主機上發起傳送的應用程序;


目的端口(Destonation Port):16位,標識主機上傳送要到達的應用程序。


源端,目的端的端口號,用於尋找發端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接。一個IP地址和一個端口號有時也稱爲一個插口(Socket),插口對(Socket Pair)(包含客戶IP地址、客戶端口號、服務器 IP地址和服務器端口號的四元組)可唯一確定互聯網絡中每個TCP連接的雙方。IP+TCP端口唯一確定一個TCP連接。


TCP協議通過使用"端口"來標識源端和目標端的應用進程。端口號可以使用0到65535之間的任何數字。在收到服務請求時,操作系統動態地爲客戶端的應用程序分配端口號。在服務器端,每種服務在"衆所周知的端口"(Well-Know Port)爲用戶提供服務。


序列碼(Sequence Number):32位,當SYN出現,序列碼實際上是初始序列碼(ISN),而第一個數據字節是ISN+1。用來標識從TCP源端向TCP目標端發送的數據字節流,它表示在這個報文段中的第一個數據字節。


確認碼(Acknowledgment Numbwe):32位,如果設置了ACK控制位,這個值表示一個準備接收的包的序列碼,只有ACK標誌爲1時,確認號字段纔有效。它包含目標端所期望收到源端的下一個數據字節。


數據偏移量(Data Offset):4位,也就是頭部長度,指出TCP負載(數據)的開始位置。以4字節爲單位,如"0101"表示20字節位置的數據爲負載開始,也就是頭部長度爲20字節。


保留(Reserved):6位,這些位必須是0;


控制標記(Contral Flag):6位,


URG(Urgent data):緊急指針(urgent pointer)有效。如果URG爲1,表示這是一個攜有緊急資料的封包。


ACK(Acknowledgment field significant):確認序號有效。如果ACK爲1,表示此封包屬於一個要回應的封包。一般都會爲1。


PSH(Push function):接收方應該儘快將這個報文段交給應用層。如果PSH爲1,此封包所攜帶的數據會直接上傳給上層應用程序而無需經過TCP處理。


RST(Reset):重建連接。如果RST爲1,要求重傳。表示要求重新設定封包再重新傳遞。


SYN(Synchronize sequence number):發起一個連接。如果SYN爲1,表示要求雙方進行同步溝通。


FIN(Finish-No more data for sender):釋放一個連接。如果FIN爲1,表示傳送結束,然後雙方發出結束迴應進而正式終止一個TCP傳送過程。


窗口(Window):16位,接收窗口大小。此字段用來進行流量控制,單位爲字節數,這個值是本機期望一次接收的字節數。這裏一般稱爲“滑動視窗(Sliding Window)”。


正如您剛纔看到的TCP封包會通過SQN和ACK序號來確保傳送的正確性,但如果每一個封包都要等上一個封包的迴應才被髮送出去的話實在是太慢和難以接受的。這樣我們可以利用Sliding Window在傳送兩端劃分出一個範圍,規定出可以一次性發送的最大封包數目。

當TCP傳送建立起來之後兩端都會將window的設定值還原到初始值比方說每次傳送3個封包。然後發送端就一次發送三個封包出去,然後視窗則會往後移動三個封包填補發送出去之封包的空缺。如果接收端夠順利也能一次處理接收下來的三個封包的話,就會告訴發送端的window值爲3,但如果接收端太忙或是其它因素影響暫時只能處理兩個封包,那麼在視窗裏面就剩下一個封包,然後就會告訴發送端window值爲2。這個時候發送端就只送出兩個封包而視窗就會往後移動兩個封包填補發送出去的空缺。


校驗位(Checksum):16位,對整個TCP報文段,即TCP頭部和TCP數據進行校驗和計算,並由目標端進行驗證。


當資料要傳送出去的時候發送端會計算好封包資料大小然後得出這個檢驗值封包一起發送當接收端收到封包之後會再對資料大小進行計算看看是否和檢驗值一致如果結果不相稱則被視爲殘缺封包會要求對方重發該個封包。


緊急指針(Urgent Pointer):16位,它是一個偏移量。指向後面是優先數據的字節,緊急指針指出在本報文段中的緊急數據的最後一個字節的序號,和序號字段中的值相加表示緊急數據最後一個字節的序號。


還記得剛纔講到Control Flag的時候我們提到一個URG的標記嗎如果URG被設定爲1的時候,這裏就會指示出緊急資料所在位置。不過這種情形非常少見,例如:當資料流量超出頻寬的時候系統要求網路主機暫緩發送資料所有主機收到這樣的信息都需要優先處理。

選項(Options):長度不定;但長度必須以字節記;選項的具體內容我們結合具體命令來看。


這個選項也比較少用。當那些需要使用同步動作的程式如Telnet要處理好終端的交互模式就會使用到option來指定資料封包的大小因爲telnet使用的資料封包都很少但又需要即時迴應。


填充(Padding):不定長,填充的內容必須爲0,它是爲了保證包頭的結合和數據的開始處偏移量能夠被32整除。


可能包括"窗口擴大因子"、"時間戳"等選項。


三次握手:

b29a07a54bbe1ddf9152eef3.jpg


四次分手:

d025c7fff287a8195d6008f8.jpg



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