久久国产精品一区二区三区四区,久色婷婷小香蕉久久,国产日韩欧美在线播放不卡,另类av一区二区

TCP 才不傻!聰明的很!
來源:小林coding    時間:2022-02-28 08:04:44

大家好,我是小林。

之前收到個讀者的問題,對于 TCP 三次握手和四次揮手的一些疑問:

第一次握手,如果客戶端發送的SYN一直都傳不到被服務器,那么客戶端是一直重發SYN到永久嗎?客戶端停止重發SYN的時機是什么?第三次握手,如果服務器永遠不會收到ACK,服務器就永遠都留在 Syn-Recv 狀態了嗎?退出此狀態的時機是什么?第三次揮手,如果客戶端永遠收不到 FIN,ACK,客戶端永遠停留在 Fin-Wait-2狀態了嗎?退出此狀態時機是什么時候呢?第四次揮手,如果服務器永遠收不到 ACK,服務器永遠停留在 Last-Ack 狀態了嗎?退出此狀態的時機是什么呢?如果客戶端 在 2SML內依舊沒收到 FIN,ACK,會關閉鏈接嗎?服務器那邊怎么辦呢,是怎么關閉鏈接的呢?

可以看到,這些問題都是關于 TCP 是如何處理這些異常場景的,我們在學 TCP 連接建立和斷開的時候,總是以為這些過程能如期完成。

可惜理想很豐滿,現實很骨感,事實預料呀。

TCP 當然不傻,對以上這些異常場景都是有做處理的。

這些內容在我的「圖解網絡 PDF」 也有說過。

當時也用做實驗的方式帶大家看 TCP 是如何處理這些異常場景的。

不過,當時這些知識分散到了多個章節,這次就針對讀者問的這一系列問題,來詳細說說 TCP 是怎么處理這些異常的?

這些異常場景共分為兩大類,第一類是 TCP 三次握手期間的異常,第二類是 TCP 四次揮手期間的異常。

TCP 三次握手期間的異常

我們先來看看 TCP 三次握手是怎樣的。

第一次握手丟失了,會發生什么?

當客戶端想和服務端建立 TCP 連接的時候,首先第一個發的就是 SYN 報文,然后進入到 SYN_SENT 狀態。

在這之后,如果客戶端遲遲收不到服務端的 SYN-ACK 報文(第二次握手),就會觸發超時重傳機制。

不同版本的操作系統可能超時時間不同,有的 1 秒的,也有 3 秒的,這個超時時間是寫死在內核里的,如果想要更改則需要重新編譯內核,比較麻煩。

當客戶端在 1 秒后沒收到服務端的 SYN-ACK 報文后,客戶端就會重發 SYN 報文,那到底重發幾次呢?

在 Linux 里,客戶端的 SYN 報文最大重傳次數由 tcp_syn_retries內核參數控制,這個參數是可以自定義的,默認值一般是 5。

通常,第一次超時重傳是在 1 秒后,第二次超時重傳是在 2 秒,第三次超時重傳是在 4 秒后,第四次超時重傳是在 8 秒后,第五次是在超時重傳 16 秒后。沒錯,每次超時的時間是上一次的 2 倍。

當第五次超時重傳后,會繼續等待 32 秒,如果服務端仍然沒有回應 ACK,客戶端就不再發送 SYN 包,然后斷開 TCP 連接。

所以,總耗時是 1+2+4+8+16+32=63 秒,大約 1 分鐘左右。

第二次握手丟失了,會發生什么?

當服務端收到客戶端的第一次握手后,就會回 SYN-ACK 報文給客戶端,這個就是第二次握手,此時服務端會進入 SYN_RCVD 狀態。

第二次握手的 SYN-ACK 報文其實有兩個目的 :

第二次握手里的 ACK, 是對第一次握手的確認報文;第二次握手里的 SYN,是服務端發起建立 TCP 連接的報文;

所以,如果第二次握手丟了,就會發送比較有意思的事情,具體會怎么樣呢?

