TCP為什么建連需要三次握手毫别,而斷連需要四次揮手娃弓?

一、詳解TCP概念及特點(diǎn)

概念:TCP是傳輸層協(xié)議岛宦,對(duì)應(yīng)OSI網(wǎng)絡(luò)模型的第四層:傳輸層

特點(diǎn):1台丛、基于鏈接(點(diǎn)對(duì)點(diǎn)),也就是傳輸數(shù)據(jù)前需要建立好鏈接砾肺,然后再進(jìn)行傳輸挽霉。

? ? ? ? ? ? 2、雙工傳輸变汪,一旦建立侠坎,雙向通信。

? ? ? ? ? ? 3裙盾、基于字節(jié)流而非報(bào)文实胸,TCP能夠保證接收數(shù)據(jù)的有序性和完整性,因此TCP能夠提供可靠傳輸番官。

????????????4庐完、流量控制

? ??????????????TCP的流量控制由滑動(dòng)窗口來(lái)實(shí)現(xiàn)的,滑動(dòng)窗口控制流量取決于接收方的窗口大小徘熔。

? ? ? ? ? ? ? ? 滑動(dòng)窗口的本質(zhì)是動(dòng)態(tài)緩沖區(qū)门躯,接收端根據(jù)自己的處理能力,再TCP的Header種動(dòng)態(tài)的調(diào)整窗口大小酷师,通過(guò)ACK包通知給發(fā)送端讶凉,發(fā)送端根據(jù)窗口的大小調(diào)整發(fā)送的速度。

? ? ? ? ? ? 5窒升、擁塞控制

? ? ? ? ? ? ? ? TCP考慮到網(wǎng)絡(luò)問(wèn)題可能導(dǎo)致大量重傳等問(wèn)題缀遍,進(jìn)而導(dǎo)致網(wǎng)絡(luò)情況進(jìn)一步惡化,因此TCP協(xié)議還提供了擁塞控制饱须。

? ??????????????擁塞控制主要有四個(gè)算法:慢啟動(dòng)域醇、擁塞避免、快速重傳和快速恢復(fù)蓉媳。


二譬挚、詳解TCP的三次握手建立連接


tcp三次握手過(guò)程

TCP是基于鏈接的,所以在傳輸數(shù)據(jù)前需要新建鏈接酪呻,并且是雙工傳輸减宣,不區(qū)分客戶(hù)端與服務(wù)端,這里把主動(dòng)發(fā)起鏈接的一端叫做Client玩荠,被動(dòng)建立鏈接的一端叫做Server漆腌。

首先建立鏈接前Server端先監(jiān)聽(tīng)端口贼邓,因此初始狀態(tài)是LISTEN狀態(tài),這時(shí)Client端準(zhǔn)備建立連接闷尿,先發(fā)送一個(gè)SYN同步包塑径,發(fā)送完同步包后Client端狀態(tài)變成SYN_SENT狀態(tài)。

Server端接收到SYN后填具,同意建立鏈接统舀,會(huì)向Client端回復(fù)一個(gè)ACK數(shù)據(jù)包。由于TCP是雙工傳輸劳景,Server端也會(huì)同時(shí)向Client端發(fā)送SYN數(shù)據(jù)包誉简,申請(qǐng)Server端向Client端的反向建立鏈接,發(fā)送完ACK和SYN后盟广,Server端狀態(tài)變成SYN_RCVD狀態(tài)闷串。

Client端接收到Server端的ACK后,狀態(tài)就變成了ESTABLISHER狀態(tài)衡蚂,同時(shí)窿克,Client端向Server端發(fā)送ACK,回復(fù)Server端的請(qǐng)求毛甲。Server端收到ACK后年叮,鏈接狀態(tài)就變成ESTABLISHER狀態(tài),此時(shí)建連完成玻募,雙方隨時(shí)可以進(jìn)行數(shù)據(jù)傳輸只损。

注意:1、三次握手是為了建立雙向鏈接七咧,需要記住狀態(tài)的變化跃惫。

? ? ? ? ? ?2、SYN洪水攻擊的原因:Server端收到Client端的SYN同步包后艾栋,回復(fù)ACK和SYN爆存,但是Client不進(jìn)行回復(fù),導(dǎo)致Server端大量鏈接處于SYN_RCVD(半連接)狀態(tài)蝗砾,進(jìn)而影響其他正常請(qǐng)求的連接先较。

? ? ? ? ? ? 解決:a、設(shè)置TCP參數(shù) tcp_synack_retries=0 來(lái)加快半鏈接的回收速度悼粮。

? ? ? ? ? ? ? ? ? ? ? ? ?b闲勺、調(diào)大 tcp_max_syn_backlog 來(lái)應(yīng)對(duì)少量的洪水攻擊,具體調(diào)大多少看內(nèi)存而定扣猫,這個(gè)參數(shù)起輔助作用菜循。


三、詳解TCP四次揮手?jǐn)嚅_(kāi)連接

tcp四次揮手過(guò)程

TCP連接關(guān)閉申尤,雙方都可以先發(fā)起癌幕,這里吧先發(fā)起的一方稱(chēng)為Client衙耕。

