四次揮手中你還不知道的ACK機制


為面試做准備中。

后面有對ACK機制的詳細講解。

四次揮手比較好解釋。

看一下我的草圖。
四次揮手1.jpg

ACK表示發來的數據已確認接收無誤。

圖中一個箭頭代表一次揮手。

第一次揮手:

  • 主動關閉方:發送一個FIN,表示自己沒有數據要發送了。

第二次揮手:

  • 被動關閉方:收到FIN后知道對方不會再有數據傳來。
  • 主動關閉方:收到ACK后將進入半關閉狀態,只會發送ACK進行確認,不會發送其他數據。

第三次揮手:

  • 被動關閉方:發送一個FIN,表示自己沒有數據要發送了。

第四次揮手:

  • 被動關閉方:收到ACK后將進入關閉狀態。

面試過程中除了將上面的講完之外。如何可以、還可以用自己的話講述一遍,這樣子面試官才會知道你是真的理解。

用自己的話講就是:A和B通話,聊到最后A和B說我講完了,B回復說我知道了。但是此時B還沒有講完,所以B又瞎扯了一堆后,B和A說我講完了,A回復說我知道了。此時通信才完全斷開。

這里再科普一下有關知識,大多數三次握手和四次揮手都沒有提到。

發送任何數據、需要接收一個確認對吧。那這個確認是用什么標識的呢。其實還是用的ACK,這個ACK和三次握手四次揮手的ACK都是一回事,都是全大寫的ACK。

也就是說真正的四次揮手其實是這樣子的

四次揮手2.jpg

主動關閉方:
發送一個FIN的同時還需要帶一個ACK,這個ACK是為了確認被動關閉方所發送的上一條數據的。

可以這樣子理解,FIN數據包和普通的數據包並沒有什么區別好吧,只是將FIN標識位設為1罷了。

ACK : TCP協議規定,只有ACK=1時表示對方數據發送有效,也規定連接建立后所有發送的報文的ACK必須為1

所以說如論你是發送普通數據還是發送四次揮手的數據你都要帶上ACK,用來表示對方發送的信息你此時已經收到哪里了。丟失的那些你不需要確認,你只需要確認你收到哪里了。

總結一下:

大寫ACK可以理解為我收到你發來的數據了

ACK標志為除了三次握手的第一次握手置為0之外,其他的時候ACK都是置為1的,也就是說我們進行通信的時候ACK的標志位都是被置為1。為什么呢?哪怕傳送失敗了也是置為1嗎?沒錯、傳送失敗了也是置為1、你想想我發送出錯了,你還是需要確認你到底收到哪里了,所以你的ACK還是需要置為1。

這下你理解下面這個四次揮手的含義了吧。

四次揮手2.jpg

大家要是覺得有收獲的話,麻煩動動手,幫忙點贊,關注。歡迎關注我的公眾號玩編程地碼農

微信圖片_20201001111753.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM