TCP創建鏈接爲何是三次握手,而不是兩次或四次?
TCP,名爲傳輸控制協議,是一種可靠的傳輸層協議,IP協議號爲6。
順便說一句,原則上任何數據傳輸都沒法確保絕對可靠,三次握手只是確保可靠的基本須要。編程
對應爲客戶端與服務器之間的通訊:
因而有了如下對話:
我:1+1等於幾?
她:2,2+2等於幾?
我:4服務器
首先兩我的約定協議
1.感受網絡狀況不對的時候,任何一方均可以發起詢問
2.任何狀況下,若發起詢問後5秒還沒收到回覆,則認爲網絡不通
3.網絡不通的狀況下等1min路由器以後再發起詢問網絡
對於我而言,發起 「1+1等於幾」的詢問後socket
對於她而言,當感受網絡狀況不對的時候spa
這樣,若是上面的對話得以完成,就證實雙方均可以確認本身能夠聽到對方的聲音,對方也能夠聽到本身的聲音!blog
這個解釋足夠簡單了吧!接下來咱們看四次揮手。路由
三次握手耳熟能詳,四次揮手估計就..所謂四次揮手(Four-Way Wavehand)即終止TCP鏈接,就是指斷開一個TCP鏈接時,須要客戶端和服務端總共發送4個包以確認鏈接的斷開。在socket編程中,這一過程由客戶端或服務端任一方執行close來觸發,整個流程以下圖所示:
開發
簡單點說,當被動方收到主動方的FIN報文通知時,它僅僅表示主動方沒有數據再發送給被動方了。
但未必被動方全部的數據都完整的發送給了主動方,因此被動方不會立刻關閉SOCKET,它可能還須要發送一些數據給主動方後,
再發送FIN報文給主動方,告訴主動方贊成關閉鏈接,因此這裏的ACK報文和FIN報文多數狀況下都是分開發送的。