精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

網絡編程-再看TCP的四次揮手

網絡 通信技術
作為一種常見的四次揮手場景,我們可能習以為常了,但需要注意的是,連接的斷開并不只有這種情況,還可以是服務端發起主動關閉,或者雙方同時發起,但這不是本文關注的重點。我們直接看看四次揮手有哪些需要注意的。

[[270759]]

前言

四次揮手

四次揮手的流程在很多地方都可以看到,這里簡略介紹一下,其常見流程如下圖所示:

 

其大體流程如下:

  • 客戶端發其結束請求,發送seq=X,處于FIN_WAIT_1狀態
  • 服務端收到結束請求,發送應答ACK=X+1,處于CLOSE_WAIT狀態
  • 客戶端收到X的應答后,處于FIN_WAIT_2狀態,此時還可以接收來自服務端的數據
  • 服務端沒有數據要發送,也發送結束請求,seq=Y,處于LAST_ACK狀態
  • 客戶端又收到服務端的結束請求,客戶端回應ACK,此時處于TIME_WAIT狀態,確保ACK能夠到達服務端;服務端收到客戶端最終ACK,關閉連接。
  • 2MSL時間結束后,無論服務端是否收到最終ACK,客戶端完全結束連接

作為一種常見的四次揮手場景,我們可能習以為常了,但需要注意的是,連接的斷開并不只有這種情況,還可以是服務端發起主動關閉,或者雙方同時發起,但這不是本文關注的重點。我們直接看看四次揮手有哪些需要注意的。

什么是TCP的半關閉

TCP半關閉指的是一端結束發送后還能夠接受來自另一端的數據。也就是說,雖然客戶端準備斷開連接并且發送了FIN報文,客戶端還是可以接收來自服務端的數據。不過這種關閉方式不能使用close接口,而需要使用shutdown:

  1. #include <sys/socket.h> 
  2. int shutdown(int sockfd, int how); 

并且how參數值為SHUT_WR,即1,表明shutdown for writing ,僅關閉本端的發送。

為什么要四次揮手

為什么建立一個TCP連接需要三次握手,而終止一個連接需要四次揮手呢?這是因為TCP半關閉造成的。由于一個TCP連接是全雙工的,在兩個方向上都能傳輸數據,因此兩個方向就需要單獨關閉。所以這個流程是這樣的:

  • 客戶端執行主動關閉,發送FIN報文,告訴服務端,我沒有數據要發送了,我要關閉連接,當然了,你有啥數據要給我,我隨時候著
  • 服務端收到后,必須及時告訴客戶端我收到了,因此先回復客戶端一個ACK。但是服務端可能還有未發送完的數據,因此它可以將自己未完成的數據進行發送,發送完成之后,再發送給客戶端FIN報文,表明我也沒啥要發送的了,關閉吧
  • 客戶端收到后,也回復ACK響應,最終關閉連接

因而整個過程需要四次揮手。

為什么要TIME_WAIT狀態

TIME_WAIT也稱為2MSL等待時間。MSL為報文最大生存時間,它是任何報文在被丟棄前存在于網絡內的最長時間。這個時間在不同類型的系統中可能有所不同,但這不是關鍵。在我個人的機器上,可以借助netstat命令和nc命令通過下面的方式觀察到。在終端1監聽1234端口:

  1. $ nc -l 1234 

在終端2連接到1234端口:

  1. $ nc 127.0.0.1 1234 

在終端3通過netstat命令觀察:

  1. $ netstat -anpoc|grep :1234 

然后在終端1按ctrl+c,終止連接,立刻觀察終端3的結果,我們發現:

  1. tcp        0      0 127.0.0.1:1234          127.0.0.1:33524         TIME_WAIT   -                timewait (59.76/0/0) 
  2. tcp        0      0 127.0.0.1:1234          127.0.0.1:33524         TIME_WAIT   -                timewait (58.74/0/0) 
  3. tcp        0      0 127.0.0.1:1234          127.0.0.1:33524         TIME_WAIT   -                timewait (57.71/0/0) 
  4. tcp        0      0 127.0.0.1:1234          127.0.0.1:33524         TIME_WAIT   -                timewait (56.69/0/0) 

我們可以觀察到,服務端當前處于TIME_WAIT,且有一個timewait的定時器,為1分鐘。

netstat命令和nc命令的使用可以分別參考《不可不知的網絡命令-netstat》和《網絡工具中的”瑞士軍刀“-nc》。

TIME_WAIT狀態的存在主要考慮以下兩個方面:

  • 實現可靠的四次揮手
  • 避免收到老的報文

