tcp知識點彙總

Tcp傳輸控制協議)Transmission Control Protocol

最近發現以前學tcp的時候,根本並沒有理解tcp,整理一下


當應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,TCP則把數據流分割成適當長度的報文段,最大傳輸段大小(MSS)通常受該計算機連接的網絡的數據鏈路層的最大傳送單元(MTU)限制。之後TCP把數據包傳給IP層,由它來通過網絡將包傳送給接收端實體的TCP層。


TCP爲了保證報文傳輸的可靠就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的字節發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據(假設丟失了)將會被重傳。

tcp報文格式如下:幫助我們理解tcp的建立連接過程和釋放連接過程



tcp三次握手:



第一次握手:服務器被動打開,客戶端主動建立連接,向服務器發送請求,請求包括syn+seq,這裏的syn=1是指1爲是,0爲否,表名tcp報文格式中的syn有意義,seq是報文中的32位序號,seq=x,表明在後面傳送數據時的第一個數據字節的序號是x。。此時客戶端進行syn-send狀態。

第二次握手:服務器收到客戶端的請求報文後,發送syn+ack+seq表名自己已收到請求信息。圖中寫的ACK=1對應的是與SYN處於同一位置的ACK標記置爲1,ACK=1,其上的確認序號ack纔有意義,此時的ack爲收到客戶端的seq+1。seq是自己選擇的。服務器進入syn-rcvd狀態

第三次握手:客戶端收到服務器的確認信息後,要跟服務器進行確認。發送ack+seq信息到服務器。seq爲第二次握手時ack也就是第一次握手的seq+1.雙方進入已建立連接狀態,establ-ished

三次握手時每次都有發送的報文都有不同的地方,以此進行判斷是那一次握手。


tcp斷開連接過程:



 在數據傳輸完畢之後,通信雙方都可以發出釋放連接的請求。
     1)數據傳輸結束後,主機A的應用進程先向其TCP發出釋放連接請求,不在發送數據。TCP通知對方要釋放從A到B的連接,將發往主機B的TCP報文段首部的終止比特FIN置爲1,序號seq等於已傳送數據的最後一個字節的序號加1。
     2)主機B的TCP收到釋放連接通知後發出確認,其序號爲u+1,同時通知應用進程,這樣A到B的連接就釋放了,連接處於半關閉狀態。主機B不在接受主機A發來的數據;但主機B還向A發送數據,主機A若正確接收數據仍需要發送確認。
     3)在主機B向主機A的數據發送結束後,其應用進程就通知TCP釋放連接。主機B發出的連接釋放報文段必須將終止比特置爲1,並使其序號w等於前面已經傳送過的數據的最後一個字節的序號加 1,還必須重複上次已發送過的ACK=u+1。
     4)主機A對主機B的連接釋放報文段發出確認,將ACK置爲1,ACK=w+1, seq=u+1。這樣才把從B到A的反方向連接釋放掉,主機A的TCP再向其應用進程報告,整個連接已經全部釋放。

各個狀態描述如下

狀 態

描 述

CLOSED

關閉狀態,沒有連接活動或正在進行

LISTEN

監聽狀態,服務器正在等待連接進入

SYN RCVD

收到一個連接請求,尚未確認

SYN SENT

已經發出連接請求,等待確認

ESTABLISHED

連接建立,正常數據傳輸狀態

FIN WAIT 1

(主動關閉)已經發送關閉請求,等待確認

FIN WAIT 2

(主動關閉)收到對方關閉確認,等待對方關閉請求

TIMED WAIT

完成雙向關閉,等待所有分組死掉

CLOSING

雙方同時嘗試關閉,等待對方確認

CLOSE WAIT

(被動關閉)收到對方關閉請求,已經確認

LAST ACK

(被動關閉)等待最後一個關閉確認,並等待所有分組死掉


關於tcp協議的一些關鍵點:

SYN
SYN(synchronous)是TCP/IP建立連接時使用的握手信號,tcp建立連接的第一個握手是發送syn,因此在黑客攻擊中可利用第一次握手的機制向指定主機放鬆大量的請求,但不做迴應,就是半連接請求,耗費目的主機cpu和內存資源。達到攻擊的目的

三次握手中,第三次握手的必要性:

假定出現一種異常情況,即A發出的第一個連接請求報文段並沒有丟失,而是在某些網絡結點長時間滯留了,一直延遲到連接釋放以後的某個時間纔到達B,本來這是一個早已失效的報文段。但B收到此失效的連接請求報文段後,就誤認爲是A又發出一次新的連接請求,於是就向A發出確認報文段,同意建立連接。假定不採用三次握手,那麼只要B發出確認,新的連接就建立了,這樣一直等待A發來數據,B的許多資源就這樣白白浪費了

四次揮手中,最後主機a發送報文信息後等待2msl的意義:

  • 第一,爲了保證A發送的最有一個ACK報文段能夠到達B。這個ACK報文段有可能丟失,因而使處在LAST-ACK狀態的B收不到對已發送的FIN和ACK報文段的確認。B會超時重傳這個FIN和ACK報文段,而A就能在2MSL時間內收到這個重傳的ACK+FIN報文段。接着A重傳一次確認。
  • 第二,就是防止上面提到的已失效的連接請求報文段出現在本連接中,A在發送完最有一個ACK報文段後,再經過2MSL,就可以使本連接持續的時間內所產生的所有報文段都從網絡中消失。

Transmission Control Protocol
發佈了31 篇原創文章 · 獲贊 13 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章