https://dev.twsiyuan.com/2017/09/tcp-states.html
鍦ㄩ枊鐧煎熀鏂?HTTP 鐨勭恫璺噳鐢ㄦ湇鍕欐檪錛岀暥鏈夊ぇ閲忛g窔瑕佹眰錛屾垨鏄垏闀烽g窔 (Persistent connection) 瑕佹眰鏅傦紝甯稿父閬囧埌搴曞堡 TCP 鐨勯g窔鏂風窔閷錛屽皫鑷存湇鍕欎笉絀╁畾銆傚洜姝ょ爺絀朵簡瑙?TCP 鐨勯g窔鐙鎱嬫鍒訛紝涓﹀槜瑭︾敤鑷繁鐨勬柟寮忔暣鐞嗙瓎璦橈紝甯屾湜鑳藉緸鍩虹鐭ヨ瓨涓壘鍒拌В姹洪尟瑾ょ殑綬氱儲錛屾垨鏄換浣曡兘鏇撮蹭竴姝ュ劒鍖栨湇鍕欑殑鎵嬫銆?/p>鍍呯磤閷?TCP 閫g窔鐙鎱嬩互鍙婂緩绔嬫垨鏄柗闁嬮g窔嫻佺▼錛岄棞鏂奸蹭竴姝ョ殑 TCP 灝佸寘鍗斿畾鍙弮鑰?Reference 閫g窔銆?/p>
TCP 寤虹珛閫g窔 (Open)
閫氬父鐨?TCP 閫g窔寤虹珛嫻佺▼鑸囩媭鎱嬶紝闇瑕佷笁嬈$殑璦婃伅浜ゆ彌渚嗗緩绔嬮g窔 (three-way handshaking)錛?/p>
![TCP 寤虹珛閫g窔嫻佺▼鍦? style= TCP 寤虹珛閫g窔嫻佺▼鍦? src=]()
TCP 寤虹珛閫g窔嫻佺▼鍦?/p>
鍏朵腑宸﹂倞閫氬父鐐?server錛屽彸閭婂墖鐐?client錛屾枃瀛楁祦紼嬫弿榪幫細
- Server 寤虹珛 TCB錛岄枊鍟熺洠鑱介g窔錛岄插叆鐙鎱?LISTENING
- Client 鐧煎嚭閫g窔瑕佹眰 SYN錛岄插叆鐙鎱?SYN-SENT錛岀瓑寰呭洖鎳?/li>
- Server 鏀跺埌 SYN 瑕佹眰錛屽洖鎳夐g窔鍌抽?nbsp;SYN+ACK錛屼甫閫插叆鐙鎱?SYN-RCVD (SYN-RECEIVED)
- Client 鏀跺埌 SYN+ACK 紕鴻獚瀹屾垚閫g窔閫插叆鐙鎱?ESTABLISHED錛屼甫閫佸嚭 ACK
- Server 鏀跺埌 ACK 紕鴻獚閫g窔瀹屾垚錛屼篃閫插叆鐙鎱?ESTABLISHED
- 闆欐柟闁嬪鍌抽佷氦鎻涜硣鏂?/li>
瑭蹭簺鍚嶈鑸囩媭鎱嬭鏄庯細
- CLOSED錛氶g窔闂滈枆鐙鎱?/li>
- LISTENING錛氱洠鑱界媭鎱嬶紝琚嫊絳夊緟閫g窔
- SYN-SENT錛氫富鍕曢佸嚭閫g窔瑕佹眰 SYN錛屼甫絳夊緟灝嶆柟鍥炴噳
- SYN-RCVD錛氭敹鍒伴g窔瑕佹眰 SYN錛岄佸嚭宸辨柟鐨?SYN+ACK 寰岋紝絳夊緟灝嶆柟鍥炴噳
- ESTABLISHED錛氱⒑瀹氬畬鎴愰g窔錛屽彲闁嬪鍌寵幾璩囨枡
- TCB錛歍ransmission Control Block錛宻ee wiki
- SYN錛歋ynchronous錛岃〃紺鴻垏灝嶆柟寤虹珛閫g窔鐨勫悓姝ョ铏?/li>
- ACK錛欰cknowledgement錛岃〃紺虹櫦閫佺殑鏁告摎宸叉敹鍒扮劇瑾?/li>
鍦ㄥ緩绔嬮g窔鏅傦紝鍙兘鏈冪櫦鐢熼洐鏂瑰悓姝ュ緩绔嬮g窔鐨勬儏褰?(Simultaneous open)錛屽父瑕嬫柤 P2P 鐨勬噳鐢ㄤ腑錛屽叾 TCP 寤虹珛閫g窔鐨勬祦紼嬩笉澶竴妯o細
![TCP 鍚屾寤虹珛閫g窔嫻佺▼鍦? style= TCP 鍚屾寤虹珛閫g窔嫻佺▼鍦? src=]()
TCP 鍚屾寤虹珛閫g窔嫻佺▼鍦?/p>
鐣垚 TCP 鐙鎱嬫祦紼嬪湒鏈冩槸閫欐ǎ錛?/p>

