重學TCP協議(8) TCP的11種狀態

TCP的11種狀態

image.png

為了邏輯更加清晰,假設主動打開連接和關閉連接皆為客戶端,被動打開連接和關閉連接皆為服務端

  1. 客戶端獨有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT

  2. 服務器獨有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。

  3. 共有的:(1)CLOSED (2)ESTABLISHED 。

1. LISTEN(服務端)

首先服務端需要打開一個 socket 進行監聽,狀態為LISTEN

有提供某種服務才會處于LISTENING狀態, TCP狀態變化就是某個端口的狀態變化,提供一個服務就打開一個端口,例如:提供www服務默認開的是80端口,提供ftp服務默認的端口為21,當提供的服務沒有被連接時就處于LISTENING狀態。FTP服務啟動后首先處于偵聽(LISTENING)狀態。處于偵聽LISTENING狀態時,該端口是開放的,等待連接,但還沒有被連接。就像你房子的門已經敞開的,但還沒有人進來。

在客戶端發送連接請求后,等待匹配的連接請求:
客戶端通過應用程序調用connect進行active open.于是客戶端tcp發送一個SYN以請求建立一個連接.之后狀態置為SYN_SENT. /*The socket is actively attempting to establish a connection. 在發送連接請求后等待匹配的連接請求 */

2. SYN_SENT(客戶端)

當請求連接時客戶端首先要發送同步信號給要訪問的機器,此時狀態為SYN_SENT,同時會開啟一個定時器,如果超時還沒有收到ACK會重發 SYN。正常情況下SYN_SENT狀態非常短暫。

例如要訪問網站http://www.baidu.com ,如果是正常連接的話,用TCPView觀察 IEXPLORE .EXE(IE)建立的連接會發現很快從SYN_SENT變為ESTABLISHED,表示連接成功。SYN_SENT狀態快的也許看不到。

3. SYN-RECEIVED(服務端)

收到和發送一個連接請求后,等待對方對連接請求的確認。當服務器收到客戶端發送的同步信號時,將標志位ACK和SYN置1發送給客戶端,此時服務器端處于SYN_RCVD狀態,如果連接成功了就變為ESTABLISHED,正常情況下SYN_RCVD狀態非常短暫。

4. ESTABLISHED(共有)

ESTABLISHED狀態是表示兩臺機器正在傳輸數據,觀察這個狀態最主要的就是看哪個程序正在處于ESTABLISHED狀態。

5. FIN_WAIT_1(客戶端)

主動關閉(active close)端應用程序調用close,于是其TCP發出FIN請求主動關閉連接,之后進入FIN_WAIT_1狀態.

6. FIN-WAIT_2(客戶端)

主動關閉端接到服務端的ACK后,就進入了FIN-WAIT-2。這就是著名的半關閉的狀態了,這是在關閉連接時,客戶端和服務器兩次握手之后的狀態。在這個狀態下,應用程序還有接受數據的能力,但是已經無法發送數據,但是也有一種可能是,客戶端一直處于FIN_WAIT_2狀態,而服務器則一直處于WAIT_CLOSE狀態,而直到應用層來決定關閉這個狀態

7. CLOSE_WAIT(服務端)

服務端端TCP接到FIN后,就發出ACK以回應FIN請求(它的接收也作為文件結束符傳遞給上層應用程序),并進入CLOSE_WAIT.

8. TIME-WAIT(客戶端)

在客戶端接收到服務端的FIN后,客戶端就發送ACK包,并進入TIME-WAIT狀態

TIME_WAIT等待狀態,這個狀態又叫做2MSL狀態,說的是在TIME_WAIT2發送了最后一個ACK數據報以后,要進入TIME_WAIT狀態,這個狀態是防止最后一次握手的數據報沒有傳送到對方那里而準備的(注意這不是四次握手,這是第四次握手的保險狀態)。這個狀態在很大程度上保證了雙方都可以正常結束。

9. LAST-ACK(服務端)

服務端已經發送FIN以后等待客戶端發送的ACK

被動關閉端一段時間后,接收到文件結束符的應用程序將調用CLOSE關閉連接。這導致它的TCP也發送一個 FIN,等待對方的ACK.就進入了LAST-ACK

10. CLOSING(客戶端)

CLOSING狀態在「同時關閉」的情況下出現。這里的同時關閉中的「同時」其實并不是時間意義上的同時,而是指的是在發送 FIN 包還未收到確認之前,收到了對端的 FIN 的情況

11. closed(共有)

服務端在接受到ACK包后,就進入了closed的狀態。連接結束

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391150.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391150.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

肯尼亞第三方支付_肯尼亞的COVID-19病例正在Swift增加,我們不知道為什么。

肯尼亞第三方支付COVID-19 cases in Kenya are accelerating rapidly. New cases have increased 300% month-over-month since April of this year while global and regional media have reported on the economic toll of stringent lock-down measures and heavy-handed go…

JVM命令

