国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

TCP/IP狀態變遷圖和TCP三次握手與四次揮手

網絡 網絡管理
由于TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。原則是主動關閉的一方發送一個FIN報文來表示終止這個方向的連接,收到一個FIN意味著這個方向不再有數據流動,但另一個方向仍能繼續發送數據,直到另一個方向也發送FIN報文。

TCP/IP狀態變遷圖:

TCP/IP狀態變遷圖:

各狀態詳細描述:

CLOSED:表示初始狀態。對服務端和C客戶端雙方都一樣。

LISTEN:表示監聽狀態。服務端調用了listen函數,可以開始accept連接了。

SYN_SENT:表示客戶端已經發送了SYN報文。當客戶端調用connect函數發起連接時,首先發SYN給服務端,然后自己進入SYN_SENT狀態,并等待服務端發送ACK+SYN。

SYN_RCVD:表示服務端收到客戶端發送SYN報文。服務端收到這個報文后,進入SYN_RCVD狀態,然后發送ACK+SYN給客戶端。

ESTABLISHED:表示連接已經建立成功了。服務端發送完ACK+SYN后進入該狀態,客戶端收到ACK后也進入該狀態。

FIN_WAIT_1:表示主動關閉連接。無論哪方調用close函數發送FIN報文都會進入這個這個狀態。

FIN_WAIT_2:表示被動關閉方同意關閉連接。主動關閉連接方收到被動關閉方返回的ACK后,會進入該狀態。

TIME_WAIT:表示收到對方的FIN報文并發送了ACK報文,就等2MSL后即可回到CLOSED狀態了。如果FIN_WAIT_1狀態下,收到對方同時帶FIN標志和ACK標志的報文時,可以直接進入TIME_WAIT狀態,而無須經過FIN_WAIT_2狀態。

CLOSING:表示雙方同時關閉連接。如果雙方幾乎同時調用close函數,那么會出現雙方同時發送FIN報文的情況,就會出現CLOSING狀態,表示雙方都在關閉連接。

CLOSE_WAIT:表示被動關閉方等待關閉。當收到對方調用close函數發送的FIN報文時,回應對方ACK報文,此時進入CLOSE_WAIT狀態。

LAST_ACK:表示被動關閉方發送FIN報文后,等待對方的ACK報文狀態,當收到ACK后進入CLOSED狀態。

1. 連接建立

1) Client

當Client端調用socket函數調用時,相當于Client端產生了一個處于Closed狀態的套接字。

Client端又調用connect函數調用,系統為Client隨機分配一個端口,連同傳入connect中的參數(Server的IP和端口),這就形成了一個連接四元組,connect調用讓Client端的socket處于SYN_SENT狀態。

當Server返回確認,并發送SYN,Client返回確認及SYN后,套接字處于ESTABLISHED階段,此時雙方的連接已經可以進行讀寫操作。

2)Server

當Server端調用socket函數調用時,相當于Server端產生了一個處于Closed狀態的監聽套接字,Server端調用bind操作,將監聽套接字與指定的地址和端口關聯,然后又調用listen函數,系統會為其分配未完成隊列和完成隊列,此時的監聽套接字可以接受Client的連接,監聽套接字狀態處于LISTEN狀態。

當Server端調用accept操作時,會從完成隊列中取出一個已經完成的client連接,同時在server這端會產生一個會話套接字,用于和client端套接字的通信,這個會話套接字的狀態是ESTABLISH。

2. 連接關閉

與連接建立分為server/client不同,連接關閉并沒有絕對的server/client之分,連接關閉分為主動關閉和被動關閉。Server和client都可以擔任這兩個角色中的任意一個。如client可以關閉它與server的連接,同樣的server一樣也可以關閉一些長時間無讀寫事件發生的連接。既然這么說了,下面就會分成兩個部分:client主動關閉,server主動關閉。

Client主動關閉,Server被動關閉:

Client主動關閉,Server被動關閉的情況還是蠻多的,比如說短連接中,當一次會話結束時,client就可以關閉它與server之間的連接。

我們這邊直接說close而非shutdown。

當client想要關閉它與server之間的連接,首先client這邊會首先調用close函數,client端會發送一個FIN到server端,client端處于FIN_WAIT1狀態。當server端返回給client ACK后,client處于FIN_WAIT2狀態,server處于CLOSE_WAIT狀態。

當server端檢測到client端的關閉操作(read返回為0),server端也需要調用close操作,server端會向client端發送一個FIN。此時server的狀態為LAST_ACK,當 client收到來自server的FIN后,client端的套接字處于TIME_WAIT狀態,它會向server端再發送一個ack確認,此時server端收到ack確認后,此套接字處于CLOSED狀態。

