TCP三次握手

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

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

立、數據傳送和鏈接釋放。「三次握手」就發生在鏈接創建階段。ide

三次握手的過程:spa

捕獲.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=7654321server

的包, 此時狀態A爲ESTABLISHED,B爲SYN_RCVD  blog

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

標誌ack=1,主機B收到後確認seq值與ack=1則鏈接創建成功。 此時A、B狀態都變爲ESTABLISHED  it


TCP鏈接創建過程當中爲何須要「三次握手」?io

    目的是爲了防止已失效的鏈接請求報文段忽然又傳送到了服務端,於是產生錯誤。

    client發出的第一個鏈接請求報文段並無丟失,而是在某個網絡結點長時間的滯留了,以至延誤到鏈接釋放之後的某個時間纔到達server。

原本這是一個早已失效的報文段。但server收到此失效的鏈接請求報文段後,就誤認爲是client再次發出的一個新的鏈接請求。因而就向client

發出確認報文段,贊成創建鏈接。若不採用「三次握手」,那麼只要server發出確認,新的鏈接就創建了。因爲如今client並無發出創建鏈接

的請求,所以不會理睬server的確認,也不會向server發送數據。但server卻覺得新的運輸鏈接已經創建,並一直等待client發來數據。這樣,

server的不少資源就白白浪費掉了。採用「三次握手」的辦法能夠防止上述現象發生。例如剛纔那種狀況,client不會向server的確認發出確認。

server因爲收不到確認,就知道client並無要求創建鏈接。」

相關文章
相關標籤/搜索