<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    TCP 連線狀態機制與流程

    https://dev.twsiyuan.com/2017/09/tcp-states.html
    在開發基於 HTTP 的網路應用服務時,當有大量連線要求,或是與長連線 (Persistent connection) 要求時,常常遇到底層 TCP 的連線斷線錯誤,導致服務不穩定。因此研究了解 TCP 的連線狀態機制,並嘗試用自己的方式整理筆記,希望能從基礎知識中找到解決錯誤的線索,或是任何能更進一步優化服務的手段。

    僅紀錄 TCP 連線狀態以及建立或是斷開連線流程,關於進一步的 TCP 封包協定可參考 Reference 連線。

    TCP 建立連線 (Open)

    通常的 TCP 連線建立流程與狀態,需要三次的訊息交換來建立連線 (three-way handshaking):

    TCP 建立連線流程圖

    TCP 建立連線流程圖

    其中左邊通常為 server,右邊則為 client,文字流程描述:

    1. Server 建立 TCB,開啟監聽連線,進入狀態 LISTENING
    2. Client 發出連線要求 SYN,進入狀態 SYN-SENT,等待回應
    3. Server 收到 SYN 要求,回應連線傳送 SYN+ACK,並進入狀態 SYN-RCVD (SYN-RECEIVED)
    4. Client 收到 SYN+ACK 確認完成連線進入狀態 ESTABLISHED,並送出 ACK
    5. Server 收到 ACK 確認連線完成,也進入狀態 ESTABLISHED
    6. 雙方開始傳送交換資料

    該些名詞與狀態說明:

    • CLOSED:連線關閉狀態
    • LISTENING:監聽狀態,被動等待連線
    • SYN-SENT:主動送出連線要求 SYN,並等待對方回應
    • SYN-RCVD:收到連線要求 SYN,送出己方的 SYN+ACK 後,等待對方回應
    • ESTABLISHED:確定完成連線,可開始傳輸資料
    • TCB:Transmission Control Block,see wiki
    • SYN:Synchronous,表示與對方建立連線的同步符號
    • ACK:Acknowledgement,表示發送的數據已收到無誤

    在建立連線時,可能會發生雙方同步建立連線的情形 (Simultaneous open),常見於 P2P 的應用中,其 TCP 建立連線的流程不太一樣:

    TCP 同步建立連線流程圖

    TCP 同步建立連線流程圖

    畫成 TCP 狀態流程圖會是這樣:

    TCP Open 狀態圖

    TCP Open 狀態圖

    TCP 斷開連線 (Close)

    TCP 關閉流程如下,比建立連線還要複雜一些,需要經過四次的訊息交換 (four-way handshaking),要注意的是可以是由 server 發起主動關閉,抑或是 client 發起主動關閉:

    TCP 關閉連線流程圖

    TCP 關閉連線流程圖

    其中左邊通常為 client 狀態 (由 client 主動發起關閉連線),右邊則為 server 狀態,文字流程描述:

    1. Client 準備關閉連線,發出 FIN,進入狀態 FIN-WAIT-1
    2. Server 收到 FIN,發回收到的 ACK,進入狀態 CLOSE-WAIT,並通知 App 準備斷線
    3. Client 收到 ACK,進入狀態 FIN-WAIT-2,等待 server 發出 FIN
    4. Server 確認 App 處理完斷線請求,發出 FIN,並進入狀態 LAST-ACK
    5. Client 收到 FIN,並回傳確認的 ACK,進入狀態 TIME-WAIT,等待時間過後正式關閉連線
    6. Server 收到 ACK,便直接關閉連線

    該些名詞與狀態說明:

    • ESTABLISHED:連線開啟狀態
    • CLOSE-WAIT:等待連線關閉狀態,等待 App 回應
    • LAST-ACK:等待連線關閉狀態,等待遠端回應 ACK 後,便關閉連線
    • FIN-WAIT-1:等待連線關閉狀態,等待遠端回應 ACK
    • FIN-WAIT-2:等待連線關閉狀態,等待遠端回應 FIN
    • TIME-WAIT:等待連線關閉狀態,等段一段時候,保證遠端有收到其 ACK 關閉連線 (網路延遲問題)
    • CLOSED:連線關閉狀態
    • FIN:表示關閉連線的同步符號
    • ACK:Acknowledgement,表示發送的數據已收到無誤

    有可能連線的雙方同時發起關閉,雖然機率還蠻低的:

    TCP 同步關閉連線流程圖

    TCP 同步關閉連線流程圖

    這邊多一個狀態:

    • CLOSING:等待連線關閉狀態,等待遠端回應 ACK

    畫成 TCP 狀態流程圖會是這樣:

    TCP Close 狀態圖

    TCP Close 狀態圖

    查詢現在電腦的 TCP 狀態

    查詢目前所有的連線狀態 (Windows & Linux):

    netstat -a

    Reference

    posted on 2020-12-29 10:04 paulwong 閱讀(250) 評論(0)  編輯  收藏 所屬分類: LINUXLINUX-SHELLTCP

    主站蜘蛛池模板: 一区二区三区视频免费| 久久久久亚洲精品影视| 亚洲AV无码片一区二区三区| 中文毛片无遮挡高潮免费| 夜夜亚洲天天久久| 1000部拍拍拍18勿入免费视频软件| 亚洲国产一区二区a毛片| 亚洲视频免费在线观看| 4444亚洲国产成人精品| 国产h视频在线观看免费| 亚洲午夜理论片在线观看| 国产在线a免费观看| 亚洲av成人一区二区三区观看在线 | 成人最新午夜免费视频| 在线亚洲高清揄拍自拍一品区| 国产精品美女午夜爽爽爽免费| 亚洲国产精品网站在线播放| 免费a级毛片在线观看| 一级黄色免费网站| 亚洲AV永久无码精品| 国产精彩免费视频| 亚洲hairy多毛pics大全| 亚洲精品偷拍视频免费观看| 一个人免费视频在线观看www | 一边摸一边爽一边叫床免费视频| 国产亚洲一区二区三区在线不卡 | 好先生在线观看免费播放| 亚洲AV无码AV吞精久久| 国产成人综合亚洲亚洲国产第一页| a毛片全部免费播放| 亚洲免费视频播放| 五月天婷亚洲天综合网精品偷| 国产免费一级高清淫曰本片| 久久久久久亚洲精品成人| 日韩激情无码免费毛片| 伊人免费在线观看| 亚洲一区AV无码少妇电影| 中文字幕亚洲无线码| 无人影院手机版在线观看免费| 一级黄色免费网站| 欧洲 亚洲 国产图片综合|