﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-paulwong-随笔分类-TCP</title><link>http://www.blogjava.net/paulwong/category/55367.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 29 Dec 2020 02:05:03 GMT</lastBuildDate><pubDate>Tue, 29 Dec 2020 02:05:03 GMT</pubDate><ttl>60</ttl><item><title>TCP 連線狀態機制與流程</title><link>http://www.blogjava.net/paulwong/archive/2020/12/29/435758.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 29 Dec 2020 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/12/29/435758.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435758.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/12/29/435758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435758.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435758.html</trackback:ping><description><![CDATA[<p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;"><a href="https://dev.twsiyuan.com/2017/09/tcp-states.html" target="_blank">https://dev.twsiyuan.com/2017/09/tcp-states.html</a><br />在開發基於 HTTP 的網路應用服務時，當有大量連線要求，或是與長連線 (Persistent connection) 要求時，常常遇到底層 TCP 的連線斷線錯誤，導致服務不穩定。因此研究了解 TCP 的連線狀態機制，並嘗試用自己的方式整理筆記，希望能從基礎知識中找到解決錯誤的線索，或是任何能更進一步優化服務的手段。</p><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">僅紀錄 TCP 連線狀態以及建立或是斷開連線流程，關於進一步的 TCP 封包協定可參考 Reference 連線。</p><h2>TCP 建立連線 (Open)</h2><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">通常的 TCP 連線建立流程與狀態，需要三次的訊息交換來建立連線 (three-way handshaking)：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-2mx35jqEZGM/Wa5u2IscCeI/AAAAAAAAcuM/EffX5Qq_ByE0RU6C5OYNfIfD8UX5iO1fwCHMYCw/s1600/tcp-open-state-flow.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP 建立連線流程圖" src="https://2.bp.blogspot.com/-2mx35jqEZGM/Wa5u2IscCeI/AAAAAAAAcuM/EffX5Qq_ByE0RU6C5OYNfIfD8UX5iO1fwCHMYCw/s780/tcp-open-state-flow.png" title="TCP 建立連線流程圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP 建立連線流程圖</p></div><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">其中左邊通常為 server，右邊則為 client，文字流程描述：</p><ol style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 建立 TCB，開啟監聽連線，進入狀態 LISTENING</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 發出連線要求&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>，進入狀態 SYN-SENT，等待回應</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>&nbsp;要求，回應連線傳送&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>+<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，並進入狀態 SYN-RCVD (SYN-RECEIVED)</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>+<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>&nbsp;確認完成連線進入狀態 ESTABLISHED，並送出&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em></li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>&nbsp;確認連線完成，也進入狀態 ESTABLISHED</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">雙方開始傳送交換資料</li></ol><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">該些名詞與狀態說明：</p><ul style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">CLOSED：連線關閉狀態</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">LISTENING：監聽狀態，被動等待連線</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN-SENT：主動送出連線要求 SYN，並等待對方回應</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN-RCVD：收到連線要求 SYN，送出己方的 SYN+ACK 後，等待對方回應</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ESTABLISHED：確定完成連線，可開始傳輸資料</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">TCB：Transmission Control Block，see&nbsp;<a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Resource_usage" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">wiki</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">SYN</em>：Synchronous，表示與對方建立連線的同步符號</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>：Acknowledgement，表示發送的數據已收到無誤</li></ul><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">在建立連線時，可能會發生雙方同步建立連線的情形 (Simultaneous open)，常見於 P2P 的應用中，其 TCP 建立連線的流程不太一樣：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-nnxA1swfqQY/Wa5u2c-OG5I/AAAAAAAAcuQ/Tkw_aIM24mIdWqc7vvJsrWGJqZ6J3swPgCHMYCw/s1600/tcp-simultaneous-open-state-flow.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP 同步建立連線流程圖" src="https://2.bp.blogspot.com/-nnxA1swfqQY/Wa5u2c-OG5I/AAAAAAAAcuQ/Tkw_aIM24mIdWqc7vvJsrWGJqZ6J3swPgCHMYCw/s780/tcp-simultaneous-open-state-flow.png" title="TCP 同步建立連線流程圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP 同步建立連線流程圖</p></div><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">畫成 TCP 狀態流程圖會是這樣：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-h1UBJNPvlcI/Wa5u2QYeR9I/AAAAAAAAcuU/s18PlBSPCEABhRF6fdohXTbC8gBGqAOmwCHMYCw/s1600/tcp-open-state-diagram.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP Open 狀態圖" src="https://2.bp.blogspot.com/-h1UBJNPvlcI/Wa5u2QYeR9I/AAAAAAAAcuU/s18PlBSPCEABhRF6fdohXTbC8gBGqAOmwCHMYCw/s780/tcp-open-state-diagram.png" title="TCP Open 狀態圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP Open 狀態圖</p></div><h2>TCP 斷開連線 (Close)</h2><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">TCP 關閉流程如下，比建立連線還要複雜一些，需要經過四次的訊息交換 (four-way handshaking)，要注意的是可以是由 server 發起主動關閉，抑或是 client 發起主動關閉：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-EVTQe_4Vk00/Wa5u2iHmHQI/AAAAAAAAcuY/LnHrPzqczAQMs_dRnwzCuI_aQGyID_MMQCHMYCw/s1600/tcp-close-state-flow.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP 關閉連線流程圖" src="https://2.bp.blogspot.com/-EVTQe_4Vk00/Wa5u2iHmHQI/AAAAAAAAcuY/LnHrPzqczAQMs_dRnwzCuI_aQGyID_MMQCHMYCw/s780/tcp-close-state-flow.png" title="TCP 關閉連線流程圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP 關閉連線流程圖</p></div><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">其中左邊通常為 client 狀態 (由 client 主動發起關閉連線)，右邊則為 server 狀態，文字流程描述：</p><ol style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 準備關閉連線，發出&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>，進入狀態 FIN-WAIT-1</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>，發回收到的&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，進入狀態 CLOSE-WAIT，並通知 App 準備斷線</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，進入狀態 FIN-WAIT-2，等待 server 發出&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em></li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 確認 App 處理完斷線請求，發出&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>，並進入狀態 LAST-ACK</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Client 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>，並回傳確認的&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，進入狀態 TIME-WAIT，等待時間過後正式關閉連線</li><li style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">Server 收到&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>，便直接關閉連線</li></ol><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">該些名詞與狀態說明：</p><ul style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ESTABLISHED：連線開啟狀態</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">CLOSE-WAIT：等待連線關閉狀態，等待 App 回應</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">LAST-ACK：等待連線關閉狀態，等待遠端回應&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>&nbsp;後，便關閉連線</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN-WAIT-1：等待連線關閉狀態，等待遠端回應&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN-WAIT-2：等待連線關閉狀態，等待遠端回應&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">TIME-WAIT：等待連線關閉狀態，等段一段時候，保證遠端有收到其 ACK 關閉連線 (網路延遲問題)</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">CLOSED：連線關閉狀態</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">FIN</em>：表示關閉連線的同步符號</li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em>：Acknowledgement，表示發送的數據已收到無誤</li></ul><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">有可能連線的雙方同時發起關閉，雖然機率還蠻低的：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-QvO1WNqd01w/Wa5u21Cmx5I/AAAAAAAAcuc/jRp47O6GvSwIffpwcdge21j1_Lfs0kO2ACHMYCw/s1600/tcp-simultaneous-close-state-flow.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP 同步關閉連線流程圖" src="https://2.bp.blogspot.com/-QvO1WNqd01w/Wa5u21Cmx5I/AAAAAAAAcuc/jRp47O6GvSwIffpwcdge21j1_Lfs0kO2ACHMYCw/s780/tcp-simultaneous-close-state-flow.png" title="TCP 同步關閉連線流程圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP 同步關閉連線流程圖</p></div><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">這邊多一個狀態：</p><ul style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">CLOSING：等待連線關閉狀態，等待遠端回應&nbsp;<em style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">ACK</em></li></ul><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">畫成 TCP 狀態流程圖會是這樣：</p><div style="margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><a href="https://2.bp.blogspot.com/-VCsQkhIyQGw/Wa5u3IDGhRI/AAAAAAAAcug/plhn7GLFVmUFbXb0DkZ6gE0AZgrRa6MyQCHMYCw/s1600/tcp-close-state-diagram.png" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;"><img alt="TCP Close 狀態圖" src="https://2.bp.blogspot.com/-VCsQkhIyQGw/Wa5u3IDGhRI/AAAAAAAAcug/plhn7GLFVmUFbXb0DkZ6gE0AZgrRa6MyQCHMYCw/s780/tcp-close-state-diagram.png" title="TCP Close 狀態圖" style="padding: 0px; margin: 0px auto; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: middle; background: 0px 0px; display: block; max-width: 100%; height: auto;" /></a><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: smaller; vertical-align: baseline; background: 0px 0px; line-height: 1.7em; text-align: center; font-style: italic;">TCP Close 狀態圖</p></div><h2>查詢現在電腦的 TCP 狀態</h2><p style="padding: 0px 0px 0.5em; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; line-height: 1.7em; color: #666666; font-family: Roboto, sans-serif;">查詢目前所有的連線狀態 (Windows &amp; Linux)：</p><pre prettyprinted"="" style="padding: 9.5px; margin-top: 0px; margin-bottom: 10px; box-sizing: border-box; border: 1px solid #cccccc; outline: 0px; font-size: 13px; vertical-align: baseline; background: #ffffff; white-space: pre-wrap; line-height: 1.42857; font-family: Menlo, &quot;Bitstream Vera Sans Mono&quot;, &quot;DejaVu Sans Mono&quot;, Monaco, Consolas, monospace; word-break: break-all; overflow-wrap: break-word; color: #333333; border-radius: 4px; overflow: auto;"><code style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; background: 0px 0px transparent; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: inherit; border-radius: 0px;"><span style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">netstat </span><span style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">-</span><span style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;">a</span></code></pre><h2>Reference</h2><ul style="padding: 0px; margin: 0px 0px 10px; box-sizing: border-box; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; background: 0px 0px #ffffff; color: #666666; font-family: Roboto, sans-serif;"><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://community.apigee.com/articles/7970/tcp-states-explained.html" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">TCP states - explained</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://www.youtube.com/watch?v=Ad38n2hYOuA" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">TCP tutorial tcp state diagram for connection establishment closing</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://www.isi.edu/touch/pubs/infocomm99/infocomm99-web/" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">The TIME-WAIT state in TCP and Its Effect on Busy Servers</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.halu101/constatus.htm" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">TCP connection status</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">TCP Operational Overview and the TCP Finite State Machine (FSM)</a></li><li style="padding: 0px; margin: 0px 0px 0px 20px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px;"><a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol" style="padding: 0px; margin: 0px; box-sizing: border-box; border: 0px; outline: 0px; vertical-align: baseline; background: 0px 0px transparent; color: #337ab7; text-decoration-line: none;">Transmission Control Protocol<br /></a></li></ul><img src ="http://www.blogjava.net/paulwong/aggbug/435758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-12-29 10:04 <a href="http://www.blogjava.net/paulwong/archive/2020/12/29/435758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>