最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

圖文玩轉(zhuǎn)TCP三次握手與四次揮手(看完徹底悟了)

2022-04-26 15:51 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

1、三次握手



2、兩次握手(情況1)


3、兩次握手(情況2)


  • OK,下面正經(jīng)地來回答下這個(gè)問題,要搞清楚這個(gè)問題,首先得了解TCP究竟是如何保證可靠傳輸?shù)摹?/p>


  • PS:TCP協(xié)議中,主動(dòng)發(fā)起請(qǐng)求的一端稱為『客戶端』,被動(dòng)連接的一端稱為『服務(wù)端』。不管是客戶端還是服務(wù)端,TCP連接建立完后都能發(fā)送和接收數(shù)據(jù)。

  • 起初,服務(wù)器和客戶端都為CLOSED狀態(tài)。在通信開始前,雙方都得創(chuàng)建各自的傳輸控制塊(TCB)。服務(wù)器創(chuàng)建完TCB后便進(jìn)入LISTEN狀態(tài),此時(shí)準(zhǔn)備接收客戶端發(fā)來的連接請(qǐng)求。

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!??!前100名進(jìn)群領(lǐng)取,額外贈(zèng)送一份價(jià)值699的內(nèi)核資料包(含視頻教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)?



  • 客戶端向服務(wù)端發(fā)送連接請(qǐng)求報(bào)文段。該報(bào)文段的頭部中SYN=1,ACK=0,seq=x。請(qǐng)求發(fā)送后,客戶端便進(jìn)入SYN-SENT狀態(tài)。

  1. PS1:SYN=1,ACK=0表示該報(bào)文段為連接請(qǐng)求報(bào)文。

  2. PS2:x為本次TCP通信的字節(jié)流的初始序號(hào)。TCP規(guī)定:SYN=1的報(bào)文段不能有數(shù)據(jù)部分,但要消耗掉一個(gè)序號(hào)。

第二次握手

  • 服務(wù)端收到連接請(qǐng)求報(bào)文段后,如果同意連接,則會(huì)發(fā)送一個(gè)應(yīng)答:SYN=1,ACK=1,seq=y,ack=x+1。該應(yīng)答發(fā)送完成后便進(jìn)入SYN-RCVD狀態(tài)。

  1. PS1:SYN=1,ACK=1表示該報(bào)文段為連接同意的應(yīng)答報(bào)文。

  2. PS2:seq=y表示服務(wù)端作為發(fā)送者時(shí),發(fā)送字節(jié)流的初始序號(hào)。

  3. PS3:ack=x+1表示服務(wù)端希望下一個(gè)數(shù)據(jù)報(bào)發(fā)送序號(hào)從x+1開始的字節(jié)。

第三次握手

  • 當(dāng)客戶端收到連接同意的應(yīng)答后,還要向服務(wù)端發(fā)送一個(gè)確認(rèn)報(bào)文段,表示:服務(wù)端發(fā)來的連接同意應(yīng)答已經(jīng)成功收到。該報(bào)文段的頭部為:ACK=1,seq=x+1,ack=y+1??蛻舳税l(fā)完這個(gè)報(bào)文段后便進(jìn)入ESTABLISHED狀態(tài),服務(wù)端收到這個(gè)應(yīng)答后也進(jìn)入ESTABLISHED狀態(tài),此時(shí)連接的建立完成!

4、為什么連接建立需要三次握手,而不是兩次握手?

  • 防止失效的連接請(qǐng)求報(bào)文段被服務(wù)端接收,從而產(chǎn)生錯(cuò)誤。

  • PS:失效的連接請(qǐng)求:若客戶端向服務(wù)端發(fā)送的連接請(qǐng)求丟失,客戶端等待應(yīng)答超時(shí)后就會(huì)再次發(fā)送連接請(qǐng)求,此時(shí),上一個(gè)連接請(qǐng)求就是『失效的』。

  • 若建立連接只需兩次握手,客戶端并沒有太大的變化,仍然需要獲得服務(wù)端的應(yīng)答后才進(jìn)入ESTABLISHED狀態(tài),而服務(wù)端在收到連接請(qǐng)求后就進(jìn)入ESTABLISHED狀態(tài)。

  • 此時(shí)如果網(wǎng)絡(luò)擁塞,客戶端發(fā)送的連接請(qǐng)求遲遲到不了服務(wù)端,客戶端便超時(shí)重發(fā)請(qǐng)求,如果服務(wù)端正確接收并確認(rèn)應(yīng)答,雙方便開始通信,通信結(jié)束后釋放連接。此時(shí),如果那個(gè)失效的連接請(qǐng)求抵達(dá)了服務(wù)端,由于只有兩次握手,服務(wù)端收到請(qǐng)求就會(huì)進(jìn)入ESTABLISHED狀態(tài),等待發(fā)送數(shù)據(jù)或主動(dòng)發(fā)送數(shù)據(jù)。但此時(shí)的客戶端早已進(jìn)入CLOSED狀態(tài),服務(wù)端將會(huì)一直等待下去,這樣浪費(fèi)服務(wù)端連接資源。

