tcp粗讀

TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的锉罐、可靠的淌山、基于字節(jié)流的傳輸層通信協(xié)議屯碴。

tcp頭部關(guān)鍵字
  • SYN:SYN(SYNchronization)在連接建立時用來同步序號茅逮。當SYN=1而ACK=0時巧涧,表明這是一個連接請求報文薯蝎。對方若同意建立連接,則應(yīng)在響應(yīng)報文中使SYN=1和ACK=1. 因此, SYN置1就表示這是一個連接請求或連接接受報文谤绳;
  • ack:此標志表示應(yīng)答域有效占锯,就是說前面所說的TCP應(yīng)答號將會包含在TCP數(shù)據(jù)包中;有兩個取值:0和1, 為1的時候表示應(yīng)答域有效缩筛,反之為0;
  • seq:Sequence Number:用來標識從TCP發(fā)端向TCP收端發(fā)送的數(shù)據(jù)字節(jié)流消略,它表示在這個報文段中的的第一個數(shù)據(jù) 字節(jié)在數(shù)據(jù)流中的序號;主要用來解決網(wǎng)絡(luò)報亂序的問題;
  • FIN: 表示發(fā)送端已經(jīng)達到數(shù)據(jù)末尾,也就是說雙方的數(shù)據(jù)傳送完成瞎抛,沒有數(shù)據(jù)可以傳送了艺演,發(fā)送FIN標志 位的TCP數(shù)據(jù)包后,連接將被斷開桐臊。這個標志的數(shù)據(jù)包也經(jīng)常被用于進行端口掃描胎撤。
三次握手:

客戶端A------服務(wù)端B

  • 第一次握手:
    A-[SYN|seq]->B
    客戶端向服務(wù)端發(fā)送syn標記的包,通知服務(wù)端要建立連接断凶;
    此過程中服務(wù)端和客戶端均不能確定自己是否是ok的伤提;

  • 第二次握手:
    B-[SYN|ACK|seq]->A
    服務(wù)端向客戶端發(fā)送確認包SYN/ACK,表示收到前邊建立連接的請求懒浮;
    此過程中客戶端A收到服務(wù)端的確認包飘弧,說明客戶端接收和發(fā)送的ok的识藤;但此時服務(wù)端并不知道自己的情況砚著;

  • 第三次握手:
    A-[ack]->B
    客戶端向服務(wù)端發(fā)送確認包,表示收到服務(wù)端的確認請求痴昧;
    此過程中服務(wù)端收到客戶端發(fā)來的確認包稽穆,服務(wù)端自己的接收和發(fā)送都是ok的,雙方開始通信赶撰;三次握手完成舌镶。

客戶端收到服務(wù)器的SYN+ACK報文段柱彻。然后將Acknowledgment Number設(shè)置為y+1,向服務(wù)器發(fā)送ACK報文段餐胀,這個報文段發(fā)送完畢以后哟楷,客戶端和服務(wù)器端都進入ESTABLISHED狀態(tài),完成TCP三次握手否灾。
完成了三次握手卖擅,客戶端和服務(wù)器端就可以開始傳送數(shù)據(jù)。

為什么一定要三次握手呢墨技?

  • 保證兩端都能清楚的知道自身的收發(fā)情況惩阶,兩次握手的話客戶端雖然已經(jīng)知道自己的收發(fā)情況,并且也知道服務(wù)端的收發(fā)情況扣汪,但是服務(wù)端并不知道断楷,所以需要第三次握手;
  • 防止已失效的連接請求報文段突然又傳送到了服務(wù)端崭别,因而產(chǎn)生錯誤冬筒;
    例如:
  • 客服端發(fā)出的第一個連接請求報文段并沒有丟失,而是在某個網(wǎng)絡(luò)結(jié)點長時間的滯留了紊遵,以致延誤到連接釋放以后的某個時間才到達服務(wù)端账千。
  • 本來這是一個早已失效的報文段茴她。但服務(wù)端收到此失效的連接請求報文段后椒功,就誤認為是客戶端再次發(fā)出的一個新的連接請求峰尝。于是就向客戶端發(fā)出確認報文段赃阀,同意建立連接鞠呈。
  • 假設(shè)不采用“三次握手”娃豹,那么只要服務(wù)端發(fā)出確認山析,新的連接就建立了奶是。由于現(xiàn)在客戶端并沒有發(fā)出建立連接的請求瑞佩,因此不會理睬服務(wù)端的確認聚磺,也不會向服務(wù)端發(fā)送數(shù)據(jù)。
  • 但服務(wù)端卻以為新的運輸連接已經(jīng)建立炬丸,并一直等待客戶端發(fā)來數(shù)據(jù)瘫寝。這樣,服務(wù)端的很多資源就白白浪費掉了稠炬。
  • 采用“三次握手”的辦法可以防止上述現(xiàn)象發(fā)生焕阿。例如剛才那種情況,客戶端不會服務(wù)端的確認發(fā)出確認首启。服務(wù)端由于收不到確認暮屡,就知道客戶端并沒有要求建立連接。


    tcp.jpg
