1. 程式人生 > >計算機網絡(四),TCP三次握手

計算機網絡(四),TCP三次握手

序號 lib strong 連接狀態 ood font 未收到 關閉 上一個

目錄

1.三次握手詳情

2.為什麽需要三次握手才能建立連接

3.首次握手的隱患---SYN超時的問題

4.建立連接之後,Client出現故障

四、TCP三次握手

1.三次握手詳情

技術分享圖片

(1)一開始,客戶端和服務器端都處於關閉狀態(CLOSED),然後開啟服務,服務端這個時候處於監聽狀態(LISTEN)。

(2)客戶端發送一個連接請求報文,裏面SYN等於1seq可以使任意一個整數,標明這個報文段的序號。這個報文段不能傳輸數據。此時客戶端進入同步狀態(SYN-SENT)。

(3)服務端同意連接則發送一個報文段,裏面SYN=1ACK=1seq=yack=x+1。大寫字母是標誌位ACK=1表示確認號(

ack)有效,這裏ack確認上一個服務器發送過來的seqx的已經接受,確認下一個接收的編號為x+1,同時發送的報文段的序號為y。此時的報文段不能發送數據。服務端進入同步狀態(SYN-RCVD)。

4)客戶端接收服務端報文段之後,回復一個報文段,裏面ACK=1seq=x+1ack=y+1ack確認服務器端的y編號的數據已經接受,請求ack=y+1的字段,此時客戶端的報文段編號為x+1。此時可以發送數據,也可以不發送。客戶端進入已建立連接狀態(ESTAB-LISHED)。

5)服務端接收之後進入已連接狀態(ESTAB-LISHED

2.為什麽需要三次握手才能建立連接

  主要是初始化

Sequence Number的初始值

3.首次握手的隱患---SYN超時的問題

  問題分析Server收到ClientSYN,回復SYN-ACK的時候未收到ACK確認

  服務端解決方法Server不斷地重試直至超時,Linux系統中超時時間是63秒,即重試五次之後關閉連接1,2,4,8,16,32,第五次重試之後等待32秒後關閉。

  SYN Flood攻擊:即不斷的使服務端進入同步狀態,使服務器的端口不可用,浪費掉

  解決方法:設置一個SYN隊列,當SYN隊列滿了之後,服務器則會通過tcp_syncookies參數回發一個SYN Cookie,如果客戶端連接正常則會回發SYN Cookie

,直到建立連接

4.建立連接之後,Client出現故障

  連接具有保活機制,向對方發送保活探測報文,如果未收到響應則繼續發送,常識次數達到保活探測數任未收到響應即終止連接。

計算機網絡(四),TCP三次握手