計算機網絡(四),TCP三次握手
目錄
1.三次握手詳情
2.為什麽需要三次握手才能建立連接
3.首次握手的隱患---SYN超時的問題
4.建立連接之後,Client出現故障
四、TCP三次握手
1.三次握手詳情
(1)一開始,客戶端和服務器端都處於關閉狀態(CLOSED),然後開啟服務,服務端這個時候處於監聽狀態(LISTEN)。
(2)客戶端發送一個連接請求報文,裏面SYN等於1,seq可以使任意一個整數,標明這個報文段的序號。這個報文段不能傳輸數據。此時客戶端進入同步狀態(SYN-SENT)。
(3)服務端同意連接則發送一個報文段,裏面SYN=1,ACK=1,seq=y,ack=x+1。大寫字母是標誌位ACK=1表示確認號(
(4)客戶端接收服務端報文段之後,回復一個報文段,裏面ACK=1,seq=x+1,ack=y+1。ack確認服務器端的y編號的數據已經接受,請求ack=y+1的字段,此時客戶端的報文段編號為x+1。此時可以發送數據,也可以不發送。客戶端進入已建立連接狀態(ESTAB-LISHED)。
(5)服務端接收之後進入已連接狀態(ESTAB-LISHED)
2.為什麽需要三次握手才能建立連接
主要是初始化
3.首次握手的隱患---SYN超時的問題
問題分析:Server收到Client的SYN,回復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三次握手