為什么說TIME_WAIT是為了實現可靠的四次揮手呢?試想一下,如果客戶端最后回應的ACK丟了,那么服務端會再次發送FIN報文,此時,客戶端必須處于一個等待狀態,否則服務端永遠無法收到這個ACK,而會收到一個RST,以為出錯。而如果客戶端此時處于TIME_WAIT狀態,即等待2MSL時間,它還可以再次回應服務端ACK。這也就保證了可靠的四次揮手。

當然了,如果在2MSL時間內,服務端還沒有收到,那么對不起,客戶端已經仁至義盡了,不會再等待了。

這里需要注意,最終執行主動關閉的那一端會處于TIME_WAIT狀態。

那么為什么又說是為了避免收到老的重復報文呢?

試想這樣的場景:

假設一開始已經有一個連接在1234端口建立,我們關閉這個連接;過一會我們在同樣的ip和端口建立連接,但是TCP必須防止在前一次連接中的老的報文在它原先的連接已終止后,還出現在這個新的連接中,因此,TCP將不允許在處于TIME_WAIT狀態的ip和端口處建立新的連接。而2MSL時間過后,老的報文早已在網絡中消失了,也就避免了這種情況的發生。

這種情況可以很容易通過《網絡編程-一個簡單的echo程序》的server程序來觀察:

  1. $ ./server  #在一個終端啟動server, 
  2. $ ./client 127.0.0.1 1234 #在另一個終端啟動client 

在服務端終端ctrl+c終止服務端,然后再次啟動server:

  1. $ ./server 
  2. bind error: Address already in use 
  3. $ netstat -anop|grep :1234 
  4. tcp        1      0 127.0.0.1:33722         127.0.0.1:1234          CLOSE_WAIT  11691/client     off (0.00/0/0) 
  5. tcp        0      0 127.0.0.1:1234          127.0.0.1:33722         FIN_WAIT2   -                timewait (57.92/0/0) 

終止服務端后,服務端處于TIME_WAIT狀態,此時再次啟動server,將不能使用原來的ip和端口建立連接,因此出現Address already in use的報錯。

但是需要注意:

  • 由于客戶端通常使用的是臨時端口(仔細觀察會發現,客戶端每次啟動使用的端口基本都不一樣),因此客戶端即便處于TIME_WAIT狀態,也不影響它馬上再次啟動
  • 一些實現允許一個新的連接請求仍然處于TIME_WAIT狀態的連接,只要新的seq大于該連接的前一個連接的最后序號
  • 通過設置選項SO_REUSEADDR,可以讓一個進程重新使用仍處于TIME_WAIT狀態的socket

半打開的TCP連接

假設一個連接建立之后,突然有一方異常終止連接了,但是另一個不知道,這個時候TCP的連接就是半打開的。如果服務端不加處理,那么最終就會導致服務端有大量的半打開連接。那么服務端如何知道客戶端的連接已經異常終止了呢?如果等待服務端發送數據出錯時發現,那么這個時候可能已經太晚了。

幸運的是,TCP有保活定時器。即服務端可以通過設置保活選項來了解客戶端是否已經終止連接。

通過下面的方式可以看到很多連接有這樣的定時器:

  1. $ netstat -npo|grep keepalive 
  2. tcp        0      0 192.168.0.103:50832     59.111.179.136:443      ESTABLISHED 5882/chrome      keepalive (37.33/0/0) 
  3. tcp        0      0 192.168.0.103:50638     154.8.131.191:443       ESTABLISHED 5882/chrome      keepalive (0.00/0/0) 
  4. tcp        0      0 192.168.0.103:59330     203.107.41.32:9026      ESTABLISHED 5882/chrome      keepalive (0.35/0/0) 
  5. tcp        0      0 127.0.0.1:45632         127.0.0.1:1080          ESTABLISHED 5886/firefox     keepalive (335.28/0/0) 
  6. tcp        0      0 192.168.0.103:49940     59.56.78.189:443        ESTABLISHED 5882/chrome      keepalive (26.36/0/0) 

但可惜的是,這樣的定時器時間太長了,并且它不能代表應用程序能夠正常工作,能夠正常收發數據,因此應用層常常也會實現一個心跳機制。

總結

本文花了大量篇幅介紹了TIME_WAIT狀態,這也是面試中常問的問題,重新梳理TCP的四次揮手是很有必要的。

責任編輯:武曉燕 來源: 編程珠璣
相關推薦

2021-10-14 20:33:16

TCP連接關閉

2024-07-11 10:55:27

