TCP的三次握手和四次揮手

三次握手
TCP連接是通過三次握手來連接的。
第一次握手
當(dāng)客戶端向服務(wù)器發(fā)起連接請求時,客戶端會發(fā)送同步序列標(biāo)號SYN到服務(wù)器,在這里我們設(shè)SYN為m,等待服務(wù)器確認(rèn),這時客戶端的狀態(tài)為SYN_SENT。
第二次握手
當(dāng)服務(wù)器收到客戶端發(fā)送的SYN后,服務(wù)器要做的是確認(rèn)客戶端發(fā)送過來的SYN,在這里服務(wù)器發(fā)送確認(rèn)包ACK,這里的ACK為m+1,意思是說“我收到了你發(fā)送的SYN了”,同時,服務(wù)器也會向客戶端發(fā)送一個SYN包,這里我們設(shè)SYN為n。這時服務(wù)器的狀態(tài)為SYN_RECV。
一句話,服務(wù)器端發(fā)送SYN和ACK兩個包。
第三次握手
客戶端收到服務(wù)器發(fā)送的SYN和ACK包后,需向服務(wù)器發(fā)送確認(rèn)包ACK,“我也收到你發(fā)送的SYN了,我這就給你發(fā)個確認(rèn)過去,然后我們即能合體了”,這里的ACK為n+1,發(fā)送完畢后,客戶端和服務(wù)器的狀態(tài)為ESTABLISH,即TCP連接成功。
在三次握手中,客戶端和服務(wù)器端都發(fā)送兩個包SYN和ACK,只不過服務(wù)器端的兩個包是一次性發(fā)過來的,客戶端的兩個包是分兩次發(fā)送的。
三次握手示意圖如下(純手繪,見諒見諒):
四次揮手
當(dāng)A端和B端要斷開連接時,需要四次握手,這里稱為四次揮手。
斷開連接請求可以由客戶端發(fā)出,也可以由服務(wù)器端發(fā)出,在這里我們稱A端向B端請求斷開連接。
第一次揮手
A端向B端請求斷開連接時會向B端發(fā)送一個帶有FIN標(biāo)記的報(bào)文段,這里的FIN是FINish的意思。
第二次揮手
B端收到A發(fā)送的FIN后,B段現(xiàn)在可能現(xiàn)在還有數(shù)據(jù)沒有傳完,所以B端并不會馬上向A端發(fā)送FIN,而是先發(fā)送一個確認(rèn)序號ACK,意思是說“你發(fā)的斷開連接請求我收到了,但是我現(xiàn)在還有數(shù)據(jù)沒有發(fā)完,請稍等一下唄”。
第三次揮手
當(dāng)B端的事情忙完了,那么此時B端就可以斷開連接了,此時B端向A端發(fā)送FIN序號,意思是這次可以斷開連接了。
第四次揮手
A端收到B端發(fā)送的FIN后,會向B端發(fā)送確認(rèn)ACK,然后經(jīng)過兩個MSL時長后斷開連接。
MSL是Maximum Segment Lifetime,最大報(bào)文段生存時間,2個MSL是報(bào)文段發(fā)送和接收的最長時間。
四次揮手示意圖如下(純手繪,見諒見諒):
兩次握手可以么?
TCP連接時是三次握手,那么兩次握手可行嗎?
在《計(jì)算機(jī)網(wǎng)絡(luò)》中是這樣解釋的:已失效的連接請求報(bào)文段”的產(chǎn)生在這樣一種情況下:client發(fā)出的第一個連接請求報(bào)文段并沒有丟失,而是在某個網(wǎng)絡(luò)結(jié)點(diǎn)長時間的滯留了,以致延誤到連接釋放以后的某個時間才到達(dá)server。本來這是一個早已失效的報(bào)文段。但server收到此失效的連接請求報(bào)文段后,就誤認(rèn)為是client再次發(fā)出的一個新的連接請求。于是就向client發(fā)出確認(rèn)報(bào)文段,同意建立連接。假設(shè)不采用“三次握手”,那么只要server發(fā)出確認(rèn),新的連接就建立了。由于現(xiàn)在client并沒有發(fā)出建立連接的請求,因此不會理睬server的確認(rèn),也不會向server發(fā)送ACK包。這樣就會白白浪費(fèi)資源。
而經(jīng)過三次握手,客戶端和服務(wù)器都有應(yīng)有答,這樣可以確保TCP正確連接。
為什么TCP連接是三次,揮手確是四次?
在TCP連接中,服務(wù)器端的SYN和ACK向客戶端發(fā)送是一次性發(fā)送的,而在斷開連接的過程中,B端向A端發(fā)送的ACK和FIN是是分兩次發(fā)送的。因?yàn)樵贐端接收到A端的FIN后,B端可能還有數(shù)據(jù)要傳輸,所以先發(fā)送ACK,等B端處理完自己的事情后就可以發(fā)送FIN斷開連接了。
為什么在第四次揮手后會有2個MSL的延時?
前文說到
MSL是Maximum Segment Lifetime,最大報(bào)文段生存時間,2個MSL是報(bào)文段發(fā)送和接收的最長時間。
假定網(wǎng)絡(luò)不可靠,那么第四次發(fā)送的ACK可能丟失,即B端無法收到這個ACK,如果B端收不到這個確認(rèn)ACK,B端會定時向A端重復(fù)發(fā)送FIN,直到B端收到A的確認(rèn)ACK。所以這個2MSL就是用來處理這個可能丟失的ACK的。
經(jīng)典的三次握手、四次揮手原理,按自己的理解梳理下
以下梳理靈感來源于有次大學(xué)同學(xué)微信找我,問:在嗎?
一、生活化理解三次握手、四次揮手
三次握手
第一次–>同學(xué):在嗎?(我想建立連接)
第二次–>我:在的(我大概知道你要干啥了)
第三次–>同學(xué):需要借點(diǎn)錢(建立連接,我要請求點(diǎn)東西了~~~~~)
建立連接成功
四次揮手
第一次–>同學(xué):聊完了,不借錢準(zhǔn)備掛視頻了,你還有啥要說嗎?(準(zhǔn)備斷開連接)
第二次–>我:不是不想借,是真的沒有錢,我還能再解釋幾句(我也是沒辦法,兄die)
第三次–>我:說不出來啥了,那我掛了(再見吧~再見吧 再見吧)
第四次–>同學(xué):那我也掛(沒啥別的需要請求的了,斷開吧,不處了)
斷開連接成功
二、正經(jīng)理解三次握手、四次揮手
只貼兩個圖吧,一切盡在圖里
三次握手
四次揮手
到此這篇關(guān)于TCP的三次握手和四次揮手的文章就介紹到這了,更多相關(guān)三次握手和四次揮手內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
三大網(wǎng)絡(luò)管理協(xié)議:SNMP、NETCONF、RESTCONF介紹
本文將詳細(xì)介紹三種主要的協(xié)議:SNMP(Simple Network Management Protocol)、NETCONF(Network Configuration Protocol)和RESTCONF,需要的朋友可以參考下2024-02-13- 常見的網(wǎng)絡(luò)協(xié)議有:TCP/IP協(xié)議、UDP協(xié)議、HTTP協(xié)議、FTP協(xié)議等,本文就詳細(xì)的介紹一下常見的網(wǎng)絡(luò)協(xié)議,通過這些具體的協(xié)議更深刻的認(rèn)識整體網(wǎng)絡(luò)的傳輸流程及相關(guān)網(wǎng)絡(luò)原理,2023-05-30
- 本文主要介紹了L2TP和PPTP的區(qū)別,主要的前區(qū)別在于用途不同、使用要求不同,下面就來介紹一下L2TP和PPTP的聯(lián)系與區(qū)別,感興趣的可以了解一下2023-05-30
自組織網(wǎng)絡(luò)Ad Hoc之OLSR 協(xié)議詳解
這篇文章主要介紹了自組織網(wǎng)絡(luò)Ad Hoc之OLSR 協(xié)議詳解,需要的朋友可以參考下2023-05-08自組織網(wǎng)絡(luò)Ad Hoc之AODV協(xié)議詳解
這篇文章主要介紹了自組織網(wǎng)絡(luò)Ad Hoc之AODV協(xié)議詳解,需要的朋友可以參考下2023-05-08自組織網(wǎng)絡(luò)Ad Hoc 網(wǎng)絡(luò)基礎(chǔ)知識
自組織網(wǎng)絡(luò)(Ad Hoc)是一種移動通信和計(jì)算機(jī)網(wǎng)絡(luò)相結(jié)合的網(wǎng)絡(luò),是移動計(jì)算機(jī)網(wǎng)絡(luò)的一種,用戶終端可以在網(wǎng)絡(luò)內(nèi)隨意移動而保持通信2023-05-08- 瀏覽器輸入一個URL回車后,會發(fā)生什么呢?這里就為大家分享一下,需要的朋友可以參考下2022-10-19
- 本篇主要是對網(wǎng)絡(luò)協(xié)議進(jìn)行一個歸納總結(jié),方便后續(xù)查閱及復(fù)習(xí),當(dāng)然如有新的認(rèn)知或新的理解,也會持續(xù)更新2022-10-19
- 今日回顧網(wǎng)絡(luò)知識時,發(fā)現(xiàn)自己專門整理過一篇關(guān)于日常生活中常見的網(wǎng)絡(luò)協(xié)議知識以及作用的梳理,特發(fā)此一貼,也當(dāng)給自己鞏固網(wǎng)絡(luò)知識了,如有錯誤,望各大佬指正2022-10-19
- HTTP即超文本傳輸協(xié)議,是一種實(shí)現(xiàn)客戶端和服務(wù)器之間通信的響應(yīng)協(xié)議,它是用作客戶端和服務(wù)器之間的請求,需要的朋友可以參考下2022-10-19