精品欧美一区二区三区在线观看 _久久久久国色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无码成人精品一区| 国产精品无码天天爽视频| 日韩av有码| 欧美一区二区国产| 大陆av在线播放| 日韩大胆人体| 久久精品国产免费| 欧美激情va永久在线播放| 妖精视频一区二区| **在线精品| 自拍偷拍亚洲激情| 国产精品区一区二区三在线播放 | 久久精品国产sm调教网站演员 | 欧美一区二区三区系列电影| www.国产在线视频| 男人天堂综合| 国产一区欧美日韩| 欧美在线一区二区视频| jizzjizzjizz国产| 亚瑟国产精品| 亚洲va韩国va欧美va精品| 国产伦理一区二区三区| 天天爱天天做天天爽| 中文字幕一区二区av| 国产婷婷成人久久av免费高清| 奇米影音第四色| www.九色在线| 国产精品美女久久久久久久| 国产精品麻豆免费版| 一级久久久久久久| 西西裸体人体做爰大胆久久久| 成人精品在线视频观看| 欧美富婆性猛交| 国产毛片久久久久久久| 亚洲精品a区| 91成人免费在线| 国产玉足脚交久久欧美| 在线免费黄色| 国产成人啪午夜精品网站男同| 国产91在线播放九色快色| 免费在线观看亚洲| 久久中文字幕二区| 亚洲色图国产精品| xfplay5566色资源网站| 亚洲精品aaa| 欧美在线观看一区| 国产尤物av一区二区三区| 在线播放麻豆| 欧美韩日一区二区三区| 久久久综合香蕉尹人综合网| 亚洲第一成人av| 老牛嫩草一区二区三区日本| 97精品国产97久久久久久春色| 欧美 日韩 国产 一区二区三区| 久久精品凹凸全集| 欧美成人a视频| 爽爽爽在线观看| 激情欧美一区二区三区黑长吊| 欧美日韩在线另类| 国产二区视频在线| 色综合久久影院| 日本一区二区成人在线| 欧美日韩一区在线观看视频| 天天操天天干天天舔| 国产福利一区二区| 91免费高清视频| 波多野结衣人妻| 日本三级亚洲精品| 国产成人久久久精品一区| 99精品在线播放| 久久av最新网址| 91国产视频在线| 国产又大又黄又粗| 国产欧美丝祙| 日本午夜在线亚洲.国产| av中文在线播放| 一本色道久久综合| 国产精品吊钟奶在线| 在线观看毛片av| 国产精品一区二区x88av| 国产精品日韩欧美一区二区三区| 四虎影院在线域名免费观看| 国产色91在线| 中文字幕人妻熟女人妻洋洋| 亚洲三级欧美| 欧美精品一级二级| 国产十八熟妇av成人一区| 蜜桃一区二区| 欧美精品中文字幕一区| 精品欧美一区二区三区免费观看| 日韩vs国产vs欧美| 成人综合色站| aiai在线| 天天综合日日夜夜精品| 国产又黄又猛的视频| 豆花视频一区二区| 自拍偷拍亚洲区| 日本三级理论片| 狠狠狠色丁香婷婷综合激情| 麻豆亚洲一区| 日本在线观看大片免费视频| 91精品办公室少妇高潮对白| 色哟哟网站在线观看| 欧美系列电影免费观看| 久久久亚洲国产| 97在线视频人妻无码| 久久综合狠狠综合久久激情| 99热这里只有精品7| 东京一区二区| 欧美精品一区视频| 欧美另类69xxxx| 国产精品五区| 91入口在线观看| 成年网站在线| 精品国产福利在线| 一级黄色大片免费看| 久久国产综合| 国产97在线播放| 人妻偷人精品一区二区三区| 亚洲蜜臀av乱码久久精品蜜桃| 成人午夜视频免费在线观看| 国产欧美啪啪| 欧美成人激情视频| 亚洲一区二区色| 久久久精品免费免费| 99在线精品免费视频| a一区二区三区亚洲| 深夜精品寂寞黄网站在线观看| 青青草av在线播放| 国产成人免费视频网站| 一区二区三区视频| 国产极品嫩模在线观看91精品| 国产99久久九九精品无码免费| 国产成人免费在线视频| 天天成人综合网| se69色成人网wwwsex| 亚洲精品久久久久久久久久久久 | 成人app下载| 91手机视频在线| julia一区二区三区中文字幕| 国产丝袜高跟一区| 成人精品免费在线观看| 99re66热这里只有精品3直播| 国产96在线 | 亚洲| 国产精品tv| 97精品视频在线观看| 婷婷在线免费视频| 欧美日韩国产一区二区| 性色av蜜臀av色欲av| 久久国产成人| 日产国产精品精品a∨| 草美女在线观看| 精品国产一区二区三区av性色| 成人免费毛片东京热| 国产精品亚洲午夜一区二区三区| 777久久精品一区二区三区无码| 国产在线不卡一区二区三区| 欧美激情2020午夜免费观看| 手机av在线免费观看| 午夜久久久影院| 国产夫妻性爱视频| 首页国产欧美日韩丝袜| 亚洲7777| 香蕉大人久久国产成人av| 欧美精品国产精品日韩精品| 婷婷视频在线观看| 一本色道久久加勒比精品| 纪美影视在线观看电视版使用方法| 男男成人高潮片免费网站| 最新av在线免费观看| 操欧美女人视频| 欧美中文字幕视频在线观看| av电影在线观看| 日韩精品中文字幕在线一区| aaa人片在线| 国产精品成人网| 亚洲国产综合av| 国产精品一区毛片| 亚洲激情一区二区三区| 777久久精品| 欧美在线一级视频| 国产在线观看av| 亚洲精品ady| 在线观看国产一区二区三区| 亚洲午夜影视影院在线观看| 人妻丰满熟妇av无码久久洗澡| 秋霞影院一区二区| 成年女人18级毛片毛片免费| 国产一区二区区别| 岛国一区二区三区高清视频| 日日夜夜天天综合| 久久久久久成人| av在线资源站| 亚洲精品ady| 99热这里只有精品9| 色综合久久综合网欧美综合网| 亚洲一级二级片| 26uuu国产日韩综合| 天天操夜夜操很很操| 丝袜诱惑亚洲看片| 欧美高清中文字幕| 大色综合视频网站在线播放| 狠狠色噜噜狠狠色综合久| 国产精品成人3p一区二区三区| 日本精品视频在线播放| 成人在线免费观看黄色| 精品国产一区二区三区久久狼黑人| 天天爱天天干天天操| 日韩视频一区二区三区| 中文亚洲av片在线观看| 狠狠色狠狠色综合日日小说| 国产真人真事毛片| 亚洲欧美日韩在线| 亚洲色图欧美色| 久久毛片高清国产| 国产激情视频网站| 成人久久18免费网站麻豆 | 国产午夜精品全部视频播放| 免费观看国产精品| 日韩欧美一区在线| 97超碰人人模人人人爽人人爱| 一本到三区不卡视频| 天天插天天操天天干| 亚洲宅男天堂在线观看无病毒| 国产三级aaa| 国产精品日韩精品欧美在线| 亚洲自拍偷拍图| 久久久久久久久久久久久女国产乱 | 欧美黄色三级| 国产aⅴ夜夜欢一区二区三区 | 99视频免费观看| 先锋影音网一区二区| 国产精品美女网站| 日韩三区在线| 国产精品91在线观看| 久久91导航| 国产精品久久久久久久久久尿| 中文字幕在线视频网站| 欧美在线视频一区| 国产另类xxxxhd高清| 国产成人在线精品| 成人在线黄色| 国产精品高清在线观看| a成人v在线| 91免费高清视频| 91午夜精品| 国产在线播放一区二区| 欧美中文一区| 五码日韩精品一区二区三区视频| 狠狠做六月爱婷婷综合aⅴ| 日韩少妇中文字幕| 欧美电影免费| 300部国产真实乱| 尤物网精品视频| 哪个网站能看毛片| 日本va欧美va精品| 中文字幕人妻无码系列第三区| 国产精品123| 青青草视频播放| 中国av一区二区三区| 97在线观看视频免费| 亚洲激情欧美激情| 亚洲伊人成人网| 欧美卡1卡2卡| 国产77777| 亚洲午夜色婷婷在线| www红色一片_亚洲成a人片在线观看_| 九九热这里只有在线精品视| 成人三级高清视频在线看| 日韩av不卡电影| 国产电影一区二区| 激情伦成人综合小说| 精品久久久久久久久久久aⅴ| 最新av在线免费观看| 日韩视频在线一区二区三区| 手机看片福利日韩| 国产福利不卡视频| v8888av| 日韩一区日韩二区| 在线观看免费国产视频| 欧美女孩性生活视频| 人妻精品一区一区三区蜜桃91| 亚洲一区二区国产| 激情图片在线观看高清国产| 国产精品视频26uuu| 久久99国产精品久久99大师| 亚洲韩国在线| 亚洲在线成人| 色姑娘综合天天| 中文字幕乱码一区二区免费| 69精品久久久| 91精品麻豆日日躁夜夜躁| 久久国产精品高清一区二区三区| 久久中文字幕视频| 国产综合色区在线观看| 国产精品久久久久久久久久直播 | 欧美一区二区视频在线播放| 日韩av电影免费观看高清完整版| zjzjzjzjzj亚洲女人| 国产精品传媒视频| 91青青草视频| 亚洲第一在线视频| www.久久ai| 国产精品午夜国产小视频| 偷拍一区二区| 欧美一级视频免费看| 黄一区二区三区| 国产又粗又硬视频| 日韩欧美一区二区三区| 人妻少妇精品无码专区| 欧美成人精品xxx| 国产精品成人**免费视频| 亚洲精品乱码视频| 视频一区二区欧美| 亚洲午夜福利在线观看| 亚洲va在线va天堂| 免费观看黄色av| 久久久视频精品| 成人看片爽爽爽| 久久99中文字幕| 成人激情免费网站| 久青草免费视频| 日韩免费视频线观看| 永久免费网站在线| 亚洲精品免费网站| 99热在线成人| 欧美日韩精品区别| 国产精品污污网站在线观看| 日韩国产成人在线| 亚洲日本中文字幕| 欧美最新精品| 亚洲高清资源综合久久精品| 日韩二区三区四区| 九九九视频在线观看| 在线观看一区二区精品视频| 成人18在线| 国产美女精品视频| 97精品97| 色18美女社区| 亚洲精品久久嫩草网站秘色| 精品国产av一区二区三区| 色综合久久精品亚洲国产 | 三级三级久久三级久久18| 视频一区二区三区在线| av片在线免费看| 3d成人h动漫网站入口| 成人短视频在线| 国产精品一区视频网站| 国产一区导航| 永久免费成人代码| 欧美日韩一区二区三区不卡| 欧美a免费在线| 91免费版黄色| 国产亚洲福利| 一二三四国产精品| 欧美一区二区三区男人的天堂| 成人超碰在线| 欧美国产综合视频| 秋霞国产午夜精品免费视频| 婷婷久久综合网| 亚洲白拍色综合图区| 3d性欧美动漫精品xxxx软件| 在线免费观看一区二区三区| 成人一级视频在线观看| 中文字幕视频网站| 色99之美女主播在线视频| 色播一区二区| 北条麻妃在线观看| 国产精品亲子乱子伦xxxx裸| av网站免费大全| 欧美洲成人男女午夜视频| 日韩午夜电影网| 日韩精品视频一区二区| 欧美性生交片4| 国产在线拍揄自揄拍视频 | 91精品免费看| 91久久亚洲| 久久人妻无码aⅴ毛片a片app| 亚洲成人精品av| 国外成人福利视频| 欧美 日韩 亚洲 一区| 国产精品日日摸夜夜摸av| 亚洲老妇色熟女老太| 国产精品爱啪在线线免费观看| 在线中文一区| 91视频在线网站| 欧美一级在线观看| 少妇精品视频一区二区免费看| 91精品国产毛片武则天| 亚洲国产精品成人综合色在线婷婷| 亚洲欧美另类视频| 国产精品免费一区二区三区都可以| 狠狠干综合网|