天天看點

TCP三向交握

    傳輸控制協定(Transmission Control Protocol,TCP)是一種面向連接配接的、可靠的、基于位元組流的運輸層(Transport

layer)通信協定。是專門為了在不可靠的網際網路絡上提供一個可靠的端到端位元組流而設計的。每一次TCP連接配接都需要三個階段:連接配接建

立、資料傳送和連接配接釋放。“三次握手”就發生在連接配接建立階段。

三次握手的過程:

TCP三向交握

1)主機A發送标志syn=1,随機産生seq =1234567的資料包到伺服器,主機B由syn=1知道,A要求建立連接配接; 此時狀态A為

SYN_SENT,B為LISTEN 2)主機B收到請求後要确認連接配接資訊,向A發送ack =(主機A的seq+1),标志syn=1,ack=1,随機産生seq=7654321

的包, 此時狀态A為ESTABLISHED,B為SYN_RCVD  

3)主機A收到後檢查ack 是否正确,即第一次發送的seq number+1,以及位碼ack是否為1,若正确,主機A會再發送ack =(主機B的seq+1),

标志ack=1,主機B收到後确認seq值與ack=1則連接配接建立成功。 此時A、B狀态都變為ESTABLISHED  

TCP連接配接建立過程中為什麼需要“三次握手”?

    目的是為了防止已失效的連接配接請求封包段突然又傳送到了服務端,因而産生錯誤。

    client發出的第一個連接配接請求封包段并沒有丢失,而是在某個網絡結點長時間的滞留了,以緻延誤到連接配接釋放以後的某個時間才到達server。

本來這是一個早已失效的封包段。但server收到此失效的連接配接請求封包段後,就誤認為是client再次發出的一個新的連接配接請求。于是就向client

發出确認封包段,同意建立連接配接。若不采用“三次握手”,那麼隻要server發出确認,新的連接配接就建立了。由于現在client并沒有發出建立連接配接

的請求,是以不會理睬server的确認,也不會向server發送資料。但server卻以為新的運輸連接配接已經建立,并一直等待client發來資料。這樣,

server的很多資源就白白浪費掉了。采用“三次握手”的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的确認發出确認。

server由于收不到确認,就知道client并沒有要求建立連接配接。”