因為第二次握手報文里是包含對客戶端的第一次握手的 ACK 確認報文,所以,如果客戶端遲遲沒有收到第二次握手,那么客戶端就覺得可能自己的 SYN 報文(第一次握手)丟失了,于是客戶端就會觸發超時重傳機制,重傳 SYN 報文。

然后,因為第二次握手中包含服務端的 SYN 報文,所以當客戶端收到后,需要給服務端發送 ACK 確認報文(第三次握手),服務端才會認為該 SYN 報文被客戶端收到了。

那么,如果第二次握手丟失了,服務端就收不到第三次握手,于是服務端這邊會觸發超時重傳機制,重傳 SYN-ACK 報文。

在 Linux 下,SYN-ACK 報文的最大重傳次數由 tcp_synack_retries內核參數決定,默認值是 5。

因此,當第二次握手丟失了,客戶端和服務端都會重傳:

客戶端會重傳 SYN 報文,也就是第一次握手,最大重傳次數由 tcp_syn_retries內核參數決定。;服務端會重傳 SYN-AKC 報文,也就是第二次握手,最大重傳次數由 tcp_synack_retries 內核參數決定。第三次握手丟失了,會發生什么?

客戶端收到服務端的 SYN-ACK 報文后,就會給服務端回一個 ACK 報文,也就是第三次握手,此時客戶端狀態進入到 ESTABLISH 狀態。

因為這個第三次握手的 ACK 是對第二次握手的 SYN 的確認報文,所以當第三次握手丟失了,如果服務端那一方遲遲收不到這個確認報文,就會觸發超時重傳機制,重傳 SYN-ACK 報文,直到收到第三次握手,或者達到最大重傳次數。

注意,ACK 報文是不會有重傳的,當 ACK 丟失了,就由對方重傳對應的報文。

TCP 四次揮手期間的異常

我們再來看看 TCP 四次揮手的過程。

第一次揮手丟失了,會發生什么?

當客戶端(主動關閉方)調用 close 函數后,就會向服務端發送 FIN 報文,試圖與服務端斷開連接,此時客戶端的連接進入到 FIN_WAIT_1 狀態。

正常情況下,如果能及時收到服務端(被動關閉方)的 ACK,則會很快變為 FIN_WAIT2 狀態。

如果第一次揮手丟失了,那么客戶端遲遲收不到被動方的 ACK 的話,也就會觸發超時重傳機制,重傳 FIN 報文,重發次數由 tcp_orphan_retries 參數控制。

當客戶端重傳 FIN 報文的次數超過 tcp_orphan_retries 后,就不再發送 FIN 報文,直接進入到 close 狀態。

第二次揮手丟失了,會發生什么?

當服務端收到客戶端的第一次揮手后,就會先回一個 ACK 確認報文,此時服務端的連接進入到 CLOSE_WAIT 狀態。

在前面我們也提了,ACK 報文是不會重傳的,所以如果服務端的第二次揮手丟失了,客戶端就會觸發超時重傳機制,重傳 FIN 報文,直到收到服務端的第二次揮手,或者達到最大的重傳次數。

這里提一下,當客戶端收到第二次揮手,也就是收到服務端發送的 ACK 報文后,客戶端就會處于 FIN_WAIT2 狀態,在這個狀態需要等服務端發送第三次揮手,也就是服務端的 FIN 報文。

對于 close 函數關閉的連接,由于無法再發送和接收數據,所以FIN_WAIT2 狀態不可以持續太久,而 tcp_fin_timeout 控制了這個狀態下連接的持續時長,默認值是 60 秒。

這意味著對于調用 close 關閉的連接,如果在 60 秒后還沒有收到 FIN 報文,客戶端(主動關閉方)的連接就會直接關閉。

第三次揮手丟失了,會發生什么?

當服務端(被動關閉方)收到客戶端(主動關閉方)的 FIN 報文后,內核會自動回復 ACK,同時連接處于 CLOSE_WAIT 狀態,顧名思義,它表示等待應用進程調用 close 函數關閉連接。

此時,內核是沒有權利替代進程關閉連接,必須由進程主動調用 close 函數來觸發服務端發送 FIN 報文。

