TCP三次握手和四次揮手及其狀態變化

@[TOC] TCP三次握手和四次揮手

http://www.httpclient.cn/archives/142.html
https://blog.csdn.net/hyg0811/article/details/102366854

三次握手

  1. 最初:client:Closed, server:Listen.
  2. 第一次握手:client 進入SYN_SENT狀態,發送SYN報文,並帶有初始化序列號ISN =x(Initial Sequtial Number, 或seq)。server收到客服端發來的報文後,進入SYN_RCVD狀態。此時,server確認了client的發送能力OK.
  3. 第二次握手:server發送SYN-ACK報文應答客戶端,Ack = x+1, 也帶有自己的初始化序列號ISN = y。客戶端收到後,進入連接ESTABLISHED狀態。此時,client確認了server具有正常的接受和發送能力。
  4. 第三次握手:客戶端發送ACK=y+1給服務端,服務端收到後,進入ESTABLISHED狀態。此時,server確認了client具備正常的接受和發送能力。
  • 注意
    • 服務器端的資源分配是在二次握手時分配的。server收到SYN報文後, 會建立半連接隊列,在一定時間後,如果server沒有收到client的ack, 就會重傳直至超時。很多DDOS攻擊就是SYN攻擊,通過僞造大量不存在的client ip,導致server端建立很多的半連接,不斷的重傳,消耗服務端資源。

四次揮手

  1. 開始雙方都處於ESTABLISHED 狀態
  2. 第一次揮手:client: FIN報文,seq=u client進入FIN_WAIT1狀態。
  3. 第二次揮手:server:ACK報文,seq=v, ack=u+1, server進入CLOSE_WAIT狀態,client 進入FIN_WAIT2狀態。
  4. 第三次揮手: server 發送FIN報文,seq=w, server進入LAST_ACK狀態, 等待客服端的 last ack。
  5. 第四次揮手:client:ACK報文,ack=w+1, client進入TIME_WAIT狀態,server進入CLOSED狀態。
  • 注意:
    • MSL是Maximum Segment Lifetime的英文縮寫,可譯爲“最長報文段壽命”,它是任何報文在網絡上存在的最長時間,超過這個時間報文將被丟棄。
    • 至於 TIME_WAIT 持續的時間至少是一個報文的來回時間。一般會設置一個計時,如果過了這個計時沒有再次收到 FIN 報文,則代表對方成功,就是 ACK 報文,此時處於 CLOSED 狀態。
    • 首先主動關閉連接端會有 time_wait, 等待的是2個msl的時間,以免server再last_ack沒有收到自己的ack又重發fin報文時 client已經關閉。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章