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

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

TCP-三次握手和四次揮手簡單理解

2020-07-30 10:18 作者:朝夕教育  | 我要投稿

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

一、TCP報文

TCP報文格式圖:


上圖中的幾個字段需要重點介紹下:


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

標(biāo)志位:

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

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

原理:

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

第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=x+1),同時自己也發(fā)送一個SYN包(syn=y),即SYN+ACK包,此時服務(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)自己與對方的發(fā)送與接收是正常的」。

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

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

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

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


通俗的說法:

Client:喂!聽的到嗎?

Server:可以,我聽的到。

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

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

因為只有三次才最合適,三次通信是最小值,兩次通信無法確認(rèn)雙方收發(fā)功能的正常,而四次通信則顯得有些冗余。

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


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

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


原理:

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

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

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

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


通俗的說法:

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

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

Server:好了,我也說完了。

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

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


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

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

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





TCP-三次握手和四次揮手簡單理解的評論 (共 條)

分享到微博請遵守國家法律
六枝特区| 陇川县| 霞浦县| 平阴县| 新蔡县| 黑水县| 门头沟区| 林甸县| 临泉县| 铁岭县| 汝南县| 嘉祥县| 吉林市| 宜昌市| 闽侯县| 曲周县| 潍坊市| 台北市| 安平县| 云林县| 邳州市| 余庆县| 福州市| 中卫市| 浦城县| 渭南市| 军事| 古丈县| 黑龙江省| 江山市| 玉田县| 渝中区| 望江县| 垦利县| 高陵县| 湖北省| 皮山县| 鲁山县| 清水河县| 汤原县| 友谊县|