色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TCP狀態機設計與實現

CHANBAEK ? 來源:嵌入式攻城獅 ? 作者:安迪西 ? 2023-04-21 11:47 ? 次閱讀

1.TCP狀態機

TCP狀態機是TCP連接的變化過程。 TCP在三次握手和四次揮手的過程,就是一個TCP的狀態說明,由于TCP是一個面向連接的,可靠的傳輸,每一次的傳輸都會經歷連接,傳輸,關閉的過程,無論是哪個方向的傳輸,必須建立連接才行,在雙方通信的過程中,TCP的狀態是不一樣的

下圖說明了TCP狀態的變化過程

圖片

上圖中不同線條的含義

  • 粗線:主動發起連接(可理解為客戶端模型)
  • 虛線:被動發起連接(可理解為服務器模型)
  • 細線:兩端同時操作

TCP各個狀態的解釋如下:

CLOSED 表示初始狀態

LISTEN 表示服務器端的某個socket處于監聽狀態,可以接受連接

SYN_SENT 與SYN_RCVD呼應,當客戶端socket執行connect連接時,它首先發送SYN報文,隨即進入到了SYN_SENT狀態,并等待服務端的發送三次握手中的第2個報文。 該狀態表示客戶端已發送SYN報文

SYN_RCVD 表示接收到SYN報文,正常情況下,該狀態是服務器端的socket在建立TCP連接時的三次握手會話過程中的一個中間狀態,很短暫。 此種狀態時,當收到客戶端的ACK報文后,會進入到ESTABLISHED狀態

ESTABLISHED 表示連接已經建立

FIN_WAIT_1 表示等待對方的FIN報文,當socket在ESTABLISHED狀態時,想主動關閉連接,向對方發送了FIN報文,此時該socket進入到FIN_WAIT_1狀態

FIN_WAIT_2 主動關閉鏈接的一方,發出FIN收到ACK以后進入該狀態,稱為半連接或半關閉狀態,此時socket只能接收數據,不能發。 當對方回應ACK后,socket即進入到FIN_WAIT_2狀態,正常情況下,對方應馬上回應ACK報文,所以FIN_WAIT_1狀態一般較難見到,而FIN_WAIT_2狀態可用netstat看到

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

CLOSING 這種狀態較特殊,屬于一種較罕見的狀態。 正常情況下,當發送FIN報文后,按理來說是應該先收到(或同時收到)對方的 ACK報文,再收到對方的FIN報文。 但是CLOSING狀態表示你發送FIN報文后,并沒有收到對方的ACK報文,反而卻也收到了對方的FIN報文。 什么情況下會出現此種情況呢? 如果雙方幾乎在同時close一個socket的話,那么就出現了雙方同時發送FIN報文的情況,也即會出現CLOSING狀態,表示雙方都正在關閉socket連接

CLOSE_WAIT 此種狀態表示在等待關閉。 當對方關閉一個socket后發送FIN報文給自己,系統回應一個ACK報文給對方,此時進入CLOSE_WAIT狀態。 接下來察看是否還有數據發送給對方,若無,則可close這個socket,發送FIN報文給對方,即關閉連接。 所以在CLOSE_WAIT狀態下,需要關閉連接

LAST_ACK 該狀態是被動關閉一方在發送FIN報文后,最后等待對方的ACK報文。 當收到ACK報文后,即可以進入到CLOSED可用狀態

2.TCP狀態分析

2.1 TCP狀態分析工具

利用網絡助手 + nc命令 + netstat命令工具,來查看及分析TCP狀態:

使用網絡調試助手創建服務器(或客戶端)

使用nc命令(netcat)創建客戶端(服務端)

connect to somewhere:   nc [-options] hostname port[s] [ports] ...
listen for inbound:     nc -l -p port [options] [hostname] [port]
options:
        -d              detach from console, background mode
        -e prog         inbound program to exec [dangerous!!]
        -g gateway      source-routing hop point[s], up to 8
        -G num          source-routing pointer: 4, 8, 12, ...
        -h              this cruft
        -i secs         delay interval for lines sent, ports scanned
        -l              listen mode, for inbound connects
        -L              listen harder, re-listen on socket close
        -n              numeric-only IP addresses, no DNS
        -o file         hex dump of traffic
        -p port         local port number
        -r              randomize local and remote ports
        -s addr         local source address
        -t              answer TELNET negotiation
        -c              send CRLF instead of just LF
        -u              UDP mode
        -v              verbose [use twice to be more verbose]
        -w secs         timeout for connects and final net reads
        -z              zero-I/O mode [used for scanning]
port numbers can be individual or ranges: m-n [inclusive]

nc 連接服務器

nc 127.0.0.1 6666

nc 建立服務器

nc -l -p 6666

