計網 四次揮手

2022-08-17 17:27:18 字數 1522 閱讀 2372

技術這種東西,只要有時間,有毅力總是能夠學會的

之前看到了很多的文章寫tcp三次握手建立連線,四次揮手斷開連線,期初看了一遍不懂,之後又遇到了另一篇將這個的,又看了一遍,看懂了,但是在此回想時,就又忘了。但是這一次,我想我可能不會忘了吧。

三次握手

主體:伺服器、客戶端

第一次握手:客戶端想要從伺服器上獲取資源,所以傳送乙個請求建立tcp連線的資料報,其中ack=1,seq=x;

第二次握手:伺服器收到資料報後,表示可以建立連線,傳送個客戶端乙個確認資料報,其中ack=1,ack=x+1,seq=y;

第三次握手:客戶端收到來自伺服器的資料報後,再給伺服器傳送乙個資料報說:「我收到你的確認資料報了」(1),伺服器收到後,分配資源(2),建立連線,其中ack=y+1,seq=x+1;

再講為什麼要三次,而不是兩次。首先來看看如果就是兩次會是神馬樣子的。客戶端傳送乙個請求連線資料報後,但是出現了網路擁塞或者延時,所以客戶端不得不再發乙個請求資料報,然後伺服器就收到了,然後建立的連線,資料傳輸完成後,斷開了連線。碰巧,開始發的第乙個請求連線資料報到了,於是伺服器為資料傳輸分配資源包括緩衝區,變數等(注意,因為客戶端我不需要資料,所以不會理會來自伺服器端的確認資料報,也就是不會建立連線)。浪費了伺服器寶貴的資源,還有就是防止arp洪氾攻擊。

對於上面的ack,seq,ack,這些東西最好看一下tcp頭部格式,要是解釋的話,就要寫很多了,其中,好多地方都是需要解釋的,但是還是得抓重點不是。

四次揮手

「咳咳,天下無不散的宴席」

資料傳輸完成後,客戶端或者伺服器端都是可以先請求斷開連線的。不妨設先是客戶端發起

第一次揮手:客戶端傳送乙個請求斷開連線的資料報,其中fin=1,ack=1;seq=x;

第二次揮手:伺服器收到後很是難過,但是還是傳送了乙個確認資料報,然後就斷開了客戶端到伺服器的連線,客戶端不能向伺服器傳送資料了。其中ack=1,ack=x+1.

第三次揮手:服務不需要向客戶端傳送資料的時候,就會向客戶端傳送乙個請求斷開連線的資料報,其中fin=1,ack=1,seq=y;

第四次揮手:客戶端收到伺服器的資料報後,好,那就是斷開把,於是又傳送了乙個確認資料報。服務收到後,客戶端等待2msl時間後斷開連線,這裡msl是報文最大生存時間,如果回應報文丟失,超時後,伺服器再傳送乙個fin報文,然後客戶端再回覆乙個ack報文,其中ack=1,ack=y+1,.seq=x+1;

上面這些都不是我主要想說的,,,,,

因為這是在網上一搜,一大把帖子說的,我要說的是,既然tcp是全雙工的--即兩端可以同時通訊,那麼在第二次揮手的時候,明明客戶端向伺服器傳送資料的那條連線已經斷開了,它是怎麼接受第三次揮手時的資料報的,怎麼傳送第四次揮手的響應包的,這些我沒有看到有人說的,下面是我的理解:

從建立連線過程中,我們可以看出,其實這些請求包和響應包,並不是由tcp連線來傳輸的,所以之後揮手的時候,雖然說連線斷開了,但是並不會影響請求和響應。所以這也是題目為什麼只寫了四次揮手的原因。希望可以幫助你們。晚安!

tcp 四次揮手 TCP四次揮手

tcp斷開連線的過程 客戶端傳送fin報文,表明客戶端將不在傳送資料。具體過程 把fin標誌位改為1,序號seq u,之前傳送的資料加1,這裡規定即使不攜帶資料序號也要 1。該過程中客戶端通過close系統呼叫從established狀態進入fin wait 1狀態。第二次揮手 服務端收到客戶端發來...

計網 TCP的三次握手和四次揮手

昨天被360的筆試虐到了。辣麼多道c 引號還不能好好打,用中文的,我還以為選項是錯的。tat 不過考了幾道前端題也發現tcp的過程還是不大了解。這麼經典的題目。幾個字段 syn synchronize 在建立連線的時候用 ack acknowledge number 用於確認序號 seq seque...

計網 TCP的三次握手及四次揮手詳解

運輸層連線有三個階段 1.三次握手建立 tcp 連線的各狀態 2.建立連線過程分析 1 第一次握手 a 向 b 發出連線請求報文段,其首部中的同步位 syn 1,並選擇序號 seq x,表明傳送資料時的第乙個資料位元組的序號是 x。2 第二次握手 b 收到連線請求報文段後,同意a的請求,發回確認,b...