TCP協(xié)議

TCP的可靠性

TCP提供了一種面向連接的、可靠的字節(jié)流服務锰瘸。TCP的可靠性主要有下面方式所保證的眨补。

  1. 應用數據被分割成TCP認為最適合發(fā)送的數據快甘晤。而UDP的數據報長度將保持不變塞弊。由TCP傳遞給IP的信息單位稱為報文段诀黍。(可靠性體現(xiàn)在哪了咒精?)
  2. 當TCP發(fā)出一個段后,它將啟動一個定時器,等待目的段確認收到這個段后。如果不能及時收到一個確認,將重發(fā)這個報文段。
  3. 當TCP收到來自TCP連接另一端的數據,它將發(fā)送一個確認。這個確認不是立即發(fā)送,通常推遲幾分之一秒急迂。(為什么阴幌?)
  4. TCP將保持它首部和數據的檢驗和(首部正常20個字節(jié)懒闷,最多60個字節(jié))玩焰。這是一個端到端的檢驗和蒿赢,目的是檢測數據在傳輸過程中的變化皂冰。如果收到的段的檢驗和有差錯舶胀。TCP將丟棄這個報文段和不確認收到轩端。(希望發(fā)送端超時和重傳) Q:為何不去糾正而是選擇重傳弥臼?
  5. TCP報文段傳輸中可能會失序,如有必要的話兆旬,TCP會對收到的失序數據重新排列后交給應用層脚祟。
  6. TCP如果接受到重復的數據后铭乾,會丟棄它笛质。
  7. TCP還能提供流量控制,TCP連接的每一方都有一個固定大小的緩沖空間潭袱。TCP只允許另一端最多發(fā)送接受端緩沖區(qū)大小的數據。這將防止發(fā)送端發(fā)的快而接受端接受的慢而造成的緩沖區(qū)溢出。

三次握手

三次握手圖片.png

當一端建立連接而發(fā)送它的SYN時,會為連接選擇一個初始序號。ISN會隨著時間而變化医咨,因此每個連接會有不同的ISN角虫。ISN可以看做一個32位的計數器枫虏,每4ms加1。這樣可以防止在網絡中延遲的分組以后又被傳送妓忍,從而導致某個連接的一方對它作出錯誤的解釋。

為什么TCP建立連接是要三次握手凌停?而不是兩次或者四次拉队?

很多面試官喜歡問這個問題事哭。為什么一定要三次?因為三次是建立一個可靠連接的最少所需次數干旧。為什么兩次不行呢舔稀?
TCP可靠傳輸的精髓在哪里?就在與建立連接的雙方最開始需要將自己的初始序號告知了對方事富,并確保對方一定收到。以后發(fā)送和ACK確認都是在最開始的初始序號上增加,每發(fā)送一個字節(jié)列肢,序號增加1。如果只有兩次握手的話费封,我們來看看會發(fā)生什么研叫。
第一次握手:執(zhí)行主動連接的客戶端發(fā)送自己的SYN,ISN序號過去。
第二次握手:服務端收到后湖员,知道客戶端的初始序號。發(fā)送ACK回應盏阶,同時發(fā)送自己的SYN , ISN序號蒋腮。
到此兩次握手結束。此時只有服務端可以確保收到客戶端的初始ISN绢慢,而客戶端并不一定收到服務端的初始ISN胰舆。如果服務端一方向客戶端一方發(fā)送數據了怎么辦够话?由于不知道服務端的初始ISN,客戶端就無法對收到的數據ACK確認,就不能進行數據的傳輸了。
那為什么不能四次握手呢?因為不需要磺送,四次握手中的第二馅袁,第三次可以合并成一次化漆。
那為什么要四次揮手呢?四次揮手的二三兩次難道不能合并嗎页徐?因為TCP支持半關閉苏潜。當一端發(fā)送FIN后執(zhí)行關閉后,另一端沒有關閉变勇,那么執(zhí)行關閉的一方依然可以接受到數據恤左,要牢記TCP是全雙工的。如果只有三次揮手,那么一方FIN后飞袋,另一方發(fā)送FIN戳气,ACK,兩邊就都關閉了巧鸭。就無法支持半關閉了瓶您。

四次揮手

四次揮手.png
TIME_WAIT等待狀態(tài)

TIME_WAIT要等待一個2MSL時間,MSL是任何報文段被丟棄到網絡中最大生存時間纲仍。這個時間是有限的览闰,因為TCP報文段是以IP數據段在網絡中傳輸的,而IP有限制其生存的時間的TTL字段巷折。通常MSL為30秒,1分鐘或者2分鐘崖咨。
為什么需要等待2MSL呢锻拘?因為最后一個ACK可能會在網絡傳輸中丟失。如果發(fā)送了最后一個MSL就立刻關閉連接的話击蹲,此時若ACK丟失署拟,那么服務端將會一直超時重傳而一直得不到回應。有了等待2MSL時間歌豺,如果最后一個ACK丟失推穷,服務器第一次超時重傳,這時客戶端由于還沒有關閉类咧,就能發(fā)送ACK回應了馒铃。

TCP的狀態(tài)變遷圖

TCP狀態(tài)轉換圖.jpg

滑動窗口

慢啟動

擁塞避免算法

快速重傳與快速恢復算法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市痕惋,隨后出現(xiàn)的幾起案子区宇,更是在濱河造成了極大的恐慌,老刑警劉巖值戳,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件议谷,死亡現(xiàn)場離奇詭異,居然都是意外死亡堕虹,警方通過查閱死者的電腦和手機卧晓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赴捞,“玉大人逼裆,你說我怎么就攤上這事∶牛” “怎么了波附?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我掸屡,道長封寞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任仅财,我火速辦了婚禮狈究,結果婚禮上,老公的妹妹穿的比我還像新娘盏求。我一直安慰自己抖锥,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布碎罚。 她就那樣靜靜地躺著磅废,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荆烈。 梳的紋絲不亂的頭發(fā)上拯勉,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音憔购,去河邊找鬼宫峦。 笑死,一個胖子當著我的面吹牛玫鸟,可吹牛的內容都是我干的导绷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屎飘,長吁一口氣:“原來是場噩夢啊……” “哼妥曲!你這毒婦竟也來了?” 一聲冷哼從身側響起钦购,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤逾一,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肮雨,有當地人在樹林里發(fā)現(xiàn)了一具尸體遵堵,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年怨规,在試婚紗的時候發(fā)現(xiàn)自己被綠了陌宿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡波丰,死狀恐怖壳坪,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情掰烟,我是刑警寧澤爽蝴,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布沐批,位于F島的核電站,受9級特大地震影響蝎亚,放射性物質發(fā)生泄漏九孩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一发框、第九天 我趴在偏房一處隱蔽的房頂上張望躺彬。 院中可真熱鬧,春花似錦梅惯、人聲如沸宪拥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽她君。三九已至,卻和暖如春葫哗,著一層夾襖步出監(jiān)牢的瞬間犁河,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工魄梯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宾符。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓酿秸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親魏烫。 傳聞我的和親對象是個殘疾皇子辣苏,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容