使用netstat和find命令查看tcp狀態

netstat命令:

顯示協議統計信息和當前 TCP/IP 網絡連接。
NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]
  -a        顯示所有連接和偵聽端口。
  -b        顯示在創建每個連接或偵聽端口時涉及的可執行程序。在某些情況下,已知可執
  	    行程序承載多個獨立的組件,這些情況下,顯示創建連接或偵聽端口時涉及的組
  	    件序列。在此情況下,可執行程序的名稱位于底部 [] 中,它調用的組件位于頂
  	    部,直至達到 TCP/IP。注意,此選項可能很耗時,并且在你沒有足夠權限時可
  	    能失敗。
  -e        顯示以太網統計信息。此選項可以與 -s 選項結合使用。
  -f        顯示外部地址的完全限定域名(FQDN)。
  -n        以數字形式顯示地址和端口號。
  -o        顯示擁有的與每個連接關聯的進程 ID。
  -p proto  顯示 proto 指定的協議的連接;proto可以是下列任何一個: TCP、UDP、TCPv6 
  	    或 UDPv6。如果與 -s 選項一起用來顯示每個協議的統計信息,proto 可以是下
  	    列任何一個: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
  -q        顯示所有連接、偵聽端口和綁定的非偵聽 TCP 端口。綁定的非偵聽端口不一定與
  	    活動連接相關聯。
  -r        顯示路由表。
  -s        顯示每個協議的統計信息。默認情況下,
            顯示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的統計信息;
  -p        選項可用于指定默認的子網。
  -t        顯示當前連接卸載狀態。
  -x        顯示 NetworkDirect 連接、偵聽器和共享終結點。
  -y        顯示所有連接的 TCP 連接模板。無法與其他選項結合使用。
  interval  重新顯示選定的統計信息,各個顯示間暫停的間隔秒數。按 CTRL+C 停止重新顯示
            統計信息。如果省略,則 netstat 將打印當前的配置信息一次。

find命令:

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

  /V         顯示所有未包含指定字符串的行。
  /C         僅顯示包含字符串的行數。
  /N         顯示行號。
  /I         搜索字符串時忽略大小寫。
  /OFF[LINE] 不要跳過具有脫機屬性集的文件。
  "string"   指定要搜索的文本字符串。
  [drive:][path]filename 指定要搜索的文件。

如果沒有指定路徑,FIND 將搜索在提示符處鍵入文本或者由另一命令產生的文本。

2.2 TCP狀態分析流程

使用網絡調試助手開啟一個服務器,監聽“127.0.0.1”和端口“6666”

圖片

此時使用nc命令 netstat -an -p tcp | find “6666” 可見端口“6666”的狀態為:

LISTENING

圖片

重開一個cmd命令對話框,使用nc命令nc 127.0.0.1 6666連接服務器

圖片

再次使用nc命令netstat -an -p tcp | find “6666” 可見端口“6666”的狀態為:

ESTABLISHED

圖片

網絡調試助手停止監聽后,再次查看tcp端口“6666”,此時的狀態為:TIME_WAIT

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9124

    瀏覽量

    85331
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1353

    瀏覽量

    79056
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27529
  • 客戶端
    +關注

    關注

    1

    文章

    290

    瀏覽量

    16684