2015-10-13 09:42:52

TCP網絡協議

2024-01-12 08:23:11

TCPACK服務器

2023-10-24 15:22:09

TCPUDP

2022-08-05 11:03:59

TCP 四次揮手三次握手

2021-01-29 06:11:08

TCP通信三次握手

2021-05-18 12:27:40

TCP控制協議

2019-06-12 11:26:37

TCP三次握手四次揮手

2023-09-02 22:02:58

TCP協議四次揮手

2020-02-17 10:10:43

TCP三次握手四次揮手

2017-09-25 21:27:07

TCP協議數據鏈

2021-07-03 17:47:25

TCP控制協議

2019-02-01 09:38:16

2014-09-19 09:46:46

TCPIP

2020-06-29 14:50:47

TCP狀態ACK

2025-05-20 08:38:03

2021-05-28 09:08:20

TCP連接序列號

2023-10-28 09:07:57

TCP面試三次握手

2022-11-17 10:20:49

TCP三次握手四次揮手
點贊
收藏

51CTO技術棧公眾號

久久黄色小视频| 亚洲一级片免费| 五月天婷婷视频| 久久精品一区二区三区中文字幕| 国产一区二区动漫| 国产性生活一级片| av不卡高清| 久久久久久电影| 91久热免费在线视频| 国产精品99精品无码视| 国产欧美日韩视频在线| 日韩一卡二卡三卡国产欧美| 免费在线观看亚洲视频| 91社区在线| 成人av第一页| 国产精自产拍久久久久久| 免费在线视频一区二区| 加勒比久久综合| 亚洲精品在线观看视频| 国产又粗又长又大的视频| 欧美亚洲天堂| 国产精品久久久久永久免费观看| 国产精品国产精品| 在线观看免费高清视频| 在线成人h网| 精品国产一区二区三区久久久狼| www.超碰97| 亚洲图色一区二区三区| 91久久精品一区二区三区| 欧美黄网在线观看| 午夜伦理在线| 久久精品人人做人人综合 | 亚洲色图25p| 欧美xxxx黑人| 自拍偷拍亚洲图片| 欧美日韩在线一区二区| 91黄色小网站| 樱花草涩涩www在线播放| 亚洲精品一二三四区| 亚洲v国产v在线观看| 熟妇人妻一区二区三区四区| 国产毛片精品一区| 国产欧美精品在线播放| 精品一区二三区| 翔田千里一区二区| 91精品国产免费久久久久久| 中文字幕av免费在线观看| 久久在线视频| 在线免费看av不卡| 韩国三级hd中文字幕| 精品影片在线观看的网站| 亚洲精品98久久久久久中文字幕| 91丨porny丨九色| va天堂va亚洲va影视| 欧美曰成人黄网| 亚洲免费看av| 欧美一级做一级爱a做片性| 色999日韩国产欧美一区二区| 国产av天堂无码一区二区三区| 欧美日韩经典丝袜| 亚洲国产视频a| 日韩一级片免费视频| 91制片在线观看| 精品久久久久久国产| 1024av视频| 亚洲美女久久精品| 色噜噜狠狠成人中文综合| 99精品免费在线观看| 亚洲高清黄色| 欧美美女一区二区在线观看| 亚洲最大天堂网| 欧美电影在线观看一区| 精品国产亚洲一区二区三区在线观看| 麻豆av免费看| 亚洲三级网页| 综合网中文字幕| 精品人妻伦九区久久aaa片| 中文字幕亚洲精品乱码| 国内精品一区二区三区四区| 偷偷操不一样的久久| 日韩中文字幕不卡| 91精品中文在线| 六月丁香色婷婷| 久久精品无码一区二区三区| 亚洲欧洲精品在线观看| 欧洲性视频在线播放| 欧美午夜激情视频| 亚洲娇小娇小娇小| 高潮久久久久久久久久久久久久 | 波多野结衣办公室33分钟| 国产精品探花在线观看| 日韩中文字幕视频在线| 欧美成人精品一区二区免费看片| 亚洲经典自拍| 国产精品爱久久久久久久| 国产一区二区三区中文字幕| 国产69精品久久久久毛片| 麻豆精品传媒视频| 国产黄a三级三级三级av在线看| 亚洲综合清纯丝袜自拍| 日日摸天天爽天天爽视频| 国产精品毛片无码| 亚洲男人7777| 免费成年人视频在线观看| 国产一级久久| 91在线在线观看| 国产色在线 com| 夜色激情一区二区| 欧美三级午夜理伦三级富婆| a级日韩大片| 在线亚洲男人天堂| 天堂网一区二区三区| 美日韩一区二区| 精品国产第一页| 麻豆tv免费在线观看| 欧美日韩在线观看视频| 污视频在线观看免费网站| 在线日韩一区| 欧美极品少妇xxxxx| 一级黄色小视频| 久久天堂av综合合色蜜桃网| 老汉色影院首页| 精品久久毛片| 精品亚洲男同gayvideo网站| 劲爆欧美第一页| 国产自产2019最新不卡| 午夜精品一区二区三区在线观看 | 欧美午夜影院在线视频| 日韩精品国产一区| 亚洲色图插插| 国产精品入口福利| 国产三级在线免费| 五月婷婷激情综合网| 成人三级做爰av| 国产精品久久久乱弄| 国产精品成人v| 九色国产在线观看| 欧美三级免费观看| 一级特级黄色片| 国产精品婷婷| 久久99九九| а√在线中文在线新版| 欧美精品一区二区三区在线| 波多野结衣不卡视频| 国产一区二区h| 熟女熟妇伦久久影院毛片一区二区| 亚洲国产综合av| wwwww亚洲| 欧美本精品男人aⅴ天堂| 国产精品国产精品88| 久久99国产精品成人| 亚洲精品久久久久久一区二区| 久久野战av| 国产一区二区三区直播精品电影| 五月天激情国产综合婷婷婷| 91蜜桃在线免费视频| av黄色在线网站| 日韩电影在线观看完整免费观看| 7777kkkk成人观看| 四虎影视2018在线播放alocalhost| 亚洲高清视频的网址| 黄色性视频网站| 国产精品久久777777毛茸茸| 欧美日韩综合久久| av成人在线观看| 日韩亚洲国产中文字幕| 国产日韩欧美视频在线观看| 亚洲免费av观看| 日本精品一二三区| 香蕉久久国产| 亚洲看片网站| 精品国产亚洲一区二区三区在线 | 免费成人美女女在线观看| 国产在线国偷精品免费看| 狠狠噜天天噜日日噜| 国产精品一区二区三区美女| 日本久久久久亚洲中字幕| 1769视频在线播放免费观看| 欧美一区二区三区在线| 国产精品不卡av| 国产欧美日韩卡一| 一个人看的视频www| 99精品热6080yy久久| 亚洲 日韩 国产第一区| 国产精品3区| 91精品国产一区| 日韩在线观看www| 精品久久久久久久久久久久包黑料| 毛片视频网站在线观看| 国产精品电影一区二区三区| 欧美一级大片免费看| 老司机精品福利视频| 一级黄色免费在线观看| 久久365资源| 国产精品一区二区三区毛片淫片| 欧美韩日亚洲| 中文字幕9999| 少妇一区二区三区四区| 欧美日韩一区三区| 日韩乱码一区二区| 中文字幕亚洲综合久久菠萝蜜| 91丝袜在线观看| 精品亚洲porn| 国产福利一区视频| 1024日韩| 欧美一级特黄aaaaaa在线看片| 台湾色综合娱乐中文网| 亚洲xxx自由成熟| 91av一区| 欧美与黑人午夜性猛交久久久| 91cn在线观看| 亚洲欧美制服综合另类| www.五月激情| 欧美日韩1区2区| 久久久久久久久黄色| 亚洲资源中文字幕| 免费成人深夜夜行网站| 91麻豆免费看片| 成年人小视频在线观看| 国产在线一区观看| 污视频免费在线观看网站| 久久高清一区| 欧美精品一区免费| 国产专区一区| 大片在线观看网站免费收看| 精品一区电影| 欧美日韩精品综合| 老司机精品视频在线播放| 51国产成人精品午夜福中文下载| 国产一区一一区高清不卡| 欧美与黑人午夜性猛交久久久| 新版中文在线官网| 欧美成人午夜免费视在线看片| 免费在线观看av| 丝袜美腿精品国产二区| aaa在线观看| 国产亚洲精品美女久久久| 国产精品国产高清国产| 亚洲第一av网| 亚洲精品国产精品国| 日韩一级完整毛片| 国产精品一区二区免费视频| 欧美日本国产视频| 国产一区二区三区四区视频 | 日本成人在线免费| 国产精品夜夜爽| 成人性生交免费看| 奇米影视7777精品一区二区| www.日本xxxx| 麻豆精品国产传媒mv男同| 中文字幕成人在线视频| 理论电影国产精品| 亚洲精品免费一区亚洲精品免费精品一区 | 欧美xxxxx在线视频| 久久精品magnetxturnbtih| 男人的天堂久久久| 国产精品超碰97尤物18| 男人天堂资源网| 亚洲欧洲无码一区二区三区| 国产免费一区二区三区四区| 亚洲视频每日更新| 精品欧美一区二区久久久久| 尤物在线观看一区| 国产一级片免费观看| 午夜精品久久久久久久 | 亚洲最大黄网| 亚洲区成人777777精品| 黑丝一区二区| 可以在线看的av网站| 久久久久国产精品一区二区| 黄色在线视频网| 精品一区二区三区的国产在线播放 | 黄页网站在线观看免费| 91精品国产91久久久久久久久| 欧洲一区精品| 国产区精品视频| 亚洲综合色婷婷在线观看| 久久精品日产第一区二区三区精品版| 国产一区二区三区探花| 正义之心1992免费观看全集完整版| 中文字幕日韩一区二区不卡| 色欲av无码一区二区人妻| 免费的国产精品| 免费国偷自产拍精品视频| 91一区二区在线| 日韩一卡二卡在线观看| 亚洲婷婷综合网| 欧美日韩美女在线观看| 自拍偷拍第八页| 精品免费一区二区三区| 国产一级网站视频在线| 插插插亚洲综合网| 成人影院av| 91视频最新| 精品久久久久久久久久久下田| 亚洲黄色网址在线观看| 美女尤物久久精品| 精品人妻人人做人人爽夜夜爽| 久久亚洲精品小早川怜子| 日本黄色免费片| 欧美日韩在线免费观看| 国产毛片一区二区三区va在线| 亚洲精品久久久久久久久久久久| 香港伦理在线| 午夜精品久久久久久久白皮肤| 成人在线免费| 久久综合一区| 欧美在线亚洲综合一区| 国产三级三级三级看三级| 成人晚上爱看视频| 国产精品免费在线视频| 欧美日韩综合视频网址| 精品国自产在线观看| 中文日韩电影网站| 亚洲精品动漫| 国产精品区二区三区日本| 欧美超碰在线| 福利在线一区二区三区| 94色蜜桃网一区二区三区| 欧美日韩免费一区二区| 欧美日韩在线不卡| 精品三级久久久久久久电影聊斋| 久久91精品国产91久久久| 日韩成人在线电影| 日本在线播放不卡| 亚洲永久视频| 欧美成人三级伦在线观看| 一区二区三区欧美日| 国产美女永久免费| xvideos国产精品| 91av亚洲| 欧美精品一区二区三区在线四季 | 一区二区三区在线视频免费| 在线视频欧美亚洲| 在线观看91久久久久久| 成人免费看黄| 精品在线不卡| 99亚洲一区二区| 人妻av一区二区| 亚洲国产一区二区三区青草影视| 国产成人精品a视频| 欧美成人激情图片网| 国产一区二区三区黄网站| 色乱码一区二区三区熟女| 精品在线亚洲视频| 殴美一级黄色片| 欧美人xxxx| 成人av免费| 99在线看视频| 国产综合自拍| 天堂久久久久久| 日韩欧美国产网站| 免费人成在线观看网站| 日本一区二区不卡| 少妇精品久久久一区二区三区 | 欧美成人黄色网| 精品剧情v国产在线观看在线| heyzo在线播放| 久久精品一二三区| 老妇喷水一区二区三区| 日本污视频网站| 欧美另类高清zo欧美| 超碰最新在线| 岛国一区二区三区高清视频| 欧美日韩国产高清| 国产xxxx视频| 在线看日韩精品电影| 日本黄色片在线观看| 92福利视频午夜1000合集在线观看| 欧美激情91| 国产精品无码网站| 欧美性大战久久久| 黄色一级片在线观看| 懂色一区二区三区av片| 久久成人一区| 潘金莲一级黄色片| 欧美精品一区二区精品网| 欧美大电影免费观看| 伊人久久大香线蕉综合75| 国产成人午夜高潮毛片| 国产精品久久久久久99| 在线看国产精品| 一区二区三区亚洲变态调教大结局| 日韩av高清在线看片| 日本一区二区三区在线不卡| 国产视频在线一区| 91精品成人久久| 午夜久久免费观看| 欧美深性狂猛ⅹxxx深喉| 欧美日韩久久久| 国产美女高潮在线观看| 伊人久久大香线蕉午夜av| 99在线热播精品免费| 一级片aaaa| 91精品国产九九九久久久亚洲| 99久久精品网站| 免费a级黄色片| 日韩欧美一区电影| 香蕉视频亚洲一级| 免费特级黄色片|