5、TCP四次揮手


  • TCP連接的釋放一共需要四步,因此稱為『四次揮手』。

  • 我們知道,TCP連接是雙向的,因此在四次揮手中,前兩次揮手用于斷開一個(gè)方向的連接,后兩次揮手用于斷開另一方向的連接。

第一次揮手

  • 若A認(rèn)為數(shù)據(jù)發(fā)送完成,則它需要向B發(fā)送連接釋放請(qǐng)求。該請(qǐng)求只有報(bào)文頭,頭中攜帶的主要參數(shù)為:FIN=1,seq=u。此時(shí),A將進(jìn)入FIN-WAIT-1狀態(tài)。

  1. PS1:FIN=1表示該報(bào)文段是一個(gè)連接釋放請(qǐng)求。

  2. PS2:seq=u,u-1是A向B發(fā)送的最后一個(gè)字節(jié)的序號(hào)。


第二次揮手

  • B收到連接釋放請(qǐng)求后,會(huì)通知相應(yīng)的應(yīng)用程序,告訴它A向B這個(gè)方向的連接已經(jīng)釋放。此時(shí)B進(jìn)入CLOSE-WAIT狀態(tài),并向A發(fā)送連接釋放的應(yīng)答,其報(bào)文頭包含:ACK=1,seq=v,ack=u+1。

  1. PS1:ACK=1:除TCP連接請(qǐng)求報(bào)文段以外,TCP通信過程中所有數(shù)據(jù)報(bào)的ACK都為1,表示應(yīng)答。

  2. PS2:seq=v,v-1是B向A發(fā)送的最后一個(gè)字節(jié)的序號(hào)。

  3. PS3:ack=u+1表示希望收到從第u+1個(gè)字節(jié)開始的報(bào)文段,并且已經(jīng)成功接收了前u個(gè)字節(jié)。

  • A收到該應(yīng)答,進(jìn)入FIN-WAIT-2狀態(tài),等待B發(fā)送連接釋放請(qǐng)求。

  • 第二次揮手完成后,A到B方向的連接已經(jīng)釋放,B不會(huì)再接收數(shù)據(jù),A也不會(huì)再發(fā)送數(shù)據(jù)。但B到A方向的連接仍然存在,B可以繼續(xù)向A發(fā)送數(shù)據(jù)。

第三次揮手

  • 當(dāng)B向A發(fā)完所有數(shù)據(jù)后,向A發(fā)送連接釋放請(qǐng)求,請(qǐng)求頭:FIN=1,ACK=1,seq=w,ack=u+1。B便進(jìn)入LAST-ACK狀態(tài)。

第四次揮手

  • A收到釋放請(qǐng)求后,向B發(fā)送確認(rèn)應(yīng)答,此時(shí)A進(jìn)入TIME-WAIT狀態(tài)。該狀態(tài)會(huì)持續(xù)2MSL時(shí)間,若該時(shí)間段內(nèi)沒有B的重發(fā)請(qǐng)求的話,就進(jìn)入CLOSED狀態(tài),撤銷TCB。當(dāng)B收到確認(rèn)應(yīng)答后,也便進(jìn)入CLOSED狀態(tài),撤銷TCB。

6、為什么 A 要先進(jìn)入TIME-WAIT狀態(tài),等待2MSL時(shí)間后才進(jìn)入CLOSED狀態(tài)

  • 為了保證B能收到A的確認(rèn)應(yīng)答。若A發(fā)完確認(rèn)應(yīng)答后直接進(jìn)入CLOSED狀態(tài),那么如果該應(yīng)答丟失,B等待超時(shí)后就會(huì)重新發(fā)送連接釋放請(qǐng)求,但此時(shí)A已經(jīng)關(guān)閉了,不會(huì)作出任何響應(yīng),因此B永遠(yuǎn)無法正常關(guān)閉。


圖文玩轉(zhuǎn)TCP三次握手與四次揮手(看完徹底悟了)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
广水市| 鲁山县| 柳江县| 鹿邑县| 弋阳县| 金沙县| 慈利县| 临汾市| 大庆市| 银川市| 师宗县| 永新县| 鄱阳县| 涞水县| 芦山县| 广南县| 泰兴市| 伊春市| 黄石市| 深泽县| 伊通| 吉安县| 南丹县| 镶黄旗| 襄汾县| 桐乡市| 通州区| 从江县| 大兴区| 乡城县| 城步| 辉南县| 西贡区| 砀山县| 荃湾区| 松原市| 英超| 泌阳县| 五指山市| 图木舒克市| 米泉市|