TCP三次握手

    傳輸控制協議(Transmission Control Protocol,TCP)是一種面向連接的、可靠的、基於字節流的運輸層(Transport

layer)通信協議。是專門爲了在不可靠的互聯網絡上提供一個可靠的端到端字節流而設計的。每一次TCP連接都需要三個階段:連接建

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

三次握手的過程:

捕獲.PNG


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並沒有要求建立連接。”



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