服務端處于 CLOSE_WAIT 狀態時,調用了 close 函數,內核就會發出 FIN 報文,同時連接進入 LAST_ACK 狀態,等待客戶端返回 ACK 來確認連接關閉。

如果遲遲收不到這個 ACK,服務端就會重發 FIN 報文,重發次數仍然由 tcp_orphan_retries 參數控制,這與客戶端重發 FIN 報文的重傳次數控制方式是一樣的。

第四次揮手丟失了,會發生什么?

當客戶端收到服務端的第三次揮手的 FIN 報文后,就會回 ACK 報文,也就是第四次揮手,此時客戶端連接進入 TIME_WAIT 狀態。

在 Linux 系統,TIME_WAIT 狀態會持續 60 秒后才會進入關閉狀態。

然后,服務端(被動關閉方)沒有收到 ACK 報文前,還是處于 LAST_ACK 狀態。

如果第四次揮手的 ACK 報文沒有到達服務端,服務端就會重發 FIN 報文,重發次數仍然由前面介紹過的 tcp_orphan_retries 參數控制。

是吧,TCP 聰明的很!

關鍵詞: 第二次握手 最大重傳次數

上一篇:

下一篇:

久久国产精品一区二区三区四区,久色婷婷小香蕉久久,国产日韩欧美在线播放不卡,另类av一区二区
久久麻豆一区二区| 国产日韩精品一区观看| 欧美午夜精品久久久久久超碰| 亚洲精品乱码久久久久久按摩观| 欧美主播一区二区三区| 久久久精品日韩| 在线精品视频免费观看| 亚洲精品一区二区三区不| 亚洲视频欧洲视频| 一本色道久久加勒比88综合| 国产日韩欧美黄色| 久久综合成人精品亚洲另类欧美| 欧美三区在线| 欧美巨乳在线观看| 欧美一区永久视频免费观看| 在线欧美小视频| 一区二区不卡在线视频 午夜欧美不卡'| 国产精品久久久久高潮| 裸体一区二区| 狠狠色综合播放一区二区| 欧美1区2区| 一本色道久久综合亚洲精品婷婷| 亚洲在线网站| 亚洲一区二区在线视频| 欧美精品九九| 亚洲系列中文字幕| 欧美日韩大片| 久久久久成人精品| 99精品国产一区二区青青牛奶| 欧美一区二区三区喷汁尤物| 另类av一区二区| 国产精品久久久久久久久免费樱桃| 在线观看视频欧美| 亚洲第一中文字幕在线观看| 日韩视频二区| 亚洲图片欧美一区| 国产精品入口| 久久久蜜桃一区二区人| 久久午夜羞羞影院免费观看| 日韩视频一区二区三区| 国产精品网站视频| 久久久久久久网| 欧美三级视频| 欧美日韩亚洲综合一区| 国产一区视频网站| 欧美日韩裸体免费视频| 欧美成人官网二区| 欧美日韩精品中文字幕| 国产精品播放| 国语精品一区| 久久欧美肥婆一二区| 亚洲一级免费视频| 欧美一区二区三区喷汁尤物| 亚洲精品影视| 樱桃成人精品视频在线播放| 亚洲欧美日韩国产综合精品二区| 国模 一区 二区 三区| 久久综合色播五月| 欧美区日韩区| 欧美日韩亚洲另类| 美日韩精品视频免费看| 理论片一区二区在线| 国产九九精品| 国产精品三区www17con| 亚洲——在线| 国产一区二区精品久久| 美女视频黄a大片欧美| 欧美视频一区二区三区四区| 国产欧美一区二区三区另类精品| 亚洲午夜激情免费视频| 欧美激情网友自拍| 激情六月婷婷综合| 亚洲社区在线观看| 亚洲国产欧美另类丝袜| 亚洲图片在线观看| 欧美日韩中文在线| 国产精品久久久久久久久动漫| 伊人久久亚洲影院| 欧美精品免费视频| 毛片一区二区三区| 先锋影音久久| 伊人成人在线| 日韩视频一区二区在线观看| 极品日韩久久| 亚洲人成绝费网站色www| 欧美日韩视频在线| 久久www成人_看片免费不卡| 久久久www成人免费无遮挡大片| 久久久久久国产精品mv| 亚洲淫性视频| 国产欧美日韩亚洲| 国产欧美一区二区色老头| 国产女精品视频网站免费| 黄色综合网站| 国产女人水真多18毛片18精品视频| 国产精品萝li| 日韩一级精品| 国产精品不卡在线| 国产精品视频免费在线观看| 久久成人资源| 蜜臀久久久99精品久久久久久| 久久视频这里只有精品| 免费欧美电影| 国产亚洲精品综合一区91| 久久精品二区亚洲w码| 玉米视频成人免费看| 国产亚洲欧洲一区高清在线观看| 国产精品激情偷乱一区二区∴| 精品成人久久| 亚洲精品久久久久| 99精品欧美一区二区三区| 国内综合精品午夜久久资源| 久久精品国产亚洲高清剧情介绍| 巨胸喷奶水www久久久免费动漫| 欧美伦理在线观看| 国产精品美女久久久免费| 国产亚洲欧美一区二区| 久久精品日产第一区二区三区| 国产一区二区日韩| 国产精品xvideos88| 国产精品国产三级国产aⅴ浪潮| 鲁大师成人一区二区三区| 欧美日韩极品在线观看一区| 亚洲区第一页| 中文精品在线| 久久精品视频网| 日韩视频―中文字幕| 在线成人www免费观看视频| 国产麻豆91精品| 亚洲激情国产| 99热这里只有成人精品国产| 蜜臀av性久久久久蜜臀aⅴ| 国产麻豆精品久久一二三| 亚洲高清久久| 亚洲免费精彩视频| 中文av一区二区| 欧美freesex交免费视频| 精品动漫3d一区二区三区| 99www免费人成精品| 欧美国产日韩视频| 欧美亚洲尤物久久| 一本色道久久综合狠狠躁篇的优点| 久久久人人人| 国产日韩精品一区观看| 国产日韩欧美在线看| 欧美刺激性大交免费视频| 国产一区二区三区直播精品电影| 欧美伊久线香蕉线新在线| 亚洲午夜日本在线观看| 尤物精品国产第一福利三区| 欧美日韩免费高清一区色橹橹| 亚洲欧洲一区二区在线播放| 亚洲国产精品一区在线观看不卡| 99国产精品99久久久久久粉嫩| 久久精品免费电影| 欧美在线视频二区| 亚洲人成在线观看一区二区| 欧美一区二区视频免费观看| 欧美人与性动交α欧美精品济南到| 亚洲日本一区二区三区| 亚洲国产精品高清久久久| 亚洲乱码国产乱码精品精98午夜| 美女成人午夜| 欧美黑人一区二区三区| 亚洲国产精品一区二区第一页| 亚洲精品日韩综合观看成人91| 欧美日韩一区在线观看| 国产精品v日韩精品| 久久超碰97人人做人人爱| 国产欧美1区2区3区| 国产精品一二三| 欧美精品18| 欧美片网站免费| 欧美日韩一区二区视频在线观看| 加勒比av一区二区| 国产色产综合产在线视频| 亚洲国产欧美另类丝袜| 国内揄拍国内精品少妇国语| 国产精品免费看久久久香蕉| 欧美精品激情在线观看| 久久欧美肥婆一二区| 久久亚洲精选| 宅男噜噜噜66国产日韩在线观看| 欧美午夜电影完整版| 午夜精品免费| 欧美精品久久久久久久| 亚洲精品久久久久| 亚洲国产精品一区二区第四页av| 欧美私人网站| 欧美日韩在线一区二区三区| 欧美一级午夜免费电影| 亚洲一区国产| 亚洲一区精品在线| 久久一区二区精品| 国产综合色在线| 老司机精品导航| 欧美亚洲日本网站| 欧美不卡激情三级在线观看| 免播放器亚洲一区| 99视频日韩|