<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>




      原文永久鏈接:https://github.com/AttemptWeb/Record/issues/10
      <https://github.com/AttemptWeb/Record/issues/10>

      上面有一篇專門介紹過(guò)TCP和UCP協(xié)議 <https://github.com/AttemptWeb/Record/issues/6>
      ,其中只是粗略的提到TCP協(xié)議的三次握手,而四次揮手完全沒有說(shuō)到,所以這次專門總結(jié)了這篇文章,專門講講三次握手和四次揮手。

      備注:(下文中提到的專業(yè)術(shù)語(yǔ))

      ack —— 確認(rèn)號(hào)碼

      seq —— 順序號(hào)碼

      ISN —— 初始序列號(hào)

      ACK —— 確認(rèn),使得確認(rèn)號(hào)有效(握手使用)

      SYN —— 用于初始化一個(gè)連接的序列號(hào),建立聯(lián)機(jī)

      FIN —— 該報(bào)文的發(fā)送方已經(jīng)結(jié)束向?qū)Ψ桨l(fā)送數(shù)據(jù)

      #
      <https://herrylo.github.io/front/2019-08-17.html#tcp%E7%9A%84%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B>
      TCP的三次握手

      三次握手 實(shí)際就是Client端和Server端建立穩(wěn)定TCP連接的發(fā)送三個(gè)包的過(guò)程。



      *
      第一次握手:(SYN=1, ACK=0, seq=x):


      Client發(fā)送SYN標(biāo)志位1的包到Server,以及初始序號(hào)x(保存在包頭的序列號(hào)seq字段,簡(jiǎn)稱ISN),和ACK標(biāo)志位為0,并進(jìn)入SYN_SEND狀態(tài),等待Server確認(rèn)。

      *
      第二次握手:(SYN=1, ACK=1, seq=y, ack=x+1):

      Server發(fā)回確認(rèn)包(ACK)應(yīng)答。即 SYN 標(biāo)志位和 ACK
      標(biāo)志位均為1。Server確認(rèn)ISN序列號(hào),放到seq域里,同時(shí)將確認(rèn)序號(hào)(ack)設(shè)置為Client的ISN加1,即x+1。 發(fā)送完畢后,Server進(jìn)入
      SYN_RCVD 狀態(tài)。

      *
      第三次握手:(ACK=1,seq=x+1,ack=y+1)

      Client再次發(fā)送確認(rèn)包(ACK),ACK標(biāo)志位為1,并且把Server發(fā)來(lái)ISN的序號(hào)字段+1,放在確定字段中發(fā)送給對(duì)方。

      發(fā)送完畢后,Client和Server建立連接,TCP 握手結(jié)束。

      #
      <https://herrylo.github.io/front/2019-08-17.html#tcp%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B>
      TCP四次揮手

      四次揮手 實(shí)際就是Client端和Server端關(guān)閉TCP連接的發(fā)送四個(gè)包的過(guò)程。



      * 第一次揮手(FIN=1,seq=u)
      Client 想要關(guān)閉連接,Client 會(huì)發(fā)送一個(gè)FIN標(biāo)志位置為1,當(dāng)前序列號(hào)為u的包,表示需要關(guān)閉連接了。Client進(jìn)入 FIN_WAIT_1 狀態(tài)。

      * 第二次揮手(ACK=1,seq=v,ack=u+1)

      Server收到Client的FIN包之后,會(huì)發(fā)送一個(gè)確認(rèn)序號(hào)為收到的序列號(hào)u+1的包,表明自己接受到了Client關(guān)閉連接的請(qǐng)求,但還未準(zhǔn)備好關(guān)閉連接。Server進(jìn)入
      CLOSE_WAIT 狀態(tài),Client進(jìn)入 FIN_WAIT_2 狀態(tài)。

      * 第三次揮手(FIN=1,ACK=1,seq=w,ack=u+1)
      當(dāng)Server將剩余數(shù)據(jù)發(fā)送完之后,會(huì)發(fā)送一個(gè)自己的FIN包,序列號(hào)為u+1。Server進(jìn)入 LAST_ACK 狀態(tài),等待來(lái)自Client的最后一個(gè)ACK。

      * 第四次揮手(ACK=1,seq=u+1,ack=w+1)
      Client接收到來(lái)自Server端的關(guān)閉請(qǐng)求之后,發(fā)送最后一個(gè)ACK確認(rèn)包,確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1。Client進(jìn)入
      TIME_WAIT狀態(tài),等待可能出現(xiàn)的要求重傳的 ACK
      包。Server接收到這個(gè)確認(rèn)包之后,關(guān)閉連接,進(jìn)入CLOSED狀態(tài)。(Client會(huì)等待2MSL之后,沒有收到Server的ACK
      ,就確認(rèn)Server進(jìn)入CLOSED狀態(tài),自己也關(guān)閉進(jìn)入CLOSED狀態(tài)。)

      發(fā)送完畢后,Client和Server斷開連接,TCP 揮手結(jié)束。

      以上就是這次揮手和握手的全部?jī)?nèi)容了,如果有疑問歡迎留言哦。

      #
      <https://herrylo.github.io/front/2019-08-17.html#%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99>
      參考資料

      知乎:“三次握手,四次揮手”你真的懂嗎? <https://zhuanlan.zhihu.com/p/53374516>

      bilibili: 計(jì)算機(jī)網(wǎng)絡(luò)TCP傳輸層連接管理
      <https://www.bilibili.com/video/av9876107/?p=70&t=656>

      ps: 順便推一下自己的個(gè)人公眾號(hào):Yopai,有興趣的可以關(guān)注,每周不定期更新,分享可以增加世界的快樂


      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          欧美xXX一区二区 | 好大好湿好硬顶到了好爽抱着视频 | 男人和女人在做性视频 | 太粗太大小雪老师受不了 | 思思热99在线 | 成人91网站午夜视频 | 男双性恋三人互磨h文 | 亚州在现免费视 | 台湾成人综合 | 国产成人免费观看视频 |