【網(wǎng)絡(luò)基礎(chǔ)】三次握手和四次揮手

?寫在前面

參考TCP的三次握手和四次揮手和UDP協(xié)議

首先明白TCP和UDP的區(qū)別,下面的四段引用

TCP(Transmission Control Protocol) 是傳輸控制協(xié)議,提供的是面向連接、可靠的數(shù)據(jù)流傳輸。當(dāng)客戶端和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能順序地從一端傳到另一端。

tcp傳輸數(shù)據(jù)就像打電話,你必須知道對方的電話號碼,電話打通之后才能進(jìn)行對話,先說的話先到,后說的話后到是有順序的。對方對方?jīng)]聽清你的說的話時你可以重說一遍。

UDP(User Datagram Protocol)是用戶數(shù)據(jù)報協(xié)議,提供的是非面向連接的、不可靠的數(shù)據(jù)流傳輸。,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達(dá)目的地。UDP在傳輸數(shù)據(jù)前不用在客戶和服務(wù)器之間建立一個連接,且沒有超時重發(fā)等機(jī)制,不保證數(shù)據(jù)按順序傳遞,故而傳輸速度很快

udp傳輸數(shù)據(jù)就像寄一封信,發(fā)信的人只管發(fā),不管到,但必須在信封上寫明對方的地址。發(fā)信者和收信者不需要建立連接,全靠郵電局聯(lián)系,信發(fā)到是可能已經(jīng)過了很久了,也可能根本沒發(fā)到。先發(fā)的信件未必先到,后發(fā)的信件也未必后到。

現(xiàn)在應(yīng)該明白的一點(diǎn)是握手和揮手是對于TCP而言的,因為UDP不需要建立連接

?建立連接

一張圖搞懂三次握手四次揮手.jpeg
  • 三次握手
    1.Client 發(fā)送 SYN

  • 四次揮手

  • 為什么斷開連接是四次呢? 答:Server可能還有數(shù)據(jù)沒有發(fā)送完
    前置條件:Client發(fā)起斷開請求
  1. 1-在Client發(fā)起FIN時僅僅表示Client沒有數(shù)據(jù)要發(fā)給Server了,此時2-Server發(fā)送ACK給Client,表示我收到你的關(guān)閉請求了,但是Server不能立馬關(guān)閉,原因是Server可能還有數(shù)據(jù)沒有發(fā)送完。
  2. 等到Server發(fā)送數(shù)據(jù)完了之后,3-Server就給Client發(fā)送FIN請求,表示Server沒有數(shù)據(jù)要發(fā)送給Client了,Server 要和Client 關(guān)閉連接了
  3. Client收到Server發(fā)送的FIN后,表示收到了服務(wù)端的關(guān)閉請求,然后Client進(jìn)入Time-Wait狀態(tài),4-發(fā)送ACK給Server,在最大報文生存時間之后,Client才會真的關(guān)閉連接。

2倍的最大報文生存時間:
4-發(fā)送ACK給Server確保服務(wù)端收到應(yīng)答,如果服務(wù)端沒有收到會重發(fā)FIN=1的關(guān)閉連接數(shù)據(jù)。所以就是ACK過去的時間+服務(wù)端收到ACK然后回應(yīng)客戶端的時間,其實(shí)這兩個時間是我們假設(shè)的,不然一來一回?zé)o休止了。

引用自知夫~
第四個消息:A發(fā)出ACK,用于確認(rèn)收到B的FIN當(dāng)B接收到此消息,即認(rèn)為雙方達(dá)成了同步:雙方都知道連接可以釋放了,此時B可以安全地釋放此TCP連接所占用的內(nèi)存資源、端口號。所以被動關(guān)閉的B無需任何wait time,直接釋放資源。但,A并不知道B是否接到自己的ACK,A是這么想的:1)如果B沒有收到自己的ACK,會超時重傳FiN那么A再次接到重傳的FIN,會再次發(fā)送ACK2)如果B收到自己的ACK,也不會再發(fā)任何消息,包括ACK無論是1還是2,A都需要等待,要取這兩種情況等待時間的最大值,以應(yīng)對最壞的情況發(fā)生,這個最壞情況是:去向ACK消息最大存活時間(MSL) + 來向FIN消息的最大存活時間(MSL)。這恰恰就是2MSL( Maximum Segment Life)。等待2MSL時間,A就可以放心地釋放TCP占用的資源、端口號,此時可以使用該端口號連接任何服務(wù)器。為何一定要等2MSL?如果不等,釋放的端口可能會重連剛斷開的服務(wù)器端口,這樣依然存活在網(wǎng)絡(luò)里的老的TCP報文可能與新TCP連接報文沖突,造成數(shù)據(jù)沖突,為避免此種情況,需要耐心等待網(wǎng)絡(luò)老的TCP連接的活躍報文全部死翹翹,2MSL時間可以滿足這個需求(盡管非常保守)!

?總結(jié)

TCP才有握手的概念,不管是握手還是揮手都是為了保證數(shù)據(jù)的完整性,順序性。細(xì)節(jié)還是圖片說的清楚。

最后編輯于
?著作權(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)容