首先通信的雙方狀態(tài)都是ESTABLISHER狀態(tài),然后Client端發(fā)起關(guān)閉連接請(qǐng)求勺远,Client端向Server端發(fā)送FIN數(shù)據(jù)包臭杰,表示Client端已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,然后Client端進(jìn)入FIN_WAIT_1狀態(tài)谚中。

Server端接收到FIN后返回ACK數(shù)據(jù)包,就進(jìn)入CLOSE_WAIT狀態(tài)寥枝,此時(shí)Server端屬于半關(guān)閉狀態(tài)宪塔,因?yàn)榇藭r(shí)Client端已經(jīng)不會(huì)再向Server端傳輸數(shù)據(jù)了,但是Server端向Client可能還有數(shù)據(jù)要發(fā)送囊拜。Client端接收到ACK后某筐,進(jìn)入FIN_WAIT_2狀態(tài)。

當(dāng)Server端數(shù)據(jù)發(fā)送完畢后冠跷,Server端會(huì)向Client端發(fā)送FIN數(shù)據(jù)包南誊,表示Server端也沒(méi)有數(shù)據(jù)要傳輸了,這時(shí)Server端進(jìn)入LAST_ACK狀態(tài)蜜托,就等待Client端應(yīng)答就可以關(guān)閉連接了抄囚。

Client端接收到Server端的FIN后回復(fù)ACK,然后進(jìn)入TIME_WAIT狀態(tài)橄务,這個(gè)狀態(tài)下要等待兩倍的MSL也就是最大報(bào)文段生存時(shí)間幔托,來(lái)保證鏈接的可靠關(guān)閉,之后才會(huì)進(jìn)入CLOSED狀態(tài)蜂挪,而Server端接收到ACK后直接進(jìn)入CLOSED狀態(tài)重挑。

注意:1、為什么需要等待2倍的MSL之后才能關(guān)閉連接棠涮?

? ? ? ? ? ? ? ? ? ? a谬哀、要保證TCP雙工鏈接能夠可靠關(guān)閉。

? ? ? ? ? ? ? ? ? ? b严肪、要保證這次鏈接種重復(fù)的數(shù)據(jù)段能夠從網(wǎng)絡(luò)種消失史煎,防止端口被重用的時(shí)候可能會(huì)產(chǎn)生數(shù)據(jù)混淆。

? ? ? ? ? ? ?2诬垂、大量的Socket處于TIME_WAIT狀態(tài)或者CLOSE_WAIT狀態(tài)問(wèn)題解決劲室。

? ? ? ? ? ? ? ? ? ? a、加快TIME_WAIT狀態(tài)的Socket回收開(kāi)啟tcp_tw_reuse和tcp_tw recycle结窘。

? ? ? ? ? ? ? ? ? ? b很洋、大量的Socket處于TIME_WAIT狀態(tài)可能是被動(dòng)關(guān)閉的一方存在代碼bug,沒(méi)有正確關(guān)閉導(dǎo)致的隧枫。


四喉磁、總結(jié)

從這兩個(gè)交互可以看出谓苟,無(wú)論是建連還是斷連,都是從兩個(gè)方向上進(jìn)行的协怒,只不過(guò)建連的時(shí)候Server端的SYN和ACK是合并為一次發(fā)送的涝焙,而斷連時(shí),兩個(gè)方向上的數(shù)據(jù)發(fā)送停止時(shí)間可能不同孕暇,所以不能和并發(fā)送SYN和ACK仑撞。這就是三握四揮的原因。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妖滔,一起剝皮案震驚了整個(gè)濱河市隧哮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌座舍,老刑警劉巖沮翔,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異曲秉,居然都是意外死亡采蚀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)承二,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)榆鼠,“玉大人,你說(shuō)我怎么就攤上這事矢洲¤得撸” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵读虏,是天一觀的道長(zhǎng)责静。 經(jīng)常有香客問(wèn)我,道長(zhǎng)盖桥,這世上最難降的妖魔是什么灾螃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮揩徊,結(jié)果婚禮上腰鬼,老公的妹妹穿的比我還像新娘。我一直安慰自己塑荒,他們只是感情好熄赡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著齿税,像睡著了一般彼硫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天拧篮,我揣著相機(jī)與錄音词渤,去河邊找鬼。 笑死串绩,一個(gè)胖子當(dāng)著我的面吹牛缺虐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播礁凡,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼高氮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了顷牌?” 一聲冷哼從身側(cè)響起纫溃,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎韧掩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窖铡,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疗锐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了费彼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滑臊。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖箍铲,靈堂內(nèi)的尸體忽然破棺而出雇卷,到底是詐尸還是另有隱情,我是刑警寧澤颠猴,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布关划,位于F島的核電站,受9級(jí)特大地震影響翘瓮,放射性物質(zhì)發(fā)生泄漏贮折。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一资盅、第九天 我趴在偏房一處隱蔽的房頂上張望调榄。 院中可真熱鬧,春花似錦呵扛、人聲如沸每庆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缤灵。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凤价,已是汗流浹背鸽斟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留利诺,地道東北人富蓄。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像慢逾,于是被迫代替她去往敵國(guó)和親立倍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容