收藏 人收藏

    評論

    相關推薦

    FPGA工程師:如何在FPGA中實現狀態機

    安全高效的狀態機設計對于任何使用FPGA的工程師而言都是一項重要技能。選擇Moore狀態機、Mealy狀態機還是混合機取決于整個系統的需求。無論選擇哪種類型的狀態機,充分掌握
    發表于 03-29 15:02 ?1.3w次閱讀
    FPGA工程師:如何在FPGA中<b class='flag-5'>實現狀態機</b>?

    Spring狀態機實現原理和使用方法

    說起 Spring 狀態機,大家很容易聯想到這個狀態機和設計模式中狀態模式的區別是啥呢?沒錯,Spring 狀態機就是狀態模式的一種
    的頭像 發表于 12-26 09:39 ?1977次閱讀
    Spring<b class='flag-5'>狀態機</b>的<b class='flag-5'>實現</b>原理和使用方法

    高效安全的狀態機設

    本帖最后由 eehome 于 2013-1-5 09:56 編輯 高效安全的狀態機設
    發表于 08-13 17:53

    狀態機設計的例子

    本帖最后由 eehome 于 2013-1-5 09:56 編輯 狀態機設計的例子
    發表于 08-19 23:01

    狀態機設計指導

    狀態機設計指導
    發表于 08-20 23:45

    狀態機設計問題

    狀態機設計中always @(*) beginnext = 2'bx;case (state)idle: next=s1;s1: next=s2;s2: next=idle;end以上代碼先給
    發表于 10-06 18:49

    一個簡單的狀態機設

    筆試時也很常見。[例1] 一個簡單的狀態機設計--序列檢測器序列檢測器是時序數字電路設計中經典的教學范例,下面我們將用Verilog HDL語言來描述、仿真、并實現它。序列檢測器的邏輯功能...
    發表于 02-16 07:29

    如何寫好狀態機

    如何寫好狀態機:狀態機是邏輯設計的重要內容,狀態機的設計水平直接反應工程師的邏輯功底,所以許多公司的硬件和邏輯工程師面試中,狀態機設計幾乎是必選題目。本章在引入
    發表于 06-14 19:24 ?97次下載

    狀態機設

    狀態機設計:8.1.1 數據類型定義語句TYPE語句的用法如下:TYPE 數據類型名IS 數據類型定義OF 基本數據類型;或TYPE 數據類型名IS 數據類型定義;TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_L
    發表于 08-09 23:07 ?36次下載

    高速環境下FPGA或CPLD中的狀態機設

        本文給出了采用這些技術的高速環境狀態機設計的規范及分析方法和優化方法,并給出了相應的示例。       為了使FPGA或CPLD中的狀態機設
    發表于 04-15 11:27 ?677次閱讀
    高速環境下FPGA或CPLD中的<b class='flag-5'>狀態機設</b>計

    如何使用STATECAD進行多狀態機設計實例分析

    有限狀態機設計的關鍵是如何把一個實際的時序邏輯關系抽象成一個時序邏輯函數,傳統的電路圖輸入法通過直接設計寄存器組來實現各個狀態之間的轉換, 而用硬件描述語言來描述有限
    發表于 11-11 09:49 ?2094次閱讀
    如何使用STATECAD進行多<b class='flag-5'>狀態機設</b>計實例分析

    VHDL有限狀態機設計-ST

    EDA的有限狀態機,廣義而言是指只要涉及觸發器的電路,無論電路大小都可以歸結為狀態機。有限狀態機設計在學習EDA時是很重要的一章。
    發表于 06-08 16:46 ?3次下載

    狀態機實現哪些內容

    狀態機模式是一種行為模式,通過多態實現不同狀態的調轉行為的確是一種很好的方法,只可惜在嵌入式環境下,有時只能寫純C代碼,并且還需要考慮代碼的重入和多任務請求跳轉等情形,因此實現起來著實
    的頭像 發表于 06-22 14:26 ?726次閱讀
    <b class='flag-5'>狀態機</b>要<b class='flag-5'>實現</b>哪些內容

    基于FPGA的狀態機設

    狀態機的基礎知識依然強烈推薦mooc上華科的數字電路與邏輯設計,yyds!但是數電基礎一定要和實際應用結合起來,理論才能發揮真正的價值。我們知道FPGA是并行執行的,如果我們想要處理具有前后順序的事件就需要引入狀態機
    的頭像 發表于 07-28 10:02 ?998次閱讀
    基于FPGA的<b class='flag-5'>狀態機設</b>計

    什么是狀態機狀態機的種類與實現

    狀態機,又稱有限狀態機(Finite State Machine,FSM)或米利狀態機(Mealy Machine),是一種描述系統狀態變化的模型。在芯片設計中,
    的頭像 發表于 10-19 10:27 ?9452次閱讀
    主站蜘蛛池模板: 办公室的秘密2中文字幕| 一区二区不卡在线视频| 色偷偷男人天堂| 香港成人社区| 一本久道久久综合狠狠躁AV| 含羞草国产亚洲精品岁国产精品| 久久99热狠狠色AV蜜臀| 嗯好大好猛皇上好深用力| 日本久久精品毛片一区随边看| 特级做A爰片毛片免费看108| 亚洲日本一区二区三区在线不卡| 中文字幕无码一区二区免费| www.青青草| 久久99精品AV99果冻传媒| 暖暖高清视频免费| 无限资源在线观看完整版免费下载| 亚洲一级毛片免费在线观看| A级毛片无码久久精品免费| 国产亚洲精品香蕉视频播放| 沦为公交两奶头春药高潮迭起| 色宅男午夜电影网站| 最新亚洲一区二区三区四区| 国产精品高清视频在线| 里番acg纲手的熟蜜姬训练场| 日韩亚洲不卡在线视频| 伊人久在线观看视频| 国产99RE在线观看69热| 蜜桃传媒星空传媒在线播放| 亚洲欧美国产综合在线一区| 成人免费小视频| 美女不要啊| 伊人热| 国产三级91| 色综合久久综合网观看| jyzzjyzzz视频国产在线观看| 久久热在线视频精品| 亚洲高清在线精品一区| 国产99视频精品一区| 热久久视久久精品18| 3344永久在线观看视频免费| 久久91精品国产91|