TCP的三次握手和四次揮手

一、TCP的三次握手和四次揮手

面試時常常被問到tcp三次握手和四次揮手是怎么回事

1 三次握手簡介

建立TCP連接時,需要客戶端和服務(wù)端共發(fā)送3個包

  • 客戶端發(fā)送初始序號seq=x和syn=1請求標(biāo)志
  • 服務(wù)端發(fā)送請求表示syn=1,發(fā)送確認(rèn)標(biāo)志ACK,發(fā)送自己的序號seq=y,發(fā)送客戶端確認(rèn)序號 ack=x+1
  • 客戶端發(fā)送ACK確認(rèn)標(biāo)志,發(fā)送自己的序號seq=x+1,發(fā)送對方的確認(rèn)序號ack=y+1


    image.png

2 三次握手的過程分析

  • 第一次: 客戶端發(fā)送請求到服務(wù)器,服務(wù)器之道客戶端發(fā)送正常,自己接收正常 SYN=1 seq=x
  • 第二次: 服務(wù)器發(fā)送給客戶端,客戶端知道自己發(fā)送,接收正常,服務(wù)器接收發(fā)送正常 ACK=1 ack=x+1 SYN=1 seq=y
  • 第三次: 客戶端發(fā)送給服務(wù)器,服務(wù)器知道客戶端發(fā)送接收正常,自己接收發(fā)送也正常 seq=x+1 ACK=1 ack=y+1
    上面的分析過程可以看出,通過三次握手,雙方都知道對方的發(fā)送接收正常。

3 四次揮手簡介

  • 客戶端發(fā)出FIN=1 自己的序列號 seq=u 進(jìn)入FIN-WAIT-1狀態(tài)
  • 服務(wù)端接收到客戶端的消息后,發(fā)出ACK=1的確認(rèn)標(biāo)志和客戶端確認(rèn)ack=u+1
  • 客戶端接收到服務(wù)器確認(rèn)結(jié)果后,進(jìn)去FIN-WAIT-2的狀態(tài),此時服務(wù)器發(fā)送FIN=1信號,確認(rèn)標(biāo)志ACK=1,確認(rèn)序號ack=u+1,自己序號seq=w,服務(wù)器進(jìn)入LAST-ACK
  • 客戶端收到回復(fù)后,發(fā)送確認(rèn)ACK=1 ack=w+1自己的seq=u+1,客戶進(jìn)去TIME-WAIT狀態(tài),客戶端經(jīng)過2個最長報文段壽命后,客戶端CLOSE,服務(wù)器收到確認(rèn)后立即進(jìn)入CLOSE狀態(tài)


    image.png

4 四次揮手狀態(tài)分析

  • 第一次: 客戶端請求斷開 FIN seq=u
  • 第二次: 服務(wù)器確認(rèn)客戶端的斷開請求 ACK ack=u+1 seq=v
  • 第三次: 服務(wù)器請求斷開FIN seq=w ACK ack=u+1
  • 第四次: 客戶端確認(rèn)服務(wù)器的斷開ACK ack=w+1 seq=u+1

5 為什么會有三次揮手 四次握手

  • 三次握手時,服務(wù)器同時把ACK和SYN放在一起發(fā)送到了客戶端那里
  • 四次揮手時,當(dāng)收到對方的 FIN 報文時,僅僅表示對方不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù),己方是否現(xiàn)在關(guān)閉發(fā)送數(shù)據(jù)通道,需要上層應(yīng)用來決定,因此,己方 ACK 和 FIN 一般都會分開發(fā)送。
原文地址:

https://www.cnblogs.com/jainszhang/p/10641728.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容