tcp三次握手以及四次揮手

image.png

三次握手

三次握手和兩次握手相比,優(yōu)勢在哪里?

第一步: 他要發(fā)送一條建立連接的消息告訴對方咱兩要通信了
第二步: 對方收到這個(gè)消息后,要回復(fù)他一個(gè)確認(rèn)消息
上面兩步(兩次握手)做完了,兩人才能夠通信。

如果a發(fā)給b的請求信息。被阻塞,a收不到b的回信,會(huì)再次發(fā)送b一個(gè)請求通信的信息。

某一個(gè)時(shí)間段過后。b收到了a那個(gè)阻塞的信息。
b發(fā)送了給a一個(gè)確認(rèn)的信息
由于此時(shí),a并沒有連接請求。所以,a并不會(huì)給b通信。
但是b會(huì)一直等待a的信息。。這回浪費(fèi)cpu資源。
所以tcp連接中三次握手有其必要性。

四次揮手

1.客戶端向服務(wù)器發(fā)送連接釋放報(bào)文。
2.服務(wù)器接收到后,立刻回一個(gè)接收到的請求
3.等服務(wù)器發(fā)送完所有數(shù)據(jù)后,再向服務(wù)器發(fā)送連接釋放報(bào)文
4.客戶端收到后,發(fā)送最后確認(rèn),服務(wù)器收到后,進(jìn)入關(guān)閉狀態(tài)。

問題1】為什么連接的時(shí)候是三次握手,關(guān)閉的時(shí)候卻是四次握手?

答:因?yàn)楫?dāng)Server端收到Client端的SYN連接請求報(bào)文后,可以直接發(fā)送
SYN+ACK報(bào)文。其中ACK報(bào)文是用來應(yīng)答的,SYN報(bào)文是用來同步的。
但是關(guān)閉連接時(shí),當(dāng)Server端收到FIN報(bào)文時(shí),很可能并不會(huì)立即關(guān)閉
SOCKET,所以只能先回復(fù)一個(gè)ACK報(bào)文,告訴Client端,"你發(fā)的FIN報(bào)
文我收到了"。只有等到我Server端所有的報(bào)文都發(fā)送完了,我才能發(fā)送
FIN報(bào)文,因此不能一起發(fā)送。故需要四步握手。

【問題2】為什么TIME_WAIT狀態(tài)需要經(jīng)過2MSL(最大報(bào)文段生存時(shí)間)才能返回到CLOSE狀態(tài)?

答:雖然按道理,四個(gè)報(bào)文都發(fā)送完畢,我們可以直接進(jìn)入CLOSE狀態(tài)
了,但是我們必須假象網(wǎng)絡(luò)是不可靠的,有可以最后一個(gè)ACK丟失。所以
TIME_WAIT狀態(tài)就是用來重發(fā)可能丟失的ACK報(bào)文。在Client發(fā)送出最后
的ACK回復(fù),但該ACK可能丟失。Server如果沒有收到ACK,超時(shí)后將會(huì)重發(fā)FIN片段。所以Client不能立即關(guān)閉,它必須確認(rèn)Server接收到了該
ACK。 
 Client會(huì)在發(fā)送出ACK之后進(jìn)入到TIME_WAIT狀態(tài)。Client會(huì)設(shè)置
一個(gè)計(jì)時(shí)器,等待2MSL的時(shí)間。如果在該時(shí)間內(nèi)再次收到FIN,那么
Client會(huì)重發(fā)ACK并再次等待2MSL。所謂的2MSL是兩倍的MSL
(Maximum Segment Lifetime)。MSL指一個(gè)片段在網(wǎng)絡(luò)中最大的存活時(shí)
間,2MSL就是一個(gè)發(fā)送和一個(gè)回復(fù)所需的最大時(shí)間。如果直到2MSL,
Client都沒有再次收到FIN,那么Client推斷ACK已經(jīng)被成功接收,則結(jié)束
TCP連接。

【問題4】如果已經(jīng)建立了連接,但是客戶端突然出現(xiàn)故障了怎么辦?

TCP還設(shè)有一個(gè)?;钣?jì)時(shí)器,顯然,客戶端如果出現(xiàn)故障,服務(wù)器不能一
直等下去,白白浪費(fèi)資源。服務(wù)器每收到一次客戶端的請求后都會(huì)重新復(fù)
位這個(gè)計(jì)時(shí)器,時(shí)間通常是設(shè)置為2小時(shí),若兩小時(shí)還沒有收到客戶端的
任何數(shù)據(jù),服務(wù)器就會(huì)發(fā)送一個(gè)探測報(bào)文段,以后每隔75分鐘發(fā)送一次。
若一連發(fā)送10個(gè)探測報(bào)文仍然沒反應(yīng),服務(wù)器就認(rèn)為客戶端出了故障,接
著就關(guān)閉連接。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Client 與 Server 連接前的三次握手過程: 第一次握手,A 向 B 發(fā)送信息,B 收到信息后可以確認(rèn)自...
    JinyaMax閱讀 2,353評(píng)論 0 0
  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,518評(píng)論 0 13
  • 在tcp/ip協(xié)議中,tcp協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。 第一次握手:建立連接時(shí),客戶發(fā)送S...
    hemingkung閱讀 306評(píng)論 0 0
  • 建立連接協(xié)議(三次握手) (1)客戶端發(fā)送一個(gè)帶SYN標(biāo)志的TCP報(bào)文到服務(wù)器。這是三次握手過程中的報(bào)文1。(2)...
    jy__Lu閱讀 632評(píng)論 0 7
  • 1、TCP狀態(tài)linux查看tcp的狀態(tài)命令:1)、netstat -nat 查看TCP各個(gè)狀態(tài)的數(shù)量2)、lso...
    北辰青閱讀 9,714評(píng)論 0 11

友情鏈接更多精彩內(nèi)容