Server端主動關閉的流程與Client端關閉類似,就不再多講,下面還需要關注的是TIME_WAIT這個狀態,分別按照client/server兩個部分講述。

首先說一下TCP/IP詳解中描述的關于TIME_WAIT的描述及其存在的必要性:

主動關閉的socket當收到對端的FIN操作后,該socket就會處于TIME_WAIT狀態,處于TIME_WAIT狀態的socket會存活2MSL(Max Segment Lifetime),

之所以存活這么長時間是有理由的:

一方面是可靠的實現TCP全雙工連接的終止,也就是當***的ACK丟失后,被動關閉端會重發FIN,因此主動關閉端需要維持狀態信息,以允許它重新發送最終的ACK。

另一方面TCP在2MSL等待期間,定義這個連接(4元組)不能再使用,任何遲到的報文都會丟棄。設想如果沒有2MSL的限制,恰好新到的連接正好滿足原先的4元組,這時候連接就可能接收到網絡上的延遲報文就可能干擾***建立的連接。重復的分節在網絡中消逝。

#p#3. Server端的監聽套接字與會話套接字的不同:

當server端的socket調用bind和listen之后,監聽套接字的狀態就會變為LISTEN狀態,監聽套接字的工作決定了它只是監聽連接。

當server端調用accept,相當于從套接字的完成隊列中取出一個client的連接,此時可以確定四元組,即:client的IP和port;server的IP和port,雙方各有一個套接字進行交互,這里需要說一下server端的socket,我稱server端accept后產生的套接字為會話套接字,這個套接字一出生的狀態就是ESTABLISH。由server端得四元組我們可以看出,一個server從理論上可以接收的連接數量取決于文件描述符的個數。

4,狀態為TIME_WAIT是不是所有執行主動關閉的socket都會進入TIME_WAIT狀態呢?

有沒有什么情況使主動關閉的socket直接進入CLOSED狀態呢?

主動關閉的一方在發送***一個 ack 后就會進入 TIME_WAIT 狀態 停留2MSL(max segment lifetime)時間,這個是TCP/IP必不可少的,也就是“解決”不了的。也就是TCP/IP設計者本來是這么設計的。

主要有兩個原因:

1。防止上一次連接中的包,迷路后重新出現,影響新連接(經過2MSL,上一次連接中所有的重復包都會消失)

2。可靠的關閉TCP連接。在主動關閉方發送的***一個 ack(fin) ,有可能丟失,這時被動方會重新發 fin, 如果這時主動方處于 CLOSED 狀態 ,就會響應 rst 而不是 ack。所以 主動方要處于 TIME_WAIT 狀態,而不能是 CLOSED 。

特別提示的是:為什么TIME_WAIT狀態還需要等待2MSL才能回到CLOSED狀態?或者為什么TCP要引入TIME_WAIT狀態?

《TCP/IP詳解》中如此解釋:當TCP執行一個主動關閉,并發回***一個ACK后,該連接必須在TIME_WAIT狀態停留的時間為2倍的MSL,這樣可以讓TCP再次發送***的ACK以防止這個ACK丟失(另一端超時重發***的FIN)。

附注:MSL(Maximum Segment Lifetime)即***生存時間,RFC 793中指出MSL為2分鐘,但是實現中的常用值為30秒、1分鐘或者2分鐘。

建立TCP連接(三次握手)

由于TCP協議提供可靠的連接服務,于是采用有保障的三次握手方式來創建一個TCP連接。三次握手的具體過程如下:

客戶端發送一個帶SYN標志的TCP報文(報文1)到服務器端,表示希望建立一個TCP連接。

服務器發送一個帶ACK標志和SYN標志的TCP報文(報文2)給客戶端,ACK用于對報文1的回應,SYN用于詢問客戶端是否準備好進行數據傳輸。

客戶端發送一個帶ACK標志的TCP報文(報文3),作為報文2的回應。

至此,一個TCP連接就建立起來了。

終止TCP連接(四次揮手)

由于TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。原則是主動關閉的一方(如已傳輸完所有數據等原因)發送一個FIN報文來表示終止這個方向的連接,收到一個FIN意味著這個方向不再有數據流動,但另一個方向仍能繼續發送數據,直到另一個方向也發送FIN報文。

四次揮手的具體過程如下:

客戶端發送一個FIN報文(報文4)給服務器,表示我將關閉客戶端到服務器端這個方向的連接。

服務器收到報文4后,發送一個ACK報文(報文5)給客戶端,序號為報文4的序號加1。

服務器發送一個FIN報文(報文6)給客戶端,表示自己也將關閉服務器端到客戶端這個方向的連接。

客戶端收到報文6后,發回一個ACK報文(報文7)給服務器,序號為報文6的序號加1。

至此,一個TCP連接就關閉了。(4次揮手不是關閉TCP連接的唯一辦法,見下文Q3疑問)

TCP三次握手,四次揮手的時序圖:

TCP三次握手,四次揮手的時序圖:

TCP相關疑問

幾個常見的TCP/IP相關的疑問:

Q1 為什么在TCP協議里,建立連接是三次握手,而關閉連接卻是四次握手呢?

A1因為當處于LISTEN 狀態的服務器端SOCKET當收到SYN報文(客戶端希望新建一個TCP連接)后,它可以把ACK(應答作用)和SYN(同步作用)放在同一個報文里來發送給客戶端。但在關閉TCP連接時,當收到對方的FIN報文時,對方僅僅表示對方沒有數據發送給你了,但未必你的所有數據都已經全部發送給了對方,所以你大可不必馬上關閉SOCKET(發送一個FIN報文),等你發送完剩余的數據給對方之后,再發送FIN報文給對方來表示你同意現在關閉連接了,所以通常情況下,這里的ACK報文和FIN報文都是分開發送的。

Q2為什么TIME_WAIT 狀態還需要等2*MSL秒之后才能返回到CLOSED 狀態呢?

A2因為雖然雙方都同意關閉連接了,而且握手的4個報文也都發送完畢,按理可以直接回到CLOSED 狀態(就好比從SYN_SENT 狀態到ESTABLISH 狀態那樣),但是我們必須假想網絡是不可靠的,你無法保證你(客戶端)***發送的ACK報文一定會被對方收到,就是說對方處于LAST_ACK 狀態下的SOCKET可能會因為超時未收到ACK報文,而重發FIN報文,所以這個TIME_WAIT 狀態的作用就是用來重發可能丟失的ACK報文。

Q3關閉TCP連接一定需要4次揮手嗎?

A3不一定,4次揮手關閉TCP連接是最安全的做法。但在有些時候,我們不喜歡TIME_WAIT 狀態(如當MSL數值設置過大導致服務器端有太多TIME_WAIT狀態的TCP連接,減少這些條目數可以更快地關閉連接,為新連接釋放更多資源),這時我們可以通過設置SOCKET變量的SO_LINGER標志來避免SOCKET在close()之后進入TIME_WAIT狀態,這時將通過發送RST強制終止TCP連接(取代正常的TCP四次握手的終止方式)。但這并不是一個很好的主意,TIME_WAIT 對于我們來說往往是有利的。

責任編輯:林琳 來源: ChinaUnix博客
相關推薦

2023-10-24 15:22:09

TCPUDP

2024-01-12 08:23:11

TCPACK服務器

2015-10-13 09:42:52

TCP網絡協議

2020-06-29 14:50:47

TCP狀態ACK

2015-11-09 09:58:56

2021-05-18 12:27:40

TCP控制協議

2021-01-29 06:11:08

TCP通信三次握手

2019-06-12 11:26:37

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

2021-05-28 09:08:20

TCP連接序列號

2023-10-28 09:07:57

TCP面試三次握手

2023-11-01 08:04:08

WiresharkTCP協議

2018-08-10 09:23:19

TCP考點數據

2025-05-20 08:38:03

2022-11-17 10:20:49

TCP三次握手四次揮手

2021-08-04 08:01:28

Linux 三次握手Linux 系統

2023-10-17 15:44:19

TCP四次揮手
點贊
收藏

51CTO技術棧公眾號

色视频网站在线| 毛片在线看片| 一区二区三区网站| 亚洲精品电影久久久| 精品国产乱码久久久久软件| 外国成人激情视频| 天天影视网天天综合色在线播放| 久久影院理伦片| 久久精品福利| www.av亚洲| 欧美好骚综合网| 欧美亚洲综合另类| a天堂中文在线官网| 不卡欧美aaaaa| 亚洲一区二区四区| 国产精品地址| 国产拍精品一二三| 1024精品视频| 尤物精品在线| 91精品视频网站| 欧美伦理影院| 国产欧美日韩中文字幕| 在线观看视频一区二区三区| 日韩欧美综合一区| 日本在线观看免费| 欧美日韩在线一区二区| 久草在线免费福利| 亚洲欧洲美洲综合色网| 亚洲日韩第一页| 国外成人在线视频| 亚洲日日夜夜| 69久久夜色精品国产7777| 国产无遮挡裸体免费久久| 久久九九免费视频| 国产香蕉精品| 7777精品久久久大香线蕉小说| 亚州av乱码久久精品蜜桃| 成人av综合在线| www.日日操| 欧美性xxxxx| 麻豆传媒在线免费看| 日韩你懂的在线播放| 国产一区高清| 国产精品视频地址| 日韩亚洲国产精品| 日本在线视频www| 亚洲高清免费观看高清完整版在线观看| 女人天堂在线| 另类春色校园亚洲| 亚洲日本在线a| 天堂а√在线8种子蜜桃视频| 亚洲综合二区| 无遮挡亚洲一区| 一区二区三区高清不卡| 毛片电影在线| 国产精品日韩欧美大师| 极品少妇xxxx精品少妇偷拍| 午夜av电影| 日日骚av一区| 日韩精品91亚洲二区在线观看| 成人av小说网| 欧美成人精品在线| 毛片一区二区三区| 欧美日韩免费做爰大片| 97国产精品免费视频| 国产一区二区三区四区五区美女| 九色视频一区| 中文乱码免费一区二区三区下载| 欧美成人bangbros| 国产精品成人免费精品自在线观看| 亚洲永久免费视频| 老司机精品影院| 一本色道久久综合狠狠躁篇怎么玩 | 久久艳片www.17c.com| 九九在线精品| 欧美高清性xxxxhdvideosex| jizz一区二区| av在线第一页| www.亚洲人.com| 99精品全国免费观看视频软件| 异国色恋浪漫潭| 亚洲成a人v欧美综合天堂下载| 欧美xxxx免费虐| 欧美亚洲在线视频| 免费观看日韩av| 特级全黄一级毛片| 亚洲视频网站在线观看| 亚洲综合中文| 无码人妻丰满熟妇区毛片| 欧美日本一道本| 日本久久电影网| 国产日韩电影| aa成人免费视频| 欧美国产激情一区二区三区蜜月 | 久久综合久久久久88| 五月天婷婷在线视频| 久久久这里只有精品视频| 久久一区欧美| 噼里啪啦在线中文观看| 色老头一区二区三区在线观看| 亚洲国产一区二区三区高清 | 成人国产免费视频| 免费在线视频你懂得| 裸体女人亚洲精品一区| 日产国产欧美视频一区精品| 无人视频在线观看免费| 欧美激情女人20p| 国产成人99久久亚洲综合精品| 国产毛片在线| 国产精品人成电影| 中文子幕无线码一区tr| 欧美13videosex性极品| 国产精品区一区| 亚洲午夜在线视频| 一区二区三区欧洲区| 欧美一二三不卡| 香蕉大人久久国产成人av| 亚洲成人久久久| av成人天堂| 黄色免费在线播放| 欧美综合激情网| 91浏览器在线视频| 成人性生活av| 在线观看成人av电影| 欧美日韩一区二区电影| 一个色综合网| 四虎影视在线播放| 国产日韩精品入口| 一区二区成人在线视频| 欧美激情网址| 少妇网站在线观看| 97久久精品国产| 久久先锋资源网| 日本精品在线播放| 亚洲乱码中文字幕久久孕妇黑人| 在线观看亚洲视频| 成人午夜短视频| 国产激情欧美| 国产一级大片免费看| 亚洲美女在线观看| 国产91精品精华液一区二区三区 | 国产精品国产福利国产秒拍| 欧美国产一区视频在线观看| 久久久精彩视频| 午夜亚洲福利| 国产黄在线播放| 久久99精品久久久久久三级| 欧美天天综合网| 久久高清国产| 美女av在线免费看| 99久久久精品视频| 欧美黄色免费网站| 中文字幕在线一区免费| 国产欧美日韩免费观看| 伊人成综合网伊人222| av在线不卡免费| 99re热视频在线| 亚洲自拍小视频免费观看| 色就色 综合激情| 红桃视频国产精品| 免费在线观看黄| 国产一区二区在线免费视频| 国产色一区二区| 亚洲精品tv| 久青草视频在线播放| 国内精品久久久久久影视8| 韩国亚洲精品| 亚洲羞羞网站| 成年人观看网站| 成人在线国产精品| 91色视频在线导航| 高潮白浆女日韩av免费看| 天天av综合| 亚洲最大综合网| 日韩精品久久久久 | 一区二区三区视频免费观看| 国产日韩一区二区在线| 欧美激情国产高清| 亚洲一区二区三区四区五区黄 | 91精品国产综合久久蜜臀| 日本欧美一区二区三区| 福利一区视频| 免费看黄视频网站| aa成人免费视频| 日韩av在线免费| 国产嫩草影院久久久久| 欧美/亚洲一区| **欧美日韩在线观看| 色琪琪原网站亚洲香蕉| 国产精品伊人日日| 视频在线观看99| 黄色成人在线播放| 国产成人综合网站| 伊人成综合网伊人222| 大片免费在线看视频| 亚洲这里只有精品| 日韩精品在在线一区二区中文| 欧美裸体xxxx极品少妇| 欧美日韩国产高清一区二区| 91蝌蚪porny成人天涯|