1、jps 查看所有虛擬機進程 -v 虛擬機啟動時JVM參數 -l 執行主類全名 2、jstat 顯示本地或遠程類裝載、內存、垃圾回收、JIT編譯等運行數據(性能問題定位工具首選) 格式:jstat [-option] vmid ms count (示例&a…

Java 集合 List Arrays.asList

2019獨角獸企業重金招聘Python工程師標準>>> 參考鏈接:阿里巴巴Java開發手冊終極版v1.3.0 【強制】使用工具類 Arrays.asList()把數組轉換成集合時,不能使用其修改集合相關的方 法,它的 add/remove/clear 方法會拋出 UnsupportedO…

重學TCP協議(9) 半連接隊列、全連接隊列

1. 半連接隊列、全連接隊列基本概念 三次握手中,在第一步server收到client的syn后,把相關信息放到半連接隊列中,同時回復synack給client(第二步),同時開啟一個定時器,如果超時還未收到 ACK 會進…

分類預測回歸預測_我們應該如何匯總分類預測?

分類預測回歸預測If you are reading this, then you probably tried to predict who will survive the Titanic shipwreck. This Kaggle competition is a canonical example of machine learning, and a right of passage for any aspiring data scientist. What if instead …

【CZY選講·Yjq的棺材】

題目描述? Yjq想要將一個長為寬為的矩形棺材(棺材表面絕對光滑,所以棺材可以任意的滑動)拖過一個L型墓道。? 如圖所示,L型墓道兩個走廊的寬度分別是和,呈90,并且走廊的長度遠大于。? 現在Hja想知道對于給…

“機器換人”之潮涌向珠三角,藍領工人將何去何從

企業表示很無奈,由于生產需要,并非刻意換人。 隨著傳統產業向更加現代化、自動化的新產業轉型,“機器換人”似乎是歷史上不可逆轉的潮流。 據報道,珠三角經濟圈所在的廣東省要從傳統的制造大省向制造強省轉變,企業轉型…

slack通知本地服務器_通過構建自己的Slack App學習無服務器

slack通知本地服務器Serverless architecture is the industrys latest buzzword and many of the largest tech companies have begun to embrace it. 無服務器架構是業界最新的流行語,許多大型科技公司已開始采用它。 In this article, well learn what it is an…

深入理解InnoDB(6)—獨立表空間

InnoDB的表空間 表空間可以看做是InnoDB存儲引擎邏輯結構的最高層 ,所有的數據都是存放在表空間中。 1. Extent 對于16KB的頁來說,連續的64個頁就是一個區,也就是說一個區默認占用1MB空間大小。 每256個區被劃分成一組,第一組的前3個頁面是…

神經網絡推理_分析神經網絡推理性能的新工具

神經網絡推理Measuring the inference time of a trained deep neural model on different hardware devices is a critical task when making deployment decisions. Should you deploy your inference on 8 Nvidia V100s, on 12 P100s, or perhaps you can use 64 CPU cores?…

Eclipse斷點調試

1.1 Eclipse斷點調試概述Eclipse的斷點調試可以查看程序的執行流程和解決程序中的bug1.2 Eclipse斷點調試常用操作:A:什么是斷點:就是一個標記,從哪里開始。B:如何設置斷點:你想看哪里的程序,你就在那個有效程序的左邊雙擊即可。C…

react部署在node_如何在沒有命令行的情況下在3分鐘內將React + Node應用程序部署到Heroku

react部署在nodeIn this tutorial we will be doing a basic React Node app deploy to Heroku. 在本教程中,我們將進行基本的React Node應用程序部署到Heroku。 There are a lot of tutorials that do this only using the command line, so to change things u…

深入理解InnoDB(7)—系統表空間

系統表空間 可以看到,系統表空間和獨立表空間的前三個頁面(頁號分別為0、1、2,類型分別是FSP_HDR、IBUF_BITMAP、INODE)的類型是一致的,只是頁號為3~7的頁面是系統表空間特有的 頁號3 SYS: Insert Buffer …

CodeForces - 869B The Eternal Immortality

題意&#xff1a;已知a,b&#xff0c;求的最后一位。 分析&#xff1a; 1、若b-a>5&#xff0c;則尾數一定為0&#xff0c;因為連續5個數的尾數要么同時包括一個5和一個偶數&#xff0c;要么包括一個0。 2、若b-a<5&#xff0c;直接暴力求即可。 #include<cstdio>…

如何在24行JavaScript中實現Redux

90% convention, 10% library. 90&#xff05;的慣例&#xff0c;10&#xff05;的圖書館。 Redux is among the most important JavaScript libraries ever created. Inspired by prior art like Flux and Elm, Redux put JavaScript functional programming on the map by i…

卡方檢驗 原理_什么是卡方檢驗及其工作原理?

卡方檢驗 原理As a data science engineer, it’s imperative that the sample data set which you pick from the data is reliable, clean, and well tested for its usability in machine learning model building.作為數據科學工程師&#xff0c;當務之急是從數據中挑選出的…

Web UI 設計(網頁設計)命名規范

Web UI 設計命名規范 一.網站設計及基本框架結構: 1. Container“container“ 就是將頁面中的所有元素包在一起的部分&#xff0c;這部分還可以命名為: “wrapper“, “wrap“, “page“.2. Header“header” 是網站頁面的頭部區域&#xff0c;一般來講&#xff0c;它包含…

leetcode 1486. 數組異或操作(位運算)

給你兩個整數&#xff0c;n 和 start 。 數組 nums 定義為&#xff1a;nums[i] start 2*i&#xff08;下標從 0 開始&#xff09;且 n nums.length 。 請返回 nums 中所有元素按位異或&#xff08;XOR&#xff09;后得到的結果。 示例 1&#xff1a; 輸入&#xff1a;n …

27個機器學習圖表翻譯_使用機器學習的信息圖表信息組織

27個機器學習圖表翻譯Infographics are crucial for presenting information in a more digestible fashion to the audience. With their usage being expanding to many (if not all) professions like journalism, science, and research, advertisements, business, the re…

在HTML中使用javascript (js高級程序設計)

在HTML中使用javascript 剛開始入門的時候覺得關于應用以及在html中只用javascript很簡單&#xff0c;不需要進行學習。我又開始重溫了一下紅寶書&#xff0c;覺得還是有必要進行學習的。這是一個筆記&#xff01; script 元素插入有多種方式 屬性使用方式async延遲腳本&#x…