TCP Open 鐙鎱嬪湒
TCP 鏂烽枊閫g窔 (Close)
TCP 闂滈枆嫻佺▼濡備笅錛屾瘮寤虹珛閫g窔閭勮瑜囬洔涓浜涳紝闇瑕佺稉閬庡洓嬈$殑璦婃伅浜ゆ彌 (four-way handshaking)錛岃娉ㄦ剰鐨勬槸鍙互鏄敱 server 鐧艱搗涓誨嫊闂滈枆錛屾姂鎴栨槸 client 鐧艱搗涓誨嫊闂滈枆錛?/p>
![TCP 闂滈枆閫g窔嫻佺▼鍦? style= TCP 闂滈枆閫g窔嫻佺▼鍦? src=]()
TCP 闂滈枆閫g窔嫻佺▼鍦?/p>
鍏朵腑宸﹂倞閫氬父鐐?client 鐙鎱?(鐢?client 涓誨嫊鐧艱搗闂滈枆閫g窔)錛屽彸閭婂墖鐐?server 鐙鎱嬶紝鏂囧瓧嫻佺▼鎻忚堪錛?/p>
- Client 婧栧倷闂滈枆閫g窔錛岀櫦鍑?nbsp;FIN錛岄插叆鐙鎱?FIN-WAIT-1
- Server 鏀跺埌 FIN錛岀櫦鍥炴敹鍒扮殑 ACK錛岄插叆鐙鎱?CLOSE-WAIT錛屼甫閫氱煡 App 婧栧倷鏂風窔
- Client 鏀跺埌 ACK錛岄插叆鐙鎱?FIN-WAIT-2錛岀瓑寰?server 鐧煎嚭 FIN
- Server 紕鴻獚 App 铏曠悊瀹屾柗綬氳珛姹傦紝鐧煎嚭 FIN錛屼甫閫插叆鐙鎱?LAST-ACK
- Client 鏀跺埌 FIN錛屼甫鍥炲偝紕鴻獚鐨?nbsp;ACK錛岄插叆鐙鎱?TIME-WAIT錛岀瓑寰呮檪闁撻亷寰屾寮忛棞闁夐g窔
- Server 鏀跺埌 ACK錛屼究鐩存帴闂滈枆閫g窔
瑭蹭簺鍚嶈鑸囩媭鎱嬭鏄庯細
- ESTABLISHED錛氶g窔闁嬪暉鐙鎱?/li>
- CLOSE-WAIT錛氱瓑寰呴g窔闂滈枆鐙鎱嬶紝絳夊緟 App 鍥炴噳
- LAST-ACK錛氱瓑寰呴g窔闂滈枆鐙鎱嬶紝絳夊緟閬犵鍥炴噳 ACK 寰岋紝渚塊棞闁夐g窔
- FIN-WAIT-1錛氱瓑寰呴g窔闂滈枆鐙鎱嬶紝絳夊緟閬犵鍥炴噳 ACK
- FIN-WAIT-2錛氱瓑寰呴g窔闂滈枆鐙鎱嬶紝絳夊緟閬犵鍥炴噳 FIN
- TIME-WAIT錛氱瓑寰呴g窔闂滈枆鐙鎱嬶紝絳夋涓孌墊檪鍊欙紝淇濊瓑閬犵鏈夋敹鍒板叾 ACK 闂滈枆閫g窔 (綞茶礬寤墮伈鍟忛)
- CLOSED錛氶g窔闂滈枆鐙鎱?/li>
- FIN錛氳〃紺洪棞闁夐g窔鐨勫悓姝ョ铏?/li>
- ACK錛欰cknowledgement錛岃〃紺虹櫦閫佺殑鏁告摎宸叉敹鍒扮劇瑾?/li>
鏈夊彲鑳介g窔鐨勯洐鏂瑰悓鏅傜櫦璧烽棞闁夛紝闆栫劧姍熺巼閭勮牷浣庣殑錛?/p>
![TCP 鍚屾闂滈枆閫g窔嫻佺▼鍦? style= TCP 鍚屾闂滈枆閫g窔嫻佺▼鍦? src=]()
TCP 鍚屾闂滈枆閫g窔嫻佺▼鍦?/p>
閫欓倞澶氫竴鍊嬬媭鎱嬶細
- CLOSING錛氱瓑寰呴g窔闂滈枆鐙鎱嬶紝絳夊緟閬犵鍥炴噳 ACK
鐣垚 TCP 鐙鎱嬫祦紼嬪湒鏈冩槸閫欐ǎ錛?/p>

TCP Close 鐙鎱嬪湒
鏌ヨ鐝懼湪闆昏叇鐨?TCP 鐙鎱?/h2>
鏌ヨ鐩墠鎵鏈夌殑閫g窔鐙鎱?(Windows & Linux)錛?/p>
netstat -a
Reference

]]>