四次揮手:

客戶端A------服務(wù)端B

  • 第一次揮手:
    A-[FIN|seq|ack]->B
    客戶端已經(jīng)沒有數(shù)據(jù)向服務(wù)端發(fā)送毅桃,并且向客服端發(fā)起結(jié)束請求褒纲;此時客戶端進入fin_wait_1階段
    fin_wait_1:第一次等待結(jié)束態(tài)准夷;標明客戶端主動發(fā)起結(jié)束連接的請求

  • 第二次揮手:
    B-[ack]->A
    服務(wù)端收到客戶端結(jié)束的請求(此時可能服務(wù)端還有數(shù)據(jù)發(fā)送給客戶端),不管當前狀態(tài)如何莺掠,立馬向客戶端發(fā)送已經(jīng)收到客戶端結(jié)束請求的確認信息衫嵌;
    注意:如果不發(fā)送的話,客戶端長時間收不到確認消息彻秆,會認為之前發(fā)送失敗渐扮,導(dǎo)致重新發(fā)送結(jié)束請求;
    此時客戶端收到服務(wù)端的確認信息進入fin_wait_2階段
    fin_wait_2:第二次等待結(jié)束態(tài)掖棉;標明服務(wù)端已經(jīng)接收到客戶端的結(jié)束請求墓律,并且客戶端已經(jīng)收到確認消息

  • 第三次揮手:
    B-[FIN|seq|ack]->A
    服務(wù)端向客戶端發(fā)送結(jié)束連接的請求,表示服務(wù)端已經(jīng)沒有數(shù)據(jù)向客戶端發(fā)送幔亥,可以結(jié)束請求耻讽;而服務(wù)端則進入close_wait階段
    close_wait: 等待關(guān)閉態(tài);服務(wù)端發(fā)起結(jié)束連接請求帕棉,等待客戶端的確認信息

  • 第四次揮手:
    A-[ack]->B
    客戶端收到服務(wù)端結(jié)束連接請求针肥,向服務(wù)端發(fā)出確認關(guān)閉的請求,并進入time_wait階段香伴;
    服務(wù)端接收到請求則關(guān)閉連接慰枕;
    客戶端等待2MSL后依然沒有收到回復(fù),說明服務(wù)端已經(jīng)正常關(guān)閉即纲,此時客戶端自己關(guān)閉連接具帮;
    time_wait: 表示收到了對方的FIN報文,并發(fā)送出了ACK報文低斋,就等2MSL后即可回到CLOSED可用狀態(tài)了蜂厅。
    注意:如果fin_wait_1狀態(tài)下,收到了對方同時帶FIN標志和ACK標志的報文時膊畴,可以直接進入到time_wait狀態(tài)掘猿,而無須經(jīng)過fin_wait_2狀態(tài)
    此時,四次揮手結(jié)束唇跨。

參考:
關(guān)于TCP協(xié)議稠通,我想你應(yīng)該懂了!
通俗大白話來理解TCP協(xié)議的三次握手和四次分手
TCP協(xié)議要點和難點全解
TCP三次握手連接及seq和ack號的正確理解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市买猖,隨后出現(xiàn)的幾起案子改橘,更是在濱河造成了極大的恐慌,老刑警劉巖政勃,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唧龄,死亡現(xiàn)場離奇詭異兼砖,居然都是意外死亡奸远,警方通過查閱死者的電腦和手機既棺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懒叛,“玉大人丸冕,你說我怎么就攤上這事⊙” “怎么了胖烛?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诅迷。 經(jīng)常有香客問我佩番,道長,這世上最難降的妖魔是什么罢杉? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任趟畏,我火速辦了婚禮,結(jié)果婚禮上滩租,老公的妹妹穿的比我還像新娘赋秀。我一直安慰自己,他們只是感情好律想,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布猎莲。 她就那樣靜靜地躺著,像睡著了一般技即。 火紅的嫁衣襯著肌膚如雪著洼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天而叼,我揣著相機與錄音郭脂,去河邊找鬼。 笑死澈歉,一個胖子當著我的面吹牛展鸡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埃难,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莹弊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涡尘?” 一聲冷哼從身側(cè)響起忍弛,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎考抄,沒想到半個月后细疚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡川梅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年疯兼,在試婚紗的時候發(fā)現(xiàn)自己被綠了然遏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吧彪,死狀恐怖待侵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姨裸,我是刑警寧澤秧倾,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站傀缩,受9級特大地震影響那先,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赡艰,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一胃榕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瞄摊,春花似錦勋又、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惯驼,卻和暖如春蹲嚣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祟牲。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工隙畜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人说贝。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓议惰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乡恕。 傳聞我的和親對象是個殘疾皇子言询,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

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