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

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

TCP-三次握手和四次揮手簡(jiǎn)單理解

2020-07-30 10:15 作者:微軟MVP-Eleven  | 我要投稿

背景:TCP,即傳輸控制協(xié)議,是一種面向連接的可靠的,基于字節(jié)流的傳輸層協(xié)議。作用是在不可靠的互聯(lián)網(wǎng)絡(luò)上提供一個(gè)可靠的端到端的字節(jié)流服務(wù),為了準(zhǔn)確無誤的將數(shù)據(jù)送達(dá)目的地,TCP協(xié)議采納三次握手策略。

一、TCP報(bào)文

TCP報(bào)文格式圖:

上圖中的幾個(gè)字段需要重點(diǎn)介紹下:

PS:ACK、SYN和FIN這些大寫的單詞表示標(biāo)志位,其值要么是1,要么是0;ack、seq小寫的單詞表示序號(hào)。

標(biāo)志位:

注意:不要將確認(rèn)序號(hào)ack與標(biāo)志位中的ACK搞混了。

二、三次握手(Three-Way Handshake)

原理:

第一次握手:建立連接是,客戶端發(fā)送syn包(syn=x)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn);SYN:同步序列號(hào)。

第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=x+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=y),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)。

第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手。

為什么要三次握手?

三次握手的最主要目的是「雙方確認(rèn)自己與對(duì)方的發(fā)送與接收是正常的」。

第一次握手:Client什么都不能確認(rèn);Server確認(rèn)了對(duì)方發(fā)送正常。

第二次握手:Client確認(rèn)了:自己發(fā)送、接收正常,對(duì)方發(fā)送、接收正常;Server確認(rèn)了:自己接受正常,對(duì)方發(fā)送正常。

第三次握手:Client確認(rèn)了:自己發(fā)送、接受正常,對(duì)方發(fā)送,接受正常;Server確認(rèn)了:自己發(fā)送了、接受正常,對(duì)方發(fā)送、接受正常。

所以三次握手就能確認(rèn)雙方收發(fā)功能是否正常。


通俗的說法:

Client:喂!聽的到嗎?

Server:可以,我聽的到。

Client:好的,我們都能互相聽的對(duì)方的話,可以開始通信了。

三次握手為什么不用兩次,或者四次?

因?yàn)橹挥腥尾抛詈线m,三次通信是最小值,兩次通信無法確認(rèn)雙方收發(fā)功能的正常,而四次通信則顯得有些冗余。

三、四次揮手(Four-Way Wavehand)


意義:所謂四次揮手,即終止TCP連接,就是指斷開一個(gè)TCP連接時(shí),需要客戶端和服務(wù)的總共發(fā)送4個(gè)包以確認(rèn)連接到斷開。在socket編程中,這一過程由客戶端或服務(wù)的任意一方執(zhí)行close來觸發(fā),流程如下圖所示:

由于TCP連接時(shí)是全雙工的,因此,每個(gè)方向都必須要單獨(dú)進(jìn)行關(guān)閉,這一原則是主動(dòng)方完成數(shù)據(jù)發(fā)送任務(wù)后,發(fā)送一個(gè)FIN來終止主動(dòng)方發(fā)送數(shù)據(jù)的連接,收到一個(gè)FIN只是意味著這一方向上沒有數(shù)據(jù)流動(dòng)來,即不會(huì)再收到主動(dòng)方的數(shù)據(jù),但是在這個(gè)TCP連接上被動(dòng)方仍然能夠發(fā)送數(shù)據(jù),直到被動(dòng)方也發(fā)送了FIN。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方則執(zhí)行被動(dòng)關(guān)閉。


原理:

第一次揮手:Client發(fā)送一個(gè)FIN,用來關(guān)閉CIient到Server的數(shù)據(jù)傳輸,Client進(jìn)入FIN_WAIT_1狀態(tài)。

第二次揮手:Server收到FIN后,發(fā)送一個(gè)ACK給Client,確認(rèn)序號(hào)為收到,序號(hào)+1(與SYN相同,一個(gè)FIN占用一個(gè)序號(hào)),Server進(jìn)入CLOSE_WAIT狀態(tài)。

第三次揮手:Server發(fā)送一個(gè)FIN,用來關(guān)閉Server到Client的數(shù)據(jù)傳輸,Server進(jìn)入LAST_ACK狀態(tài)。

第四次揮手:Client收到FIN后,Client進(jìn)入TIME_WAIT狀態(tài),接著發(fā)送一個(gè)ACK給Server,確認(rèn)序號(hào)為收到,序號(hào)+1,Server進(jìn)入CLOSED狀態(tài),完成四次揮手。


通俗的說法:

Client:我已經(jīng)說完了。

Server:我收到了,等等我,我還沒說完。

Server:好了,我也說完了。

Client:好的,那我們通信結(jié)束。

上面是一方主動(dòng)關(guān)閉,另一方被動(dòng)關(guān)閉的情況,實(shí)際中還會(huì)出現(xiàn)同時(shí)發(fā)起關(guān)閉的情況,如下圖所示:

為什么建立連接是三次握手,而關(guān)閉連接卻是四次揮手呢?

這是因?yàn)?strong>服務(wù)端在LISTEN狀態(tài)下,收到建立連接請(qǐng)求的SYN報(bào)文后,把ACK和SYN放在一個(gè)報(bào)文里發(fā)送給客戶端。而關(guān)閉連接是,當(dāng)收到對(duì)方的FIN報(bào)文是,僅僅表示對(duì)方不再發(fā)送數(shù)據(jù)了,但是還能接收數(shù)據(jù),已方也未必全部數(shù)據(jù)都發(fā)送給對(duì)方了,所以已方可以立即close,也可以發(fā)送一些數(shù)據(jù)給對(duì)方后,再發(fā)送FIN報(bào)文給對(duì)方來表示同意現(xiàn)在關(guān)閉連接,因此,已方ACK和FIN一般都會(huì)分開發(fā)送。

原文鏈接:https://www.cnblogs.com/Monste/p/13396333.html#/

TCP-三次握手和四次揮手簡(jiǎn)單理解的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
桃源县| 石屏县| 云霄县| 南充市| 广安市| 固阳县| 东丰县| 皮山县| 河北区| 绍兴市| 浮山县| 东明县| 姚安县| 额尔古纳市| 乌审旗| 嵊泗县| 屯留县| 商水县| 正安县| 延安市| 房山区| 徐州市| 新龙县| 白河县| 荔浦县| 潞西市| 蓬莱市| 仁怀市| 长泰县| 浙江省| 淮阳县| 安远县| 神木县| 无棣县| 尚志市| 中牟县| 襄汾县| 成武县| 大同县| 沅江市| 普兰店市|