{"id":66,"date":"2022-09-29T17:53:06","date_gmt":"2022-09-29T09:53:06","guid":{"rendered":"https:\/\/yanghanwen.cn\/?p=66"},"modified":"2022-10-16T19:26:55","modified_gmt":"2022-10-16T11:26:55","slug":"tcp","status":"publish","type":"post","link":"https:\/\/yanghanwen.cn\/?p=66","title":{"rendered":"TCP"},"content":{"rendered":"<p>[TOC]<\/p>\n<h1>\u524d\u8a00<\/h1>\n<p>\u53c2\u8003: <a href=\"https:\/\/rfcs.io\/tcp\">TCP \u7cfb\u5217\u534f\u8bae<\/a><\/p>\n<p>\u8be5\u6587\u6863\u7cfb <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293\">RFC-9293<\/a> \u7684\u9605\u8bfb\u7b14\u8bb0\uff0c\u4ee5\u7b80\u7565\u7684\u5f62\u5f0f\u7ffb\u8bd1\u539f\u6587\uff0c<br \/>\n\u4ec5\u5bf9\u539f\u6587\u90e8\u5206\u6bb5\u843d\u8fdb\u884c\u6458\u8981<\/p>\n<h1>\u6982\u8ff0<\/h1>\n<p>TCP \u5168\u79f0\u662f <code>\u4f20\u8f93\u63a7\u5236\u534f\u8bae(Transmission Control Protocol)<\/code> \uff0c<br \/>\n\u8be5\u6587\u6863\u6307\u5b9a TCP\u534f\u8bae\uff0c\u8be5\u534f\u8bae\u5c5e\u4e8e <code>\u534f\u8bae\u6808(Internet protocol stack)<\/code> \u4e2d\u7684 <code>\u4f20\u8f93\u5c42(transprot-layer)<\/code>\uff0c\u5e76\u4e14\u5b83\u5728\u968f\u7740\u56e0\u7279\u7f51\u7684\u53d1\u5c55\u800c\u4e0d\u65ad\u66f4\u65b0.<br \/>\nTCP \u6700\u521d\u88ab\u8bb0\u5f55\u5728 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc793\">RFC793<\/a>\uff0c\u4f5c\u4e3a\u4e00\u90e8\u5206\u96f6\u661f\u7684\u8bb0\u5f55<br \/>\n\u800c\u8be5 9293\u6587\u6863 \u5c06 \u4e00\u7cfb\u5217\u6587\u6863(\u8be6\u60c5\u770b\u5b98\u7f51) \u8fdb\u884c\u4e86 \u66f4\u65b0\u3001\u6574\u5408\uff0c\u89c6\u81ea\u8eab\u9700\u8981\u8fdb\u884c\u67e5\u9605<\/p>\n<h1>\u7248\u6743\u58f0\u660e<\/h1>\n<p>\u7248\u6743\u96b6\u5c5e\u4e8e 2022 IETF Trust \u548c \u6587\u6863\u7684\u4f5c\u8005 \u6240\u6709<br \/>\n\u8be5\u6587\u6863\u662f BCP78 \u7684\u4e3b\u9898\uff0c\u5728\u8be5\u6587\u6863\u4e2d \u63d0\u53d6\u7684\u7ec4\u4ef6(Components extracted) \u5fc5\u987b\u5305\u542b\u4fee\u8ba2\u540e\u7684 <code>BSD \u8bb8\u53ef\u8bc1<\/code> \uff0c\u8be6\u60c5\u89c1 \u7b2c\u56db\u6bb5\u843d\u7684\u4f8b\u5b50<\/p>\n<p>\u8be5\u6587\u6863\u53ef\u80fd\u5305\u542b\u4e00\u4e9b \u6765\u81ea\u4e8e\u7684IETF\u6587\u6863\u3001IETF\u53d1\u5e03\u8d21\u732e(Contributions published) \u4ee5\u53ca\u5728 2008.11.10 \u4ee5\u524d\u516c\u5f00\u53d1\u8868\u7684\u5185\u5bb9\uff0c\u67d0\u4e9b\u6750\u6599\u7684 \u7248\u6743\u63a7\u5236 \u53ef\u80fd\u6ca1\u80fd\u5f97\u5230 IETF\u7684\u8bb8\u53ef\uff0c\u4f7f\u5f97\u4ed6\u4eec\u4e0d\u88ab\u5141\u8bb8\u5728 <code>IETF \u6807\u51c6\u5316\u8fdb\u7a0b (IETF Standards Process)<\/code> \u4e4b\u5916\u8fdb\u884c\u4fee\u6539<br \/>\n\u5728\u672a\u80fd\u83b7\u5f97\u8fd9\u4e9b\u6750\u6599\u7684 \u7248\u6743\u63a7\u5236 \u65f6\uff0c\u8be5\u6587\u6863\u53ef\u80fd\u4e0d\u88ab\u5141\u8bb8\u5728 IETF Standard Process \u4e4b\u5916\u8fdb\u884c\u4fee\u6539\uff0c\u5b83\u7684\u884d\u751f\u7269\u53ef\u80fd\u4e0d\u80fd\u5728 IETF Standard Process \u5916\u88ab\u521b\u5efa\uff0c\u9664\u975e\u662f\u5c06\u5b83\u7684 RFC\u51fa\u7248\u7269 \u7ffb\u8bd1\u4e3a\u5176\u4ed6\u8bed\u8a00\u65f6<\/p>\n<h1>\u76ee\u7684\u548c\u8303\u56f4<\/h1>\n<p>\u5728 1981\u5e74\uff0cRFC793 \u88ab\u53d1\u5e03\uff0c\u5e76\u66ff\u6362\u4e86\u5f53\u65f6\u65e9\u671f\u7684 TCP\u89c4\u8303<br \/>\n\u81ea\u90a3\u65f6\uff0cTCP\u88ab\u5e7f\u6cdb\u5730\u5b9e\u73b0\uff0c\u4f5c\u4e3a \u4f20\u8f93\u534f\u8bae \u5927\u91cf\u7528\u4e8e Internet \u4e2d\u7684\u5e94\u7528<\/p>\n<p>\u51e0\u5341\u5e74\u540e\uff0cRFC791 \u6dfb\u52a0\u4e86\u82e5\u5e72\u6587\u6863\uff0c\u5e76\u7ec4\u5408\u5230 TCP \u7684\u6838\u5fc3\u89c4\u8303\u4e2d\uff0c\u53c2\u8003 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc7414.html\">RFC7414<\/a><br \/>\n\u968f\u7740\u65f6\u95f4\u63a8\u79fb\uff0cRFC793\u6709\u4e86\u4e00\u4e9b\u52d8\u8bef\uff0c\u4ee5\u53ca\u4e00\u4e9b\u5df2\u7ecf\u5f97\u5230\u89e3\u51b3\u7684 \u5728\u5b89\u5168\u3001\u8868\u8fbe \u4ee5\u53ca\u5176\u4ed6\u65b9\u9762\u7684\u4e0d\u8db3\u4e4b\u5904\uff0c\u8fd9\u4e9b\u589e\u5f3a\u968f\u7740\u65f6\u95f4\u63a8\u79fb\u88ab\u53d1\u8868\u4e3a\u82e5\u5e72\u5206\u6563\u7684\u6587\u6863\uff0c\u4f46\u4e00\u76f4\u6ca1\u6709\u5bf9\u57fa\u672c\u89c4\u8303\u8fdb\u884c\u66f4\u65b0<\/p>\n<p>\u8be5\u6587\u6863\u7684\u76ee\u7684\u662f\u5c06 IETF Standard Track \u7684\u66f4\u6539 \u4ee5\u53ca\u5176\u4ed6 \u5bf9\u4e8eTCP\u7684\u6f84\u6e05 \u8fdb\u884c\u7edf\u5408\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u65b0\u7248\u672c\u7684\u89c4\u8303<\/p>\n<p>\u4e00\u4e9b \u76f8\u5173(companion) \u6587\u6863\u5b9a\u4e49\u4e86\u4e00\u4e9b TCP\u4e2d \u7528\u5230\u7684\u91cd\u8981\u7b97\u6cd5\uff08\u4f8b\u5982 <code>\u963b\u585e\u63a7\u5236(congestion control)<\/code> \uff09\uff0c\u4ed6\u4eec\u6ca1\u6709\u88ab\u5b8c\u6574\u5730\u5305\u542b\u5728\u8be5\u6587\u6863\u5185\uff0c\u8fd9\u662f\u6709\u610f\u800c\u4e3a\u7684\uff0c\u56e0\u4e3a\u57fa\u672c\u89c4\u8303\u53ef\u80fd\u88ab\u591a\u79cd\u9644\u52a0\u7b97\u6cd5\u4f7f\u7528\uff0c\u800c\u5f00\u53d1\u8005\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u9700\u8981\u5355\u72ec\u8fdb\u884c\u67e5\u9605\uff0c<br \/>\n\u800c\u8be5\u6587\u6863\u4ec5\u5173\u6ce8\u4e8e \u5728TCP\u5b9e\u73b0\u4e2d\u5fc5\u987b\u5bf9 \u4e92\u64cd\u4f5c\u6027(interoperate) \u652f\u6301\u7684 \u516c\u5171\u57fa\u672c\u90e8\u5206\uff0c<br \/>\n\u7531\u4e8e\u4e00\u4e9b\u989d\u5916\u7684 TCP\u7279\u6027 \u5176\u5185\u90e8\u5341\u5206\u590d\u6742\uff08\u4f8b\u5982 <code>advanced loss recovery<\/code> \u548c <code>\u963b\u585e\u63a7\u5236(congestion control)<\/code>\uff09\uff0c\u5728\u672a\u6765\u8fd9\u90e8\u5206\u5185\u5bb9\u4e5f\u53ef\u80fd\u8003\u8651\u5355\u72ec\u5265\u79bb\u51fa\u53bb<\/p>\n<pre><code>\u4e92\u64cd\u4f5c\u6027\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\uff1a\u4e3a\u5bf9\u5916\u66b4\u9732\u63a5\u53e3\uff0c\u5e76\u4e14\u81ea\u8eab\u80fd\u8c03\u7528\u5176\u4ed6\u76ee\u6807\u7684\u63a5\u53e3<\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u8be5\u534f\u8bae\u89c4\u8303\u8fd8\u63cf\u8ff0\u4e86 <code>TCP\u6bb5\u7684\u683c\u5f0f(TCP segment format)<\/code>\u3001\u4ea7\u751f(generation)\u3001\u5904\u7406\u89c4\u5219(processing rules) \u7684\u4ee3\u7801\u5b9e\u73b0\uff0c RFC793 \u548c \u5176\u4ed6\u66f4\u65b0 \u4e5f\u5305\u542b\u4e86\u4e00\u4e9b\u6709\u52a9\u4e8e\u7406\u89e3 \u534f\u8bae\u6d89\u53ca\u3001\u64cd\u4f5c \u7684\u4fe1\u606f\u63cf\u8ff0\uff0c<br \/>\n\u8be5\u6587\u6863\u5e76\u4e0d\u6253\u7b97\u6539\u53d8\u6216\u8005\u66f4\u65b0\u8fd9\u4e9b\u4fe1\u606f\uff0c\u800c\u662f\u4ec5\u5173\u6ce8\u4e8e\u66f4\u65b0\u5bf9 \u534f\u8bae\u89c4\u8303\u7684\u89c4\u8303(normative protocol specification)<br \/>\n\u8be5\u6587\u6863\u4fdd\u7559\u4e86 \u539f\u6587\u6863\u4e2d\u5bf9 \u91cd\u8981\u89e3\u91ca(important explaneations)\u3001\u539f\u7406(rationale) \u7684\u5f15\u7528<br \/>\n\u8be5\u6587\u6863\u8ba1\u5212\u7528\u4e8e \u5ba1\u67e5\u5df2\u6709TCP\u5b9e\u73b0\u3001\u4ee5\u53ca\u7f16\u5199\u65b0\u7684\u5b9e\u73b0<\/p>\n<h1>\u4ecb\u7ecd<\/h1>\n<p>RFC 793 \u5305\u542b\u4e00\u4e9b\u5bf9 \u8bbe\u8ba1\u76ee\u6807\u7684\u8ba8\u8bba \u4ee5\u53ca\u63d0\u4f9b\u4e86\u4e00\u4e9b\u64cd\u4f5c\u5b9e\u4f8b\uff0c\u5305\u62ec\uff1a<\/p>\n<ul>\n<li>\u8fde\u63a5\u5efa\u7acb(connection establishment)<\/li>\n<li>\u8fde\u63a5\u7ec8\u6b62(connection termination)<\/li>\n<li>\u5305\u7684\u91cd\u53d1(packet retransmission)<\/li>\n<li>\u4fee\u590d\u4e22\u5931(repair losses)<\/li>\n<\/ul>\n<p>\u8be5\u6587\u6863\u8ba8\u8bba \u73b0\u4ee3 TCP\u5b9e\u73b0 \u4e2d\u9700\u8981\u7684\u57fa\u672c\u529f\u80fd\uff0c\u5e76\u4e14\u66ff\u6362 RFC793 \u4e2d\u7684\u534f\u8bae\u89c4\u8303<br \/>\n\u5b83\u4e0d\u4f1a \u590d\u5236 \u6216\u5c1d\u8bd5\u66f4\u65b0 RFC793 \u4e2d \u7b2c1\u30012 \u6bb5\u843d\u7684\u5185\u5bb9<br \/>\n\u5176\u4ed6\u6587\u6863\u662f \u64cd\u4f5c\u7406\u8bba\u7684\u5b9e\u73b0(explanations of the theory)\u3001\u57fa\u672c\u539f\u7406\u3001\u8bbe\u8ba1\u51b3\u7b56\u7684\u7ec6\u8282\u8ba8\u8bba<br \/>\n\u8be5\u6587\u6863\u4ec5\u5173\u6ce8\u534f\u8bae\u7684\u89c4\u8303\u884c\u4e3a<\/p>\n<p><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7414\">TCP Roadmap &#8211; RFC7414<\/a> \u4e2d\u63d0\u4f9b\u4e86\u4e00\u4e9b TCP\u5b9a\u4e49\u3001\u91cd\u8981\u7b97\u6cd5 \u76f8\u5173\u7684\u5f15\u5bfc\uff0cTCP Roadmap \u6587\u6863\u4e2d\u6709\u4e00\u4e9b\u5f3a\u70c8\u5efa\u8bae\u5b9e\u73b0\u7684\u4e1c\u897f\uff0c\u5b83\u80fd\u5728\u672c\u6587\u6863\u63d0\u5230\u7684TCP\u57fa\u672c\u529f\u80fd\u5916\u8fdb\u884c\u589e\u5f3a<br \/>\n\u4f8b\u5982\uff0c\u5b9e\u73b0 <code>congestion control<\/code> \u662f\u4e00\u4e2a TCP \u7684\u9700\u6c42\uff0c\u4f46\u5b83\u672c\u8eab\u662f\u4e00\u4e2a\u590d\u6742\u7684\u8bdd\u9898\uff0c\u5728\u672c\u6587\u6863\u4e2d\u6ca1\u6709\u5c55\u5f00\u8bb2\uff0c\u56e0\u4e3a\u5b83\u6709\u5f88\u591a options \u53ef\u80fd\u5e76\u4e0d\u4f1a\u5f71\u54cd \u8be5\u6587\u6863\u7684\u6838\u5fc3\u76ee\u6807 \u2014\u2014 \u57fa\u672c\u7684\u4e92\u64cd\u4f5c\u6027(basic interoperability)<br \/>\n\u540c\u6837\u7684\uff0c\u5927\u591a\u6570 TCP\u5b9e\u73b0 \u90fd\u5305\u542b\u4e00\u4e9b\u8868\u73b0 <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7323\">\u51fa\u8272\u7684\u6269\u5c55(RFC7323)<\/a>\uff0c\u4f46\u8fd9\u6ca1\u6709\u4e25\u683c\u8981\u6c42\u3001\u4e5f\u6ca1\u6709\u5728\u672c\u6587\u6863\u4e2d\u5965\u4f26<br \/>\n\u53e6\u5916\uff0cTCP\u4e2d\u7684 Multipath \u76f8\u5173\u95ee\u9898\u4e5f\u9700\u8981\u88ab\u7559\u610f\uff0c\u53c2\u8003\uff1a<a href=\"https:\/\/www.rfc-editor.org\/info\/rfc8684\">TCP Extensions for Multipath Operation with Multiple Addresses<\/a><\/p>\n<p>\u672c\u6587\u6863\u5bf9\u4e8e RFC793 \u7684\u4fee\u8ba2\u5305\u542b\u5728 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#changes\">\u6bb5\u843d5<\/a><\/p>\n<h2>\u8981\u6c42\u8bcd\u6c47<\/h2>\n<p>\u5173\u4e8e <code>MUST<\/code> <code>MUST NOT<\/code> <code>REQUIRED<\/code> <code>SHALL<\/code> <code>SHOLD<\/code> <code>SHOLD NOT<\/code> &#8230; \u8fd9\u4e9b\u8bcd\u6c47\uff0c\u662fRFC\u6587\u6863\u4e2d\u7684\u4e00\u4e2a\u901a\u7528\u8bcd\u6c47\uff0c<br \/>\n\u53ef\u4ee5\u67e5\u9605\uff1a<a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc2119\">Key words for use in RFCs to Indicate Requirement Levels &#8211; RFC2119<\/a><br \/>\n\u8fd9\u91cc\u4e0d\u518d\u8d58\u8ff0<\/p>\n<h2>\u5173\u952e\u7684 TCP \u6982\u5ff5<\/h2>\n<p>TCP \u4e3a <code>\u5e94\u7528(applications)<\/code> \u63d0\u4f9b\u7684\u670d\u52a1\u5305\u542b\u4ee5\u4e0b\u4e09\u4e2a\u57fa\u672c\u7279\u6027\uff1a<\/p>\n<ul>\n<li><code>\u53ef\u9760\u7684(reliable)<\/code><\/li>\n<li><code>\u6709\u5e8f\u7684(in-order)<\/code><\/li>\n<li><code>\u5b57\u8282\u6d41(byte-stream)<\/code><\/li>\n<\/ul>\n<p>\u5e94\u7528 \u7684 \u5b57\u8282\u6d41 \u5728\u7f51\u7edc\u4e2d\u4ee5 <code>TCP segments<\/code> \u7684\u5f62\u5f0f\u4f20\u64ad\uff0c<br \/>\n\u6bcf\u4e2a <code>TCP\u6bb5(TCP segment)<\/code> \u90fd\u5c06\u4f1a\u4f5c\u4e3a <code>IP\u534f\u8bae\u7684<\/code> <code>\u6570\u636e\u62a5(datagram)<\/code> \u53d1\u9001<\/p>\n<p>TCP \u7684\u53ef\u9760\u6027\u5305\u62ec\uff1a<\/p>\n<ul>\n<li>(\u901a\u8fc7 sequence numbers) \u68c0\u6d4b \u6570\u636e\u5305(packet) \u7684\u4e22\u5931<\/li>\n<li>(\u901a\u8fc7\u6bcf\u4e2a segment \u7684\u6821\u9a8c\u548c\uff09\u9519\u8bef\u6821\u9a8c<\/li>\n<li>\u91cd\u4f20\u4fee\u6b63<\/li>\n<\/ul>\n<p>TCP \u652f\u6301\u6570\u636e <code>\u5355\u64ad\u4f20\u8f93(unicast delivery)<\/code>. \u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u4e0d\u52a0\u4fee\u6539\u800c\u4f7f\u7528 <code>\u4efb\u64ad(anycast)<\/code>\uff0c\u4f46\u8fd9\u5728\u5e95\u5c42\u534f\u8bae\u8f6c\u53d1\u65f6\u7531\u4e8e \u884c\u4e3a(behavior) \u53d8\u5316\u800c\u53ef\u80fd\u4ea7\u751f\u4e00\u4e9b\u98ce\u9669\uff0c\u53c2\u8003\uff1a<a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7094\">Architectural Considerations of IP Anycast &#8211; RFC7094<\/a><\/p>\n<p>TCP \u662f <code>\u9762\u5411\u8fde\u63a5(connection oriented)<\/code> \u7684, \u5c3d\u7ba1\u5b83\u5e76\u4e0d\u81ea\u5e26 <code>liveness<\/code> \u68c0\u6d4b\u80fd\u529b\u3002<\/p>\n<pre><code>\u8fd9\u91cc\uff0c\u6307\u7684\u662f\u76ee\u6807\u65ad\u7ebf\u65f6\u53ef\u80fd\u5f97\u4e0d\u5230\u53ca\u65f6\u901a\u77e5\uff0c\u9700\u8981\u66f4\u9ad8\u5c42\u4f7f\u7528\u5fc3\u8df3\u68c0\u6d4b\u4e4b\u7c7b\u7684\u673a\u5236\u8fdb\u884c\u8f85\u52a9  <\/code><\/pre>\n<p>\u6570\u636e\u6d41\u652f\u6301\u5728 TCP \u8fde\u63a5\u4e2d\u53cc\u5411\u4f20\u8f93\uff0c\u4e5f\u53ef\u4ee5\u4ec5\u4ec5\u5355\u5411\u53d1\u9001\u6570\u636e.<\/p>\n<p>TCP \u4f7f\u7528 <code>\u7aef\u53e3\u53f7(port numbers)<\/code> \u6765\u8bc6\u522b <code>\u5e94\u7528\u670d\u52a1(application services)<\/code> \uff0c<br \/>\n\u5e76\u4e14\u5728\u4e0d\u540c\u4e3b\u673a\u4e4b\u95f4 <code>\u591a\u8def\u590d\u7528(multiplex)<\/code> \u4e0d\u540c\u7684\u6d41<\/p>\n<p>\u66f4\u591a TCP \u548c\u5176\u4ed6\u4f20\u8f93\u534f\u8bae\u7684\u533a\u522b\u53ef\u4ee5\u5728 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8095#section-3.1\">RFC8095<\/a> \u7b2c\u4e09\u6bb5\u843d\u627e\u5230\uff0c\u800c\u66f4\u8fdb\u4e00\u6b65\u7684\u5173\u4e8e TCP \u7684\u5f00\u53d1\u52a8\u673a \u4ee5\u53ca\u5728 <code>\u534f\u8bae\u6808(Internet protocol stack)<\/code> \u4e2d\u7684\u89d2\u8272\u5b9a\u4f4d\u53ef\u4ee5\u5728 <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc793\">RFC793<\/a> \u7b2c\u4e8c\u6bb5\u843d\u627e\u5230<\/p>\n<h1>\u529f\u80fd\u89c4\u8303<\/h1>\n<h2>\u5934\u90e8\u683c\u5f0f<\/h2>\n<p>\u5728\u7ffb\u8bd1\u539f\u6587\u524d\uff0c\u5148\u63d0\u4e00\u4e0b <code>\u5c01\u88c5<\/code><br \/>\n\u4ece \u5e94\u7528\u5c42\u5f80\u4e0b\u5230\u7269\u7406\u5c42\uff0c\u6bcf\u4e00\u5c42\u534f\u8bae\u90fd\u4f1a\u4ee5\u81ea\u5df1\u7684\u65b9\u5f0f\u53bb\u5904\u7406\u6570\u636e\uff0c\u4e3a\u4e86\u8ba9\u5bf9\u7b49\u7684\u53e6\u4e00\u7aef\u534f\u8bae\u5728\u5904\u7406\u6570\u636e\u65f6\u80fd\u66f4\u6709\u6548\u5730\u6c9f\u901a\uff0c\u6bcf\u4e00\u5c42\u534f\u8bae\u90fd\u4f1a\u5c06\u4e0a\u4e00\u5c42\u7ed9\u5230\u7684\u6570\u636e\u89c6\u4e3a\u5b8c\u6574\u7684 user data\uff0c\u4e0d\u8fdb\u884c\u5e72\u9884\uff0c\u800c\u5728\u6b64\u57fa\u7840\u4e0a\u8ffd\u52a0\u4e00\u90e8\u5206\u5f53\u524d\u5c42\u534f\u8bae\u9700\u8981\u7684\u4fe1\u606f\uff0c\u8fd9\u88ab\u79f0\u4e3a\u5934\u90e8(header)\uff0c<br \/>\n\u5728\u53d1\u9001\u7aef\uff0c\u534f\u8bae\u6808\u4ece\u4e0a\u5f80\u4e0b\u6bcf\u4e00\u5c42\u4f1a\u5c42\u5c42\u53e0\u52a0header\uff0c\u7136\u540e\u5728\u63a5\u6536\u7aef\u53cd\u8fc7\u6765\u4e00\u5c42\u5c42\u5265\u79bb<br \/>\n\u8fd9\u79cd\u8ffd\u52a0\u5934\u90e8\u65b9\u5f0f\u79f0\u4e3a \u5c01\u88c5\uff0c\u5173\u4e8e IP\u5934\u7684\u5c01\u88c5\uff0c\u53c2\u8003 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc2003.html\"> IP Encapsulation within IP<\/a><\/p>\n<p><code>TCP segments<\/code> \u4f1a\uff08\u4f7f\u7528\u4e0b\u5c42IP\u534f\u8bae\uff09\u4f5c\u4e3a <code>Internet Datagram<\/code> \u8fdb\u884c\u53d1\u9001.<br \/>\n<code>IP header<\/code> \u5305\u542b\u82e5\u5e72\u4fe1\u606f\u5b57\u6bb5\uff0c\u5305\u542b \u6e90\u3001\u76ee\u6807\u7684\u4e3b\u673a\u5730\u5740.<br \/>\n\u800c\u4e00\u4e2a <code>TCP header<\/code> \u8ddf\u5728 <code>IP headers<\/code> \u540e\uff0c\u4ee5\u63d0\u4f9b TCP \u7684\u7279\u6b8a\u4fe1\u606f.<\/p>\n<p>\u8fd9\u79cd\u5212\u5206\u65b9\u5f0f\u5141\u8bb8\u5728 TCP \u4e4b\u5916\u5b58\u5728\u5176\u4ed6\u7684 <code>\u4e3b\u673a\u7ea7\u522b\u534f\u8bae(host-level protocols)<\/code>. \u800c\u5728\u65e9\u671f\u7684 <code>\u7f51\u7edc\u534f\u8bae\u7c07(Internet suite of protocols)<\/code> \u7684\u5f00\u53d1\u4e2d\uff0c<code>IP header<\/code> \u76f4\u63a5\u4f5c\u4e3a TCP \u7684\u4e00\u90e8\u5206<\/p>\n<p>\u8be5\u6587\u6863\u4f7f\u7528 TCP headers \u6765\u5bf9 TCP \u8fdb\u884c\u63cf\u8ff0<\/p>\n<p>\u4e00\u4e2a <code>TCP header<\/code> \u540e\u7d27\u8ddf\u8be5 segment \u4e2d\u4efb\u4f55\u7684 <code>user data<\/code>\uff0c \uff08\u6ce8\uff0c\u8fd9\u91cc\u7684 user \u4ecd\u7136\u662f\u4e00\u62bd\u8c61\u6982\u5ff5\uff0c\u4e0d\u7528\u6df1\u7a76\uff09<br \/>\n\u8fd9\u79cd\u683c\u5f0f\u53ef\u4ee5\u53c2\u8003\uff1a<a href=\"https:\/datatracker.ietf.org\/doc\/html\/draft-mcquistin-augmented-ascii-diagrams-10\">Describing Protocol Data Units with Augmented Packet Header Diagrams<\/a><\/p>\n<pre><code>     0                   1                   2                   3\n    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |          Source Port          |       Destination Port        |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                        Sequence Number                        |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                    Acknowledgment Number                      |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |  Data |       |C|E|U|A|P|R|S|F|                               |\n   | Offset| Rsrvd |W|C|R|C|S|S|Y|I|            Window             |\n   |       |       |R|E|G|K|H|T|N|N|                               |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |           Checksum            |         Urgent Pointer        |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                           [Options]                           |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n   |                                                               :\n   :                             Data                              :\n   :                                                               |\n   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n   \u6ce8\u610f\uff0c\u4e00\u4e2a | \u8868\u793a\u4e00\u4e2a bit \n\n   \u8be5\u56fe\u793a\u6574\u4f53\u4e3a\u4e00\u4e2a segment\uff0c \u800c TCP \u8981\u53d1\u7684\u6d88\u606f\u53ef\u80fd\u88ab\u62c6\u6210\u591a\u4e2a segment<\/code><\/pre>\n<p>\u5176\u4e2d\uff1a<\/p>\n<p><strong>Source Port<\/strong>\uff1a 16 bits\uff0c<br \/>\n\u6e90\u7aef\u53e3\uff0c\u6620\u5c04 0 ~ 65535(2^16)<\/p>\n<p><strong>Destination Port<\/strong>\uff1a 16 bits\uff0c<br \/>\n\u76ee\u6807\u7aef\u53e3\uff0c\u6620\u5c04 0 ~ 65535(2^16)<\/p>\n<p>\u8fd9\u4e5f\u662f\u4e3b\u673a\u7684\u7aef\u53e3\u8303\u56f4\uff0c<\/p>\n<p><strong>Sequence Number<\/strong>\uff1a32 bits\uff0c<br \/>\n\u8bd1\u4f5c <code>\u5e8f\u5217\u53f7<\/code> \uff0c\u7528\u4e8e\u6807\u8bb0\u6bcf\u4e2a segment \u4e2d \u6570\u636e\u90e8\u5206\u516b\u4f4d\u5b57\u8282\u7684\u8d77\u59cb\u5e8f\u53f7<\/p>\n<p>\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u503c\uff0c\u5e76\u4e14\u7406\u89e3\u8d77\u6765\u4f1a\u6bd4\u8f83\u62bd\u8c61\uff0c<br \/>\n\u9996\u5148 TCP segment \u7684\u5355\u4f4d\u662f octet\uff0c\u672c\u6587\u4e2d\u5747\u4ee5 \u516b\u4f4d\u5b57\u8282 \u8fdb\u884c\u6307\u4ee3<br \/>\n\u56e0\u4e3a TCP \u662f\u53ef\u9760\u7684\u4f20\u8f93\uff0c\u4f1a\u4fdd\u8bc1\u6bcf\u4e2a\u516b\u4f4d\u5b57\u8282 \u6709\u5e8f\u3001\u5b8c\u6574\u3001\u4e0d\u91cd\u590d \u5730\u5b89\u5168\u9001\u8fbe\uff0c\u5426\u5219\u8fdb\u884c\u91cd\u4f20<br \/>\n\u56e0\u6b64\uff0c\u5f53 TCP \u5f00\u59cb\u67d0\u6b21\u8fde\u63a5\u65f6\uff0c\u4f1a\u901a\u8fc7\u63e1\u624b\u673a\u5236\uff08\u89c1\u4e0b\u6587\uff09\u4f7f\u5f97\u53cc\u65b9\u8fdb\u5165\u4e00\u4e2a\u53ef\u4ee5\u5b89\u5168\u4f20\u8f93\u7684\u72b6\u6001<br \/>\n\u800c\u5f53\u5f00\u59cb\u4f20\u8f93\u67d0\u90e8\u5206\u6570\u636e\u65f6\uff0c\u5b83\u4f1a\u5728 segment \u7684 header \u4e2d\u6807\u8bb0\u672c\u6b21\u4f20\u8f93\u7684\u8d77\u59cb\u4f4d\u7f6e\uff0c\u4e5f\u5c31\u662f\u5e8f\u5217\u53f7(Sequence Number)<\/p>\n<p>header \u4e2d\u643a\u5e26\u7684 Sequence Number \u5728\u6587\u6863\u6587\u5e38\u5e38\u7f29\u5199\u4e3a SEQ\uff0c\u89c1\u672f\u8bed\u8868\uff0c<br \/>\nsegment \u643a\u5e26\u7684\u6570\u636e\u90e8\u5206\uff0c\u4ee5 \u516b\u4f4d\u5b57\u8282\u4e3a\u5355\u4f4d\uff0c\u800c\u6bcf\u4e2a\u516b\u4f4d\u5b57\u8282\u90fd\u6709\u4e00\u4e2a\u5e8f\u5217\u53f7\uff0c\u4e3a\u4e86\u548c header \u4e2d\u7684\u503c\u533a\u5206\u5f00\uff0c\u7528\u5c0f\u5199\u7684 sequence number \u8868\u793a\uff0c\u5b83\u662f\u57fa\u4e8e SEQ \u4f9d\u6b21\u9012\u589e\u7684\uff0c<br \/>\n\u6839\u636e\u6240\u6307\u5b9a\u7684 SEQ \u80fd\u5f97\u5230\u7b2c\u4e00\u4e2a\u516b\u4f4d\u5b57\u8282\u7684 sequence number\uff0c\u5e76\u63a8\u65ad\u51fa segment \u4e2d\u6574\u4e2a\u6570\u636e\u90e8\u5206\u6bcf\u4e2a\u516b\u4f4d\u5b57\u8282\u62e5\u6709\u7684 sequence number<\/p>\n<p>\u6bd4\u5982 SEQ=100\uff0c\u5219\u8868\u793a\u6b63\u5728\u5411\u5bf9\u65b9\u53d1\u9001\u4e00\u4e2asegment\uff0c\u5b83\u643a\u5e26\u4e00\u6bb5\u6570\u636e\uff0c\u5e76\u4e14\u6570\u636e\u7684\u7b2c\u4e00\u4e2a\u516b\u4f4d\u5b57\u8282\u7684\u5e8f\u5217\u53f7\u662f100\uff0c<br \/>\n\u800c\u5bf9\u65b9\u5728\u63a5\u6536\u5230\u6570\u636e\u540e\uff0c\u89c6\u60c5\u51b5\u8fd4\u56de\u4e00\u4e2a ACK(\u89c1\u4e0b\u6587)\uff0c\u53cd\u9988\u4f60\u5b83\u5df2\u7ecf\u63a5\u6536\u5230\u4e86\u672c\u5730\u7ed9\u7684\u6570\u636e\uff0c\u5e76\u4e14\u6307\u5b9a\u5e0c\u671b\u63a5\u4e0b\u6765\u672c\u5730\u80fd\u7ed9\u5bf9\u65b9\u63d0\u4f9b\u7684\u6570\u636e<\/p>\n<p>\u5f53 <code>SYN(control bits)<\/code> \u6807\u5fd7\u88ab\u6307\u5b9a\u65f6\uff0c\u610f\u5473\u7740\u5904\u4e8e\u8fde\u63a5\u521d\u59cb\u5316\u9636\u6bb5\uff0c\u9700\u8981\u7ed9\u5b9a\u4e00\u4e2a\u521d\u59cb\u503c\uff0c\u8fd9\u4e2a\u521d\u59cb\u503c\u4e3a ISN\uff0c\u800c\u7b2c\u4e00\u4e2a\u516b\u4f4d\u5b57\u8282\u7684\u5e8f\u5217\u53f7\u662f ISN + 1(\u53ea\u6709 SYN \u548c FIN \u624d\u4f1a\u5360\u7528 1 \u4e2a\u4f4d\u7f6e\uff0c\u4f7f\u5f97\u5e8f\u5217\u53f7 + 1\uff0c\u8be6\u60c5\u89c1\u4e0b\u6587\u5173\u4e8e SYN \u7684\u4fdd\u62a4\u673a\u5236)<br \/>\n\u800c SYN \u672a\u88ab\u6307\u5b9a\u65f6\uff0c\u5219\u662f\u4f7f\u7528\u5f53\u524d segment \u643a\u5e26\u6570\u636e\u7684\u7b2c\u4e00\u4e2a\u516b\u4f4d\u5b57\u8282\u5e94\u6709\u7684\u503c\uff0c\u8fd9\u4e2a\u503c\u7531\u524d\u9762\u6d41\u7a0b\u7d2f\u79ef\u5f97\u5230.<\/p>\n<pre><code>\u4ece\u6211\u4e2a\u4eba\u7684\u63a8\u65ad\u4e0a\u6765\u8bf4\uff0cTCP \u4f1a\u4e00\u76f4\u5c1d\u8bd5\u91cd\u4f20\u5931\u8d25\u7684\u90e8\u5206\uff0c\u56e0\u6b64\u5728\u5904\u7406\u65f6\u662f\u8fd1\u4e4e\u8fde\u7eed\u7684\uff0c\u67d0\u79cd\u610f\u4e49\u4e0a\u6765\u8bf4\uff0c\u4e00\u4e2a\u5f85\u4f20\u8f93\u6570\u636e\u5728\u8fde\u63a5\u5efa\u7acb\u65f6\uff08ISN\u88ab\u786e\u5b9a\uff09\uff0c\u6bcf\u4e2a\u516b\u4f4d\u5b57\u8282\u90fd\u5df2\u7ecf\u62e5\u6709\u4e86\u4e00\u4e2a\u7406\u8bba\u4e0a\u7684\u5e8f\u5217\u53f7\n\u800c\u8fd9\u4e2a\u5f85\u4f20\u8f93\u6570\u636e\u5728\u7a0d\u540e\u5c06\u5206\u82e5\u5e72segment\u8fdb\u884c\u4f20\u8f93<\/code><\/pre>\n<pre><code>\u6362\u53e5\u8bdd\u8bf4\uff0cSequence Number \u662f\u5728\u544a\u8bc9\u5bf9\u65b9\uff0c\u6211\u5f53\u524d\u7ed9\u4f60\u7684\u662f\u4ec0\u4e48\u5185\u5bb9<\/code><\/pre>\n<p><strong>Acknowledgment Number<\/strong>\uff1a 32 bits\uff0c<br \/>\n\u662f\u4e00\u4e2a\u548c <code>sequence number<\/code> \u606f\u606f\u76f8\u5173\u7684\u503c<br \/>\n\u5f53 <code>ACK(control bits)<\/code> \u88ab\u8bbe\u7f6e\u65f6\uff0c\u8be5\u5b57\u6bb5\u5305\u542b segment \u53d1\u9001\u8005 \u9700\u8981\u7684 \u4e0b\u4e00\u4e2a sequence number<\/p>\n<p>\u5e38\u5728\u8be5\u6587\u6863\u5185\u7b80\u79f0\u4e3a ACK\uff0c\u5e76\u4e14\u6709\u6b67\u4e49\uff0c<br \/>\n\u5b83\u8868\u793a ACK(\u63a7\u5236\u4f4d) \u65f6\uff0c\u610f\u601d\u662f\u786e\u8ba4\u6536\u5230\u4e86\u5bf9\u65b9\u7684\u6570\u636e\uff0c\u5e76\u4e14\u5e0c\u671b\u6307\u5b9a\u4e0b\u4e00\u4e2a\u4f20\u8fc7\u6765\u7684\u6570\u636e\uff0c\u56e0\u6b64\u542f\u7528 ACK(\u5e8f\u53f7)<br \/>\n\u800c ACK(\u5e8f\u53f7) \u5219\u8868\u793a\u5e0c\u671b\u5bf9\u65b9\u4e0b\u6b21\u53d1\u7684 segment \u7684 Sequence Number \u7684\u503c\uff0c\u4e5f\u5c31\u662f\u8bf4\u5e0c\u671b\u5bf9\u65b9\u63a5\u4e0b\u6765\u8981\u540c\u6b65\u7ed9\u81ea\u5df1\u7684\u503c<\/p>\n<p>\u5728 TCP \u4f20\u8f93\u4e2d\u662f\u53cc\u5411\u7684\uff0cACK \u548c SEQ \u5e38\u5e38\u4e00\u8d77\u88ab\u53d1\u51fa\u3001\u63a5\u6536\uff0c<br \/>\n\u5bf9\u4e8e\uff08\u4e24\u7aef\u7684\uff09\u53d1\u9001\u65b9\uff1a\u7528\u53d1\u51fa\u7684 SEQ \u8868\u793a\u81ea\u5df1\u4f20\u7684\u662f\u54ea\u90e8\u5206\u6570\u636e\uff0c\u7528\u53d1\u51fa\u7684 ACK \u8868\u793a\u81ea\u5df1\u5e0c\u671b\u8981\u54ea\u90e8\u5206\u6570\u636e<br \/>\n\u5bf9\u4e8e\uff08\u4e24\u7aef\u7684\uff09\u63a5\u6536\u65b9\uff1a\u7528\u6536\u5230\u7684 SEQ \u786e\u8ba4\u81ea\u5df1\u63a5\u6536\u5230\u7684\u662f\u4ec0\u4e48\u6570\u636e\uff0c\u7528\u6536\u5230\u7684 ACK \u786e\u8ba4\u81ea\u5df1\u5e94\u8be5\u63d0\u4f9b\u54ea\u90e8\u5206\u6570\u636e\u7ed9\u5bf9\u65b9<\/p>\n<pre><code>\u76f8\u5f53\u4e8e\u544a\u8bc9\u5bf9\u65b9\uff0c\u6211\u63a5\u4e0b\u6765\u9700\u8981\u4ec0\u4e48<\/code><\/pre>\n<p><strong>Data Offset (DOffset)<\/strong>\uff1a 4 bits\uff0c<br \/>\n<code>TCP header<\/code> (\u751a\u81f3\u5305\u62ec options) \u7684\u957f\u5ea6\u662f 32 bits \u7684\u6574\u6570\u500d<br \/>\n\u800c\u8be5\u503c\u5219\u8868\u793a\u5728 <code>TCP header<\/code> \u4e2d <code>32-bit words<\/code> \u7684\u6570\u91cf\uff0c<br \/>\n\u5b83\u7528\u4e8e\u6307\u793a data \u7684\u8d77\u59cb\u4f4d\u7f6e<br \/>\n\u56e0\u4e3a\u867d\u7136\u90e8\u5206\u503c\u7684\u957f\u5ea6\u662f\u56fa\u5b9a\u7684\uff0c\u4f46\u6709\u4e9b\u5185\u5bb9\u7684\u957f\u5ea6\u4e0d\u5b9a\uff0c\u56e0\u6b64\u9700\u8981\u501f\u52a9\u8fd9\u4e2a\u504f\u79fb\u503c\u6765\u786e\u8ba4 <code>user data<\/code> \u7684\u5b9e\u9645\u4f4d\u7f6e<\/p>\n<p><strong>Control bits<\/strong><br \/>\n<code>control bits(\u63a7\u5236\u4f4d)<\/code> \u4e5f\u79f0\u4e3a <code>flags(\u6807\u8bb0)<\/code>\uff0c<br \/>\n\u7531 IANA \u7ba1\u7406\uff0c\u53c2\u8003\uff1a<a href=\"https:\/\/www.iana.org\/assignments\/tcp-parameters\/\">Transmission Control Protocol (TCP)Parameters<\/a><\/p>\n<p><strong>Reserved (Rsrvd)<\/strong>\uff1a 4 bits\uff0c<br \/>\n\u4e00\u7ec4\u9884\u7559\u7684 <code>control bits<\/code> \uff0c \u5728\u751f\u6210 segments \u5fc5\u987b\u8bbe\u4e3a \u96f6\u503c\uff0c<br \/>\n\u5982\u679c \u53d1\u9001 \u6216\u8005 \u63a5\u6536\u65b9 \u7684\u4e3b\u673a\uff0c\u6ca1\u6709\u5728\u672a\u6765\u5b9e\u73b0\u76f8\u5e94\u7684\u529f\u80fd\uff0c\u5219\u5fc5\u987b\u88ab\u5ffd\u7565<\/p>\n<p>\u800c\u5269\u4e0b\u7684\u51e0\u4e2a\u5df2\u7ecf\u5b58\u5728\u7684 (\u56fe\u793a\u4e2d Rsrvd \u53f3\u4fa7\uff0c\u7ad6\u8d77\u6765\u7684\u90a3\u51e0\u4e2a) \u662f\uff1a<\/p>\n<ul>\n<li>CWR\uff1a\u51cf\u5c11\u963b\u585eWindow\uff0c\u53c2\u8003 <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc3168\">RFC3168<\/a><\/li>\n<li>ECE\uff1aECN-Echo\uff0c\u53c2\u8003 <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc3168\">RFC3168<\/a><\/li>\n<li>URG\uff1a\u542f\u7528 Urgent Pointer<\/li>\n<li>ACK\uff1a\u542f\u7528 Acknowledgment<\/li>\n<li>PSH\uff1apush function \uff0c\u53c2\u8003 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#user-api\">\u672c\u6587\u6863\u6bb5\u843d 3.9.1<\/a><\/li>\n<li>RST: \u91cd\u7f6e\u8fde\u63a5<\/li>\n<li>SYN: \u540c\u6b65\u5e8f\u5217\u53f7<\/li>\n<li>FIN: \u53d1\u9001\u8005\u4e0d\u5b58\u5728\u66f4\u591a\u6570\u636e<\/li>\n<\/ul>\n<p>\u6bcf\u4e2a <code>control bit<\/code> \u4e0d\u662f\u4e09\u8a00\u4e24\u8bed\u80fd\u8bf4\u6e05\u695a\u7684\uff0c\u6240\u4ee5\u8fd9\u91cc\u53ea\u662f\u7b80\u5355\u63d0\u4e00\u4e0b\uff1a<br \/>\nURG\u3001ACK \u5728 TCP header \u4e2d\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684\u503c\uff0c\u5f53\u8fd9\u4e24\u4e2a\u63a7\u5236\u4f4d\u88ab\u8868\u8fbe\u65f6\uff0c\u8fd9\u4e24\u4e2a\u5bf9\u5e94\u7684\u503c\u624d\u6709\u610f\u4e49<br \/>\nRST \u7528\u4e8e\u91cd\u7f6e\u8fde\u63a5(\u5230 LISTEN) \u53c2\u8003\u72b6\u6001\u673a<br \/>\n\u800c SYN \u8868\u793a\u8fde\u63a5\u5efa\u7acb\u4e4b\u5904\uff0c\u9700\u8981\u5bf9 Sequence Number \u8fdb\u884c\u4ea4\u6362\u65f6\uff0cTCP \u4e2d\u67d0\u4e00\u7aef\u4e3a\u4e86\u8bf7\u6c42\u540c\u6b65\u800c\u643a\u5e26\u7684\u63a7\u5236\u4f4d<br \/>\nFIN \u5219\u76f8\u53cd\uff0c\u8868\u793a\u5373\u5c06\u7ed3\u675f\u8fde\u63a5<\/p>\n<p><strong>Window<\/strong> 16 bits\uff0c<br \/>\n<a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#section-3.1-6.16.1\">Window &#8211; RFC9293<\/a><br \/>\n<a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#name-managing-the-window\">3.8.6. Managing the Window &#8211; RFC9293<\/a><\/p>\n<p>\u8be5 segment \u7684\u53d1\u9001\u8005 \u5e0c\u671b\u63a5\u6536 \u7684\uff0c\u4ee5 <code>\u786e\u8ba4\u5e8f\u53f7(acknowledgment)<\/code> \u5b57\u6bb5\u4e2d\u6307\u793a\u7684\u5b57\u8282\u5f00\u5934\u7684\uff0c\u6570\u636e\u5b57\u8282(data octets) \u7684\u6570\u91cf.<br \/>\n\u8be5\u503c\u4f1a\u56e0\u4e3a <code>window scaling extension<\/code> \u800c\u53d1\u751f\u504f\u79fb\uff0c\u53c2\u8003 <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7323\">RFC7323<\/a><\/p>\n<p>window \u7684 \u5927\u5c0f\u5fc5\u987b\u88ab\u89c6\u4e3a \u65e0\u7b26\u53f7\u6570\uff0c\u5426\u5219\u53ef\u80fd\u5bfc\u81f4 \u8d1f\u7684 window \u6216\u8005 TCP \u4e0d\u5de5\u4f5c\u7684\u60c5\u51b5<br \/>\n\u63a8\u8350\u5728\u5b9e\u73b0\u4e2d\uff0c\u9884\u7559 32 bit \u5b57\u6bb5\u4e3a \u53d1\u9001\u3001\u63a5\u6536\u8005\u7684 window size \u7528\u4f5c \u8fde\u63a5\u8bb0\u5f55(connection record)\uff0c\u5e76\u5c06\u6240\u6709 window \u7ec4\u5408\u4e3a 32 bits<\/p>\n<pre><code>\u5728\u53c2\u8003\u540e\u7eed\u6587\u6863\u540e\u53ef\u4ee5\u5b8c\u5584\u5bf9\u8fd9\u4e2a\u4e1c\u897f\u7684\u8ba4\u77e5\uff0c    \nwindow \u5b9e\u9645\u662f\u4e00\u4e2a\u6570\u503c\uff0c\u4e5f\u4ee3\u8868\u4e00\u4e2a\u533a\u57df\uff0c\u6307\u4ee3\u9700\u8981\u7684 \u516b\u4f4d\u5b57\u8282 \u7684\u6570\u91cf\uff0c    \n\u800c\u8fd9\u4e9b\u516b\u4f4d\u5b57\u8282\uff0c\u4e5f\u53ef\u4ee5\u89c6\u4e3a\u4e00\u4e2a window \u533a\u57df\uff0c\u8fd9\u4e2a\u6982\u5ff5\u6bd4\u8f83\u62bd\u8c61\uff0c\u4f46\u662f\u4e0d\u96be\u7406\u89e3  <\/code><\/pre>\n<pre><code>\u76f8\u5f53\u4e8e\u544a\u8bc9\u5bf9\u65b9\uff0c\u6211\u5e0c\u671b\u4f60\u57fa\u4e8e ACK \u4e3a\u8d77\u70b9\uff0c\u63a5\u4e0b\u6765\u7ed9\u6211\u53d1\u591a\u5c11\u4e1c\u897f<\/code><\/pre>\n<p><strong>Checksum<\/strong>\uff1a16 bits<\/p>\n<pre><code>  TODO: \u6821\u9a8c\u548c\uff0c\u53c2\u8003\u539f\u6587<\/code><\/pre>\n<p><strong>Urgent Pointer<\/strong>\uff1a16 bits<br \/>\n\u8be5\u5b57\u6bb5\u5c06 \u7d27\u6025\u6307\u9488(urgent pointer) \u5f53\u524d\u7684\u503c\uff0c\u4f5c\u4e3a segment \u7684\u5e8f\u5217\u53f7\u7684\u6b63\u5411\u504f\u79fb\u503c(positive offset)<br \/>\n\u7d27\u6025\u6307\u9488 \u6307\u5411 \u7d27\u8ddf urgent data \u7684 octet \u7684 \u5e8f\u5217\u53f7<br \/>\n\u8be5\u5b57\u6bb5\u53ea\u80fd\u5728\u8bbe\u7f6e\u4e86 <code>URG(control bit)<\/code> \u65f6\u88ab\u89e3\u91ca<\/p>\n<p><strong>Options<\/strong><\/p>\n<pre><code>[TCP Option]; size(Options) == (DOffset-5)*32; \npresent only when DOffset &gt; 5. \nNote that this size expression also includes any padding trailing the actual options present<\/code><\/pre>\n<p>options \u53ef\u80fd\u5360\u636e TCP header \u672b\u5c3e 8 bits (1 octet) \u500d\u6570\u957f\u5ea6 \u7684\u7a7a\u95f4\uff0c<br \/>\n\u6240\u6709 options \u90fd\u88ab\u5305\u542b\u5728\u6821\u9a8c\u548c(checksum) \u4e2d<br \/>\n\u4e00\u4e2a option \u53ef\u80fd\u59cb\u4e8e\u4efb\u4f55 \u5b57\u8282\u533a\u95f4(octet boundary)\uff0c\u5bf9\u4e8e option \u683c\u5f0f\u6709\u4e24\u79cd\u60c5\u51b5\uff1a<\/p>\n<ul>\n<li>\u4e00\u4e2a\u5355\u72ec\u7684 option-kind octet<\/li>\n<li>\u4e00\u4e2a option-kind octets\uff0c\u4ee5\u53ca\u4f5c\u4e3a option-data octets \u7684 option-length octets\u6ce8\u610f\uff0coptions \u5217\u8868\u53ef\u80fd\u6bd4 Data Offset \u5b57\u6bb5\u6697\u793a\u7684\u503c\u8981\u77ed\uff0c<br \/>\n\u5728 header \u5185\u5bb9\u4e2d\u8d85\u51fa option list \u7684\u90e8\u5206\uff0c\u5fc5\u987b\u4ee5 \u96f6\u503c \u8fdb\u884c\u586b\u5145<br \/>\n\u4e00\u4e2a TCP implementation\uff0c\u53ef\u4ee5\u9009\u62e9\u6027\u5730\u5b9a\u4e49 options\uff0c\u4f46\u8be5\u5b9e\u73b0\u5fc5\u987b\u652f\u6301\u6240\u6709 options<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>Kind<\/th>\n<th>Length<\/th>\n<th>Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>0<\/td>\n<td>&#8211;<\/td>\n<td>End of Option List Option.<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>&#8211;<\/td>\n<td>No-Operation.<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>4<\/td>\n<td>Maximum Segment Size.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8fd9\u4e9b\u9009\u9879\u7684\u7ec6\u8282\u5728 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#Option-Definitions\">\u672c\u6587\u6863 \u6bb5\u843d 3.2<\/a><\/p>\n<p>\u4e00\u4e2a TCP implementation \u5fc5\u987b \u65e0\u9519\u8bef\u5730 \u5ffd\u7565\u6240\u6709\u672a\u5b9e\u73b0\u7684 TCP Option\uff0c\u5047\u8bbe option \u5305\u542b\u4e00\u4e2a length \u5b57\u6bb5<br \/>\n\u9664\u4e86 <code>EOL(End of Option)<\/code> \u548c <code>NOP(No-Operation)<\/code> \u5916\u7684 \u6240\u6709 options \uff0c\u5fc5\u987b\u6709 length \u5b57\u6bb5<br \/>\n\u6240\u6709 TCP implementation \u5fc5\u987b\u51c6\u5907\u5904\u7406\u4e00\u4e2a\u4e0d\u5408\u89c4\u7684 length \uff08\u6bd4\u5982 \u96f6\u503c\uff09\uff0c\u5efa\u8bae\u7684\u5904\u7406\u65b9\u5f0f\u662f \u91cd\u7f6e\u8fde\u63a5\u3001\u5e76\u4e14\u8bb0\u5f55\u9519\u8bef\u539f\u56e0\u65e5\u5fd7<\/p>\n<p>\u6ce8\u610f\uff0c\u5bf9\u4e8e TCP Options \u53ef\u7528\u7a7a\u95f4\u7684\u6269\u5c55\u6b63\u5728\u4e0d\u65ad\u63a8\u8fdb(ongoing work)\uff0c\u53c2\u8003<a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/draft-ietf-tcpm-tcp-edo-12\">TCP Extended Data Offset Option<\/a><\/p>\n<p><strong>Data<\/strong><br \/>\n\u5f53\u524d TCP segment \u643a\u5e26\u7684 <code>\u6570\u636e\u5b9e\u4f53(user data)<\/code><\/p>\n<p><strong>\u603b\u7ed3<\/strong><br \/>\nTCP \u53d1\u9001\u6570\u636e\u65f6\uff0c\u53ef\u80fd\u62c6\u5206\u4e3a\u82e5\u5e72\u4e2a segment\uff0c<br \/>\n\u6bcf\u4e2a segment \u90fd\u6709\u4e00\u4e2a header\uff0c\u79f0\u4e3a TCP header\uff0c<br \/>\n\u800c segment \u5728\u7a0d\u540e\u4f1a\u9644\u4e0a IP header\uff0c\u8fd9\u88ab\u79f0\u4e3a \u5c01\u88c5\u6280\u672f<br \/>\n\u5728 IP\u534f\u8bae\u4e2d\uff0c\u8be5\u6570\u636e\u5c06\u4f5c\u4e3a datagram \u8fdb\u884c\u53d1\u9001\uff0c\u65e0\u5173TCP\u672c\u8eab\u5185\u5bb9. \u5f53\u6570\u636e\u88ab\u5bf9\u7b49\u4fa7\u63a5\u6536\u65b9\u89e3\u6790\u65f6\uff0cTCP \u4e3a\u4fdd\u8bc1\u6570\u636e\u7684\u53ef\u9760\u6027\uff0c\u4f1a\u8fdb\u884c\u6d4b\u5e8f\u3001\u9519\u8bef\u6821\u9a8c\u3001\u91cd\u53d1 \u7b49\u7b49<\/p>\n<p>\u6bcf\u4e2a TCP header \u90fd\u6709\u56fa\u5b9a\u8981\u6c42\u7684\u683c\u5f0f\uff08\u89c1\u4e0a\u8868\uff09<br \/>\n\u6bcf\u4e2a TCP header \u4ee5 4\u4e2a \u516b\u4f4d\u5b57\u8282(octets) \u4e3a\u5355\u4f4d (\u4e5f\u5c31\u662f\u8bf4 TCP header \u7684\u957f\u5ea6\u662f 32bit \u7684\u500d\u6570)\uff0c\u57fa\u4e8e\u5bf9 Data Offset \u8fd9\u90e8\u5206\u5185\u5bb9\u8fdb\u884c\u586b\u5145\uff0c\u4fdd\u8bc1\u5b57\u8282\u5bf9\u9f50<br \/>\n\u6bcf\u4e2a TCP header \u4e4b\u540e\u7d27\u8ddf(\u7531\u4e0a\u5c42\u534f\u8bae\u4f20\u6765\u7684\uff09\u6570\u636e\u90e8\u5206(user data)\uff0c\u5176\u5355\u4f4d\u4e3a \u516b\u4f4d\u5b57\u8282\uff0c\u5e76\u4e14\u6bcf\u4e2a\u516b\u4f4d\u5b57\u8282\u90fd\u6709\u4e00\u4e2a\u53ef\u4ee5\u901a\u8fc7\u7279\u5b9a\u89c4\u5219\u5f97\u5230\u7684\u7406\u8bba\u5e8f\u53f7<\/p>\n<p>\u57fa\u4e8e TCP segment \u7684\u6570\u636e\u4ea4\u6362\uff0c\u6838\u5fc3\u5c31\u662f\u786e\u8ba4\u53cc\u65b9\u6570\u636e\u4ea4\u6362\u7684\u8fdb\u5ea6\uff0c \u4e5f\u5c31\u662f sequence number(\u5e8f\u5217\u53f7)<br \/>\n\u5355\u4e2a segment \u901a\u8fc7\u643a\u5e26\u4e00\u4e2a sequence number \u6765\u6307\u793a\u5f53\u524d\u4ece\u4ec0\u4e48\u5730\u65b9\u5f00\u59cb\u8fdb\u884c\u4ea4\u6362\uff0c<br \/>\n\u800c Acknowledgment(\u786e\u8ba4\u5e8f\u53f7) \u5219\u6307\u793a\u5f53\u524d\u5df2\u7ecf\u4ea4\u6362\u5230\u4e86\u4ec0\u4e48\u7a0b\u5ea6\uff0c<br \/>\n\u800c\u6bcf\u6b21\u6570\u636e\u4ea4\u6362\u65f6\uff0c\u53ef\u4ee5\u57fa\u4e8e\u7ed9\u5b9a\u7684 window \u503c\u540c\u6b65\u591a\u4e2a\u6570\u636e\u5b57\u8282\uff0c\u8fd9\u4e2a window \u7684\u6570\u503c\u5728\u903b\u8f91\u4e0a\u5c31\u8986\u76d6\u4e86\u533a\u95f4\uff0c\u5728\u4f5c\u4e3a\u5e8f\u5217\u65f6\u62e5\u6709\u8fb9\u754c\uff08\u6700\u5c0f\u503c\u548c\u6700\u5927\u503c\uff0c\u6216\u8005\u8bf4\u5de6\u503c\u548c\u53f3\u503c\uff09<br \/>\n\u8fd9\u4e09\u4e2a\u503c\u662f\u7406\u89e3 TCP \u6570\u636e\u4ea4\u6362\u7684\u6838\u5fc3\uff0c\u9700\u8981\u5bf9\u4ed6\u4eec\u6709\u4e00\u5b9a\u7a0b\u5ea6\u7684\u8ba4\u8bc6<\/p>\n<p>\u800c \u53e6\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u503c\u662f <code>\u63a7\u5236\u4f4d(control bits)<\/code>\uff0c\u5b83\u4eec\u662f\u4e00\u7cfb\u5217\u7531 IANA \u7ba1\u7406\u7684\u7279\u6b8a\u6807\u8bb0\uff0c\u6bcf\u4e2a\u6807\u8bb0\u90fd\u662f\u4e00\u4e2a bit\uff0c\u4e5f\u5c31\u662f 1\/0 \u7684\u5f00\u5173\uff0c\u5f53\u67d0\u4e2a\u63a7\u5236\u4f4d\u7684\u6807\u8bb0\u88ab\u6253\u5f00\u65f6\uff0c\u67d0\u4e9b\u4e8b\u60c5\u53d8\u5f97\u5141\u8bb8\u6267\u884c\uff08\u6bd4\u5982 ACK \u5f00\u542f\u65f6\uff0cAcknowledgment \u542f\u7528\uff09<br \/>\n\u8fd9\u4e9b\u6807\u8bb0\u591a\u7528\u4e8eTCP\u8fde\u63a5\u7684\u72b6\u6001\u5207\u6362\uff0c\u8be6\u60c5\u53c2\u8003\u4e0b\u9762\u7684 <a href=\"#\u72b6\u6001\u673a\">\u72b6\u6001\u673a<\/a> \u7ae0\u8282<\/p>\n<h2>\u7279\u6b8a\u9009\u9879\u5b9a\u4e49<\/h2>\n<p>TCP options \u4e2d\u5f3a\u5236\u8981\u6c42\u4ee5\u4e0b\u9009\u9879\uff1a<\/p>\n<ul>\n<li>End of Option List Option, \u8868\u793a Option List \u7684\u7ec8\u6b62<\/li>\n<li>No-Operation Option, \u7528\u4e8e\u5728Option\u95f4\u8fdb\u884c\u6807\u8bb0\uff0c\u907f\u514dOption\u5728\u8fb9\u754c\u5904\u88ab\u5206\u5272\u65f6\u88ab\u63d0\u524d\u89e3\u6790<\/li>\n<li>Maximum Segment Size Option. \u6307\u793a\u53d1\u9001\u8be5 segment \u65f6\u6700\u5927\u80fd\u4ece TCP endpoint \u63a5\u53d7\u5230\u7684 segment \u6570\u91cf<\/li>\n<\/ul>\n<p>\u5176\u4ed6\u9009\u9879\u53c2\u8003\u6587\u6863<\/p>\n<h2>TCP \u672f\u8bed<\/h2>\n<p><code>TCP Terminology Overview<\/code>\uff0c\u5b8c\u6574\u7684\u672f\u8bed\u8868\u5728 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#name-glossary\">\u6587\u6863\u7b2c\u56db\u6bb5<\/a><\/p>\n<p>TCP \u8fdb\u884c\u8fde\u63a5\u65f6\uff0c\u5b58\u5728\u591a\u79cd\u72b6\u6001\uff0c\u5728\u4e0b\u6587\u4f1a\u8fdb\u4e00\u6b65\u4ecb\u7ecd\u72b6\u6001\u673a\u76f8\u5173\u4e8b\u9879\u3002<br \/>\n\u6709\u4e00\u4e9b\u53d8\u91cf\u7528\u4e8e\u63a7\u5236\u8fd9\u4e9b\u8fde\u63a5\u72b6\u6001\uff0c\u800c\u4ed6\u4eec\u88ab\u50a8\u5b58\u5728\u4e00\u4e2a\u88ab\u79f0\u4e3a <code>TCB(\u4f20\u8f93\u63a7\u5236\u5757\uff0cTransmission Control Block)<\/code> \u7684\u8fde\u63a5\u8bb0\u5f55\u4e2d.<\/p>\n<p>\u8be5\u8bb0\u5f55\u5757\u4fdd\u7559\u5728\u4e3b\u673a\u5185\uff0c\u5b58\u50a8\u5728\u5176\u4e2d\u7684\u53d8\u91cf\u5305\u62ec\uff1a<br \/>\n\u672c\u5730\u548c\u8fdc\u7a0b IP \u5730\u5740\u548c\u7aef\u53e3\u53f7\u3001IP \u5b89\u5168\u7ea7\u522b\u548c\u8fde\u63a5\u9694\u95f4\uff08\u53c2\u89c1 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#seccomp\">\u9644\u5f55 A.1<\/a>\uff09\u3001\u6307\u5411\u7528\u6237\u53d1\u9001\u548c\u63a5\u6536\u7f13\u51b2\u533a\u7684\u6307\u9488\u3001\u6307\u5411 <code>\u91cd\u4f20\u961f\u5217(retransmit queue)<\/code> \u7684\u6307\u9488 \u4ee5\u53ca \u6307\u5411\u5f53\u524d segment \u7684\u6307\u9488.<\/p>\n<p>\u6b64\u5916\uff0c<code>TCB<\/code> \u8fd8\u50a8\u5b58\u4e00\u4e9b\u548c \u53d1\u9001\u3001\u63a5\u6536 <code>sequence numbers<\/code> \u76f8\u5173\u7684\u53d8\u91cf<\/p>\n<table>\n<thead>\n<tr>\n<th>\u53d1\u9001 <code>sequence numbers<\/code> \u76f8\u5173\uff1a<br \/>\nVariable<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SND.UNA<\/td>\n<td>send unacknowledged<\/td>\n<\/tr>\n<tr>\n<td>SND.NXT<\/td>\n<td>send next<\/td>\n<\/tr>\n<tr>\n<td>SND.WND<\/td>\n<td>send window<\/td>\n<\/tr>\n<tr>\n<td>SND.UP<\/td>\n<td>send urgent pointer<\/td>\n<\/tr>\n<tr>\n<td>SND.WL1<\/td>\n<td>segment sequence number used for last window update<\/td>\n<\/tr>\n<tr>\n<td>SND.WL2<\/td>\n<td>segment acknowledgment number used for last window update<\/td>\n<\/tr>\n<tr>\n<td>ISS initial<\/td>\n<td>send sequence number<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<thead>\n<tr>\n<th>\u63a5\u6536 <code>sequence numbers<\/code> \u76f8\u5173\uff1a<br \/>\nVariable<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>RCV.NXT<\/td>\n<td>receive next<\/td>\n<\/tr>\n<tr>\n<td>RCV.WND<\/td>\n<td>receive window<\/td>\n<\/tr>\n<tr>\n<td>RCV.UP<\/td>\n<td>receive urgent pointer<\/td>\n<\/tr>\n<tr>\n<td>IRS initial<\/td>\n<td>receive sequence number<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6587\u6863\u5728\u8fd9\u91cc\u63d0\u51fa\u4e00\u4e2a\u540d\u8bcd\u4ea4 <code>sequence space(\u5e8f\u5217\u7a7a\u95f4)<\/code>\uff0c\u6839\u636e\u8bed\u5883\uff0c\u6307\u7684\u591a\u534a\u662f\u5185\u5b58\u7a7a\u95f4<\/p>\n<p>\u4ee5\u56fe\u89e3\u7684\u5f62\u5f0f\u6765\u5e2e\u52a9\u7406\u89e3\u7684\u8bdd\uff0c\u53d1\u9001\u5e8f\u5217\u7684\u7a7a\u95f4\uff1a<\/p>\n<pre><code>                   1         2          3          4\n              ----------|----------|----------|----------\n                     SND.UNA    SND.NXT    SND.UNA\n                                          +SND.WND\n\n        1 - \u5df2\u786e\u8ba4\u7684\u65e7\u5e8f\u5217\u53f7\n        2 - \u672a\u786e\u8ba4\u6570\u636e\u7684\u5e8f\u5217\u53f7\n        3 - \u88ab\u5141\u8bb8\u7684\u65b0\u6570\u636e\u4f20\u8f93\u7684\u5e8f\u5217\u53f7\n        4 - \u5c1a\u672a\u5141\u8bb8\u4f20\u8f93\u4f46\u5373\u5c06\u5230\u6765\u7684\u6570\u636e\u7684\u5e8f\u5217\u53f7<\/code><\/pre>\n<p>\u4e8e\u662f <code>send window<\/code> \u5c31\u6307\u7684\u662f \u5e8f\u5217\u7a7a\u95f4 \u7684\u4e00\u4e2a\u90e8\u5206<br \/>\n\u800c\u8fd9\u91cc\u7684\u56fe\u89e3\uff0c\u4ece\u6211\u7684\u7406\u89e3\u4e0a\uff0c\u8fd9\u4e9b <code>|<\/code> \u50cf\u662f\u5185\u5b58\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u5730\u5740\uff0c<br \/>\n\u800c SND.UNA \u8fd9\u6837\u7684\u7b26\u53f7\u5c31\u8868\u793a\u6307\u9488\uff0c\u662f\u6307\u5411\u8be5\u5904\u7684\u503c\uff0c\u5b83\u4eec\u6839\u636e\u5e8f\u5217\u5173\u7cfb\u5411\u540e\u4e0d\u65ad\u7d2f\u79ef<\/p>\n<p>\u800c \u63a5\u6536\u5e8f\u5217\u7a7a\u95f4\uff1a<\/p>\n<pre><code>                       1          2          3\n                   ----------|----------|----------\n                          RCV.NXT    RCV.NXT\n                                    +RCV.WND <\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>\u53e6\u5916\uff0c\u8fd8\u6709\u4e00\u4e9b\u5f53\u524d\u7247\u6bb5\u7684\u53c2\u6570\uff1a<br \/>\nVariable<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SEG.SEQ<\/td>\n<td>segment sequence number<\/td>\n<\/tr>\n<tr>\n<td>SEG.ACK<\/td>\n<td>segment acknowledgment number<\/td>\n<\/tr>\n<tr>\n<td>SEG.LEN<\/td>\n<td>segment length<\/td>\n<\/tr>\n<tr>\n<td>SEG.WND<\/td>\n<td>segment window<\/td>\n<\/tr>\n<tr>\n<td>SEG.UP<\/td>\n<td>segment urgent pointer<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u603b\u7ed3\u4e00\u4e0b\u5c31\u662f<\/strong>\uff1a<br \/>\nTCP\u534f\u8bae \u8fde\u63a5\u65f6 \u4f1a\u501f\u52a9 TCB(Transmission Control Block) \u6765\u50a8\u5b58\u4e00\u4e9b \u201c\u72b6\u6001\u201d\u3001\u201c\u7f13\u5b58\u201d\uff0c<br \/>\n\u8fd9\u4e2a TCB \u6839\u636e\u8bed\u5883\u63a8\u6d4b\u662f\u5728\u4e3b\u673a\u4e0a\u7f13\u5b58\uff0c\u800c\u4e0d\u662f\u5305\u542b\u5728\u4f20\u8f93\u6570\u636e\u5934\uff0c<br \/>\n\u800c\u53d1\u9001 TCP segment \u65f6\uff0cTCB \u5185\u4ee5\u4e00\u4e9b\u88ab\u5b9a\u4e49\u7684\u53d8\u91cf\u6765\u540c\u6b65\u4f20\u8f93\u72b6\u6001\uff0c\u8fd9\u4e9b\u53d8\u91cf\u5206\u4e3a\u4e09\u7c7b &#8220;SND&#8221; &#8220;RCV&#8221; &#8220;SEG&#8221;\uff0c\u5206\u5bf9\u5e94\u5176\u540d\u8bcd\u8868\u8fbe\u7684\u7528\u9014<br \/>\n\u800c TCB \u4e2d\u4f1a\u4e3a \u53d1\u9001\u3001\u63a5\u6536 \u5404\u81ea\u6307\u5b9a\u4e00\u5757 <code>sequence space<\/code> \uff0c \u6765\u4f7f\u7528\u8fd9\u4e9b\u53d8\u91cf<\/p>\n<h2>\u72b6\u6001\u673a<\/h2>\n<p>\u4e00\u4e2a\u8fde\u63a5\u7684\u751f\u547d\u5468\u671f\u4f1a\u7ecf\u8fc7\u82e5\u5e72\u72b6\u6001\uff0c\u5b83\u5305\u62ec\uff1a<\/p>\n<ul>\n<li>LISTEN: \u7b49\u5f85\u6765\u81ea\u4efb\u4f55 <code>\u8fdc\u7aef\u5bf9\u7b49TCP(remote TCP peer)<\/code> \u548c <code>\u7aef\u53e3(port)<\/code> \u7684 <code>\u8fde\u63a5\u8bf7\u6c42(connection request)<\/code><\/li>\n<li>SYN-SENT\uff1a\u5728\u53d1\u9001\u4e00\u4e2a\u8fde\u63a5\u8bf7\u6c42\u540e\uff0c\u7b49\u5f85\u4e00\u4e2a <code>\u5339\u914d\u8fde\u63a5\u8bf7\u6c42(matching connection request)<\/code><\/li>\n<li>SYN-RECEIVED\uff1a\u5728 \u53d1\u9001\u3001\u63a5\u53d7\u8fde\u63a5\u8bf7\u6c42\u540e\uff0c\u7b49\u5f85 <code>\u786e\u8ba4\u94fe\u63a5\u8bf7\u6c42(confirming connection request)<\/code> \u88ab <code>\u627f\u8ba4(acknowledgment)<\/code><\/li>\n<li>ESTABLISHED\uff1a\u8fde\u63a5\u6253\u5f00\uff0c\u88ab\u63a5\u6536\u7684\u6570\u636e\u53ef\u4ee5\u4ea4\u4ed8\u7ed9\u7528\u6237.\u662f\u6570\u636e\u4f20\u8f93\u9636\u6bb5\u7684\u5e38\u89c4\u72b6\u6001(normal state).<\/li>\n<li>FIN-WAIT-1\uff1a\u7b49\u5f85\u4e00\u4e2a\u8fdc\u7aef\u5bf9\u7b49TCP\u7684 <code>\u8fde\u63a5\u7ec8\u6b62\u8bf7\u6c42(connection termination request)<\/code> \uff1b\u6216\u8005\u662f\u4e00\u4e2a\u4e4b\u524d\u53d1\u9001\u7684<code>\u8fde\u63a5\u7ec8\u6b62\u8bf7\u6c42<\/code> \u7684 <code>\u786e\u8ba4\u5e8f\u53f7(acknowledgment)<\/code><\/li>\n<li>FIN-WAIT-1\uff1a\u4ec5\u7b49\u5f85\u4e00\u4e2a\u8fdc\u7aef\u5bf9\u7b49TCP\u7684 <code>\u8fde\u63a5\u7ec8\u6b62\u8bf7\u6c42<\/code><\/li>\n<li>CLOSE-WAIT\uff1a\u6536\u5230\u6765\u81ea <code>\u672c\u5730\u7528\u6237(local user)<\/code> \u7684 <code>\u8fde\u63a5\u7ec8\u6b62\u8bf7\u6c42<\/code><\/li>\n<li>CLOSING\uff1a\u7b49\u5f85\u8fdc\u7aef\u5bf9\u7b49TCP\u53d1\u9001 <code>\u8fde\u63a5\u7ec8\u6b62\u8bf7\u6c42<\/code> \u7684 <code>\u786e\u8ba4\u5e8f\u53f7<\/code><\/li>\n<li>LAST-ACK: \u7b49\u5f85\u6765\u81ea \u5148\u524d\u53d1\u5f80\u8fdc\u7aef\u5bf9\u7b49TCP\u7684\u8bf7\u6c42 \u7684 <code>\u786e\u8ba4\u5e8f\u53f7<\/code> \uff08\u53d1\u5f80\u8fdc\u7aef\u7684\u8bf7\u6c42\u4e2d\u5df2\u7ecf\u5305\u542b\u4e86\uff0c\u4ece\u8fdc\u7aef\u53d1\u5f80\u672c\u5730\u65f6\u643a\u5e26\u7684 \u786e\u8ba4\u5e8f\u53f7\uff09<\/li>\n<li>TIME-WAIT\uff1a\u7b49\u5f85\u8db3\u591f\u65f6\u95f4\u4ee5\u786e\u4fdd\u8fdc\u7aef\u5bf9\u7b49TCP\u80fd\u591f\u53d7\u5230\u53d1\u8fc7\u53bb\u7684 \u8fde\u63a5\u7ec8\u6b62\u8bf7\u6c42\u7684 \u786e\u8ba4\u7f16\u53f7\uff0c\u907f\u514d \u65b0\u8fde\u63a5 \u548c\u5148\u524d\u8fde\u63a5\u4e2d \u5ef6\u8fdf\u53d1\u9001\u7684 segments \u51b2\u7a81<\/li>\n<li>CLOSED\uff1a\u8868\u793a\u4e0d\u518d\u62e5\u6709\u4efb\u4f55\u8fde\u63a5\u72b6\u6001. \u5b83\u662f\u4e00\u79cd \u865a\u6784\u7684\u72b6\u6001(fictional)\uff0c\u610f\u5473\u7740 TCB \u4e2d\u4e0d\u518d\u62e5\u6709\u72b6\u6001\u53c2\u6570\uff0c\u56e0\u6b64\u4e5f\u4e0d\u518d\u62e5\u6709\u8fde\u63a5(connection).<\/li>\n<\/ul>\n<p>\u8fd9\u91cc\u7684\u6bcf\u4e2a\u72b6\u6001\uff0c\u5355\u72ec\u770b\u53ef\u80fd\u6bd4\u8f83\u62bd\u8c61\uff0c\u9700\u8981\u7ed3\u5408\u540e\u9762\u7684\u6587\u7ae0 <a href=\"#\u5efa\u7acb\u53ef\u9760\u7684\u8fde\u63a5\">\u5efa\u7acb\u53ef\u9760\u7684\u8fde\u63a5<\/a><\/p>\n<p><code>TCP\u8fde\u63a5\u7a0b\u5e8f(TCP connection progresses)<\/code> \u4ece\u4e00\u79cd\u72b6\u6001\u5207\u6362\u5230\u53e6\u4e00\u79cd\u72b6\u6001\uff0c\u79f0\u4e3a <code>\u54cd\u5e94\u4e8b\u4ef6(response to events)<\/code><br \/>\n\u8fd9\u4e9b \u54cd\u5e94\u4e8b\u4ef6 \u4e3b\u8981\u5206\u4e09\u7c7b\uff1a<\/p>\n<ul>\n<li>\u7528\u6237\u8c03\u7528\uff0c\u5305\u542b\uff1aOPEN, SEND, RECEIVE, CLOSE, ABORT\uff0c\u4ee5\u53ca STATUS.<\/li>\n<li>\u4f20\u5165\u7684 segments\uff0c\u7279\u522b\u662f\u90a3\u4e9b\u5305\u542b SYN, ACK, RST, FIN \u63a7\u5236\u4f4d\u7684<\/li>\n<li>\u8fd8\u6709\u8d85\u65f6\u7684\u54cd\u5e94(timeouts)<\/li>\n<\/ul>\n<p>OPEN \u8c03\u7528\u4f1a\u6839\u636e\u8fde\u63a5\u662f\u5426\u6210\u7acb\uff0c\u800c\u9009\u62e9 \u4e3b\u52a8\u6267\u884c\uff0c\u6216\u8005 \u88ab\u52a8\u7b49\u5f85<br \/>\n\u88ab\u52a8 OPEN \u8bf7\u6c42\uff0c\u610f\u5473\u7740\u7a0b\u5e8f\u5e0c\u671b\u63a5\u6536\u4e00\u4e2a\u6765\u81ea\u5916\u90e8\u7684\u8bf7\u6c42\uff1b\u800c\u4e3b\u52a8\u7684 OPEN \u5219\u662f\u5c1d\u8bd5\u521d\u59cb\u5316\u4e00\u4e2a\u8fde\u63a5.<\/p>\n<p>\u4e0b\u56fe\u7528\u4e00\u79cd\u7b80\u5355\u7684\u5f62\u5f0f\u63cf\u8ff0\u4e86\u57fa\u672c\u7684\u72b6\u6001\u53d8\u6362\uff0c\u6ce8\u610f\u5b83\u5e76\u6ca1\u6709\u5305\u542b\u5b8c\u6574\u7684\u89c4\u5219\uff0c\u6bd4\u5982\u5224\u5b9a\u9519\u8bef\u6761\u4ef6\u3001\u72b6\u6001\u8f6c\u6362\u65f6\u672a\u8fde\u63a5 \u7b49\u7b49.<br \/>\n\u540e\u9762\u7684\u7ae0\u8282\u4f1a\u4ecb\u7ecd\u66f4\u591a\u5bf9\u4e8e TCP\u5b9e\u73b0\u4e2d \u54cd\u5e94\u4e8b\u4ef6(events) \u7684\u53cd\u5e94\u7ec6\u8282.<br \/>\n\u53e6\u5916\uff0c\u8be5\u56fe\u4e2d\u4e00\u4e9b\u540d\u5b57\u7528\u4e86 \u7f29\u5199\u3001\u8fde\u5b57\u7b26\uff0c\u548c\u6587\u6863\u4e2d\u5176\u4ed6\u5730\u65b9\u6ca1\u6709\u4fdd\u6301\u4e00\u81f4.<br \/>\n\u8fd9\u4e9b\u90fd\u662f\u4e3a\u4e86\u7ed8\u56fe\u7684\u7f8e\u89c2.<\/p>\n<pre><code>                            +---------+ ---------      active OPEN\n                            |  CLOSED |                -----------\n                            +---------+&lt;---------      create TCB\n                              |     ^                   snd SYN\n                 passive OPEN |     |   CLOSE           \n                 ------------ |     | ----------          \n                  create TCB  |     | delete TCB            \n                              V     |                         \n          rcv RST (note 1)  +---------+            CLOSE    |    \n       --------------------&gt;|  LISTEN |          ---------- |     |\n      \/                     +---------+          delete TCB |     |\n     \/           rcv SYN      |     |     SEND              |     |\n    \/           -----------   |     |    -------            |     V\n+--------+      snd SYN,ACK  \/          snd SYN          +--------+\n|        |&lt;-----------------           ------------------&gt;|        |\n|  SYN   |                    rcv SYN                     |  SYN   |\n|  RCVD  |&lt;-----------------------------------------------|  SENT  |\n|        |                  snd SYN,ACK                   |        |\n|        |------------------           -------------------|        |\n+--------+   rcv ACK of SYN         \/  rcv SYN,ACK       +--------+\n   |         --------------   |     |   -----------\n   |                x         |     |     snd ACK\n   |                          V     V\n   |  CLOSE                 +---------+\n   | -------                |  ESTAB  |\n   | snd FIN                +---------+\n   |                 CLOSE    |     |    rcv FIN\n   V                -------   |     |    -------\n+---------+         snd FIN  \/          snd ACK         +---------+\n|  FIN    |&lt;----------------          ------------------&gt;|  CLOSE  |\n| WAIT-1  |------------------                            |   WAIT  |\n+---------+          rcv FIN                            +---------+\n  | rcv ACK of FIN   -------   |                          CLOSE  |\n  | --------------   snd ACK   |                         ------- |\n  V        x                   V                         snd FIN V\n+---------+               +---------+                    +---------+\n|FINWAIT-2|               | CLOSING |                    | LAST-ACK|\n+---------+               +---------+                    +---------+\n  |              rcv ACK of FIN |                 rcv ACK of FIN |\n  |  rcv FIN     -------------- |    Timeout=2MSL -------------- |\n  |  -------            x       V    ------------        x       V\n    snd ACK              +---------+delete TCB          +---------+\n     --------------------&gt;|TIME-WAIT|-------------------&gt;| CLOSED  |\n                          +---------+                    +---------+<\/code><\/pre>\n<p>\u56fe\u8868\u4e2d\u6709\u4e00\u4e9b \u5907\u6ce8(note)\uff1a<\/p>\n<ul>\n<li>\u5907\u6ce81\uff1a SYN-RECEIVED \u5230 LISTEN \u7684\u8fde\u7ebf\uff0c\u9700\u8981\u4e3b\u52a8 OPEN \u5e76\u5230\u8fbe SYN-RECEIVED \u540e\u624d\u80fd\u8fdb\u884c<\/li>\n<li>\u5907\u6ce82\uff1aFIN-WAIT-1 \u5230 TIME-WAIT \u7684\u8fde\u7ebf\uff0c\u5728 FIN \u88ab\u63a5\u6536\uff0c\u5e76\u4e14\u672c\u5730\u7684 FIN \u88ab\u786e\u8ba4\u65f6\uff0c\u7701\u7565\u8fde\u7ebf.<\/li>\n<li>RST \u53ef\u4ee5\u4ece\u4efb\u4f55\u72b6\u6001 \u901a\u8fc7\u76f8\u5e94\u8fde\u7ebf \u8fde\u5230 TIME-WAIT \u72b6\u6001 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#FTY99\">^REF1<\/a>. \u8fd9\u4e2a\u8be5\u8fde\u7ebf\u5e76\u4e0d\u51c6\u786e\uff0c\u5426\u5219\u8fd9\u4e2a\u56fe\u7684\u53ef\u8bfb\u6027\u4f1a\u53d8\u5f97\u5f88\u5dee\u3002\u540c\u6837\u7684\uff0cRST \u4e5f\u53ef\u4ee5\u5728\u4efb\u4f55\u8fde\u63a5\u5230 LISTEN \u6216\u8005 COLOSED \u7684\u72b6\u6001\u4e2d\u63a5\u6536\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4e86\u56fe\u89e3\u7684\u6613\u8bfb\u6027\u3002<\/li>\n<\/ul>\n<pre><code>\u4e0d\u96be\u770b\u51fa\uff0c\u5728\u8fde\u63a5\u65f6\uff0c\u8fd9\u4e9b\u72b6\u6001\u7684\u5207\u6362\u4e3b\u8981\u901a\u8fc7\u8868\u8fbe\u7279\u5b9a \u63a7\u5236\u4f4d\u6807\u8bb0 \u800c\u5b8c\u6210<\/code><\/pre>\n<h2>\u5e8f\u5217\u53f7 Sequence Numbers<\/h2>\n<p><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#name-sequence-numbers\">3.4. Sequence Numbers &#8211; RFC9293<\/a><\/p>\n<h3>\u57fa\u672c\u6982\u5ff5<\/h3>\n<p>\u5728TCP\u8fde\u63a5\u4e2d\uff0c\u53d1\u9001\u6570\u636e\u7684\u6bcf\u4e2a <code>\u516b\u4f4d\u5b57\u8282(octet)<\/code> \uff0c\u90fd\u62e5\u6709\u4e00\u4e2a <code>\u5e8f\u5217\u53f7(sequence number)<\/code> .<br \/>\n\u8fd9\u4f7f\u5f97\u6bcf\u4e2a \u516b\u4f4d\u5b57\u8282 \u90fd\u80fd\u88ab\u7f16\u6392\u987a\u5e8f\uff0c\u7531\u6b64\u8fdb\u884c <code>\u786e\u8ba4(acknowledged)<\/code>.<\/p>\n<p><code>\u786e\u8ba4\u673a\u5236(acknowledgment mechanism)<\/code> \u5728\u88ab\u4f7f\u7528\u65f6\u662f <code>\u7d2f\u79ef\u7684(cumulative)<\/code>\uff0c\u56e0\u6b64\uff0c<br \/>\n<code>sequence number X<\/code> \u7684 <code>\u786e\u8ba4\u5e8f\u53f7(acknowledgment)<\/code> \u6307\u4ee3\u7684\u662f\u6240\u6709 \u76f4\u5230 X \u4f46\u4e0d\u5305\u62ec X \u7684\u3001\u5df2\u7ecf\u63a5\u6536\u7684 <code>\u516b\u4f4d\u5b57\u8282<\/code><\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4\uff0c<code>\u5e8f\u5217\u53f7<\/code> \u4f1a\u4fdd\u8bc1\u6bcf\u4e2a <code>\u516b\u4f4d\u5b57\u8282<\/code> \u90fd\u6709\u4e00\u4e2a\u7528\u4e8e\u6d4b\u5e8f\u7684\u7f16\u53f7. \u7ed3\u5408\u524d\u6587 <code>TCP header<\/code> \u4e2d\u5bf9\u4e8e <code>\u5e8f\u5217\u53f7<\/code> \u7684\u63cf\u8ff0\uff0c<code>\u5e8f\u5217\u53f7<\/code> \u53ea\u4f1a\u8868\u793a <code>segment<\/code> \u4e2d\u5355\u4e2a <code>\u516b\u4f4d\u5b57\u8282<\/code> \u7684\u7f16\u53f7\uff0c\u800c\u5176\u4f59 <code>\u516b\u4f4d\u5b57\u8282<\/code> \u7684\u7f16\u53f7\u7531\u7279\u5b9a\u89c4\u5219\u8fdb\u884c\u63a8\u65ad.<br \/>\n\u5f53\u67d0\u4e2a <code>\u516b\u4f4d\u5b57\u8282<\/code> \u88ab\u53d1\u9001\u5230\u8fdc\u7aef\uff0c\u53cc\u65b9\u901a\u8fc7\u4e00\u7cfb\u5217\u72b6\u6001\u540c\u6b65\u673a\u5236\u4e86\u89e3\u5230\u8fd9\u4e2a <code>\u516b\u4f4d\u5b57\u8282<\/code> \u5df2\u7ecf\u88ab\u6b63\u786e\u53d1\u9001\uff0c\u90a3\u4e48\u79f0\uff0c\u8fd9\u4e2a <code>\u516b\u4f4d\u5b57\u8282<\/code> \u88ab <code>\u786e\u8ba4(acknowledged)<\/code>\uff0c\u800c\u50a8\u5b58\u5728 TCB \u5757\u4e2d\u7684\u8bc1\u660e\u88ab\u79f0\u4e3a <code>\u786e\u8ba4\u5e8f\u53f7(acknowledgment number)<\/code>\uff0c\u5e76\u4e14\u5728\u6587\u6863\u4e2d\u7ecf\u5e38\u88ab\u7b80\u79f0\u4e3a <code>\u786e\u8ba4\u5e8f\u53f7(acknowledgment)<\/code><br \/>\n\u5229\u7528\u8fd9\u79cd\u673a\u5236\uff0c\u53ef\u4ee5\u7b80\u5355\u5730\u5bf9 <code>\u91cd\u4f20(retransmission)<\/code> \u65f6\u8fdb\u884c <code>\u91cd\u590d\u68c0\u67e5(duplicate detection)<\/code>.<\/p>\n<p>\u5728 segment \u4e2d\uff0c<code>\u516b\u4f4d\u5b57\u8282<\/code> \u7684\u7f16\u53f7\u65b9\u5f0f\u5982\u4e0b\uff1a<\/p>\n<ul>\n<li>\u7d27\u8ddf\u5728 TCP header \u540e\u7684\u6570\u636e\u5757\u4e2d\u7684\u7b2c\u4e00\u4e2a \u516b\u4f4d\u5b57\u8282\uff0c\u4f7f\u7528\u6700\u5c0f\u7f16\u53f7<\/li>\n<li>\u5728\u90a3\u4e4b\u540e\u7684\u516b\u4f4d\u5b57\u8282\uff0c\u57fa\u4e8e\u7b2c\u4e00\u4e2a\u7f16\u53f7\uff0c\u4f7f\u7528\u8fde\u7eed\u7f16\u53f7<\/li>\n<\/ul>\n<p>\u5e8f\u5217\u53f7 \u7684\u53d6\u503c\u8303\u56f4\u5728 0 ~ $2^{32}$ &#8211; 1\uff0c\u8fd9\u662f\u4e00i\u4e2a\u975e\u5e38\u5927\u7684\u8303\u56f4\uff0c\u4f46\u5b83\u4ecd\u7136\u662f\u6709\u9650\u7684.<br \/>\n\u56e0\u6b64\uff0c\u6240\u6709\u7b97\u6cd5\u5728\u5904\u7406 \u5e8f\u5217\u53f7 \u65f6\uff0c\u5fc5\u987b\u53d6 $2^{32}$ \u7684\u6a21(\u4f7f\u5176\u5728\u53d6\u503c\u8303\u56f4\u5185\u5faa\u73af,\u907f\u514d\u6ea2\u51fa), \u800c\u8ba1\u7b97\u673a\u53d6\u6a21\u65f6\u6709\u4e00\u4e9b\u5fae\u5999\u7684\u5730\u65b9\uff0c\u8bf7\u52a1\u5fc5\u5c0f\u5fc3.<\/p>\n<h3>\u7c7b\u6bd4<\/h3>\n<p>\u5728 <code>TCP\u5b9e\u73b0(TCP implementation)<\/code> \u4e2d\uff0c\u5fc5\u987b\u7684\u3001\u5178\u578b\u7684 <code>\u5e8f\u5217\u53f7<\/code> \u7684\u7c7b\u6bd4\u6709\uff1a<\/p>\n<ul>\n<li><code>\u786e\u8ba4(acknowledgment)<\/code>\uff0c\u6307\u4e00\u4e9b \u5df2\u7ecf\u53d1\u9001\u4f46\u5c1a\u672a <code>\u88ab\u786e\u8ba4(acknowledged)<\/code> \u7684 <code>\u5e8f\u5217\u53f7<\/code><\/li>\n<li><code>segment<\/code> \u5360\u7528\u7684\u6240\u6709\u5e8f\u5217\u53f7\u662f <code>\u5df2\u786e\u8ba4\u7684(acknowledged)<\/code><\/li>\n<li>\u4e00\u4e2a <code>\u4f20\u5165(incoming)<\/code> \u7684 segment \u5305\u542b\u7684\u5e8f\u5217\u53f7\uff0c\u79f0\u4e3a <code>\u9664\u5916\u7684(expected)<\/code><\/li>\n<\/ul>\n<pre><code>\u6587\u6863\u4f1a\u7528\u8fd9\u4e9b\u8bf4\u6cd5\uff0c\u6765\u63cf\u8ff0\u529f\u80fd  \n\u5e76\u4e14\u8981\u6c42\u6240\u6709 TCP \u5b9e\u73b0\u90fd\u9075\u4ece\u8fd9\u5957\u7c7b\u6bd4\u65b9\u5f0f  \n\n\u5927\u6982\u7684\u7528\u6cd5\u662f\uff1a\nlocal --&gt; remote  | \u53d1\u9001 \u786e\u8ba4\u5e8f\u53f7(acknowledgment)\nlocal &lt;-- remote  | \u5e8f\u5217\u53f7\u5df2\u7ecf\u786e\u8ba4(acknowledged)\n                  | \u5df2\u786e\u8ba4\u7684\u5e8f\u5217\u53f7\u88ab\u6392\u9664(expected)<\/code><\/pre>\n<p>\u4f5c\u4e3a\u5bf9\u53d1\u9001\u6570\u636e\u7684\u54cd\u5e94\uff0cTCP endpoint \u4f1a\u63a5\u6536 <code>\u6240\u6709\u786e\u8ba4\u5e8f\u53f7(acknowledgments)<\/code>\uff0c\u5904\u7406\u8be5\u8fc7\u7a0b\u65f6\u9700\u8981\u4e86\u89e3\u4ee5\u4e0b\u7c7b\u6bd4\uff1a<\/p>\n<h4>\u53d1\u9001\u65f6<\/h4>\n<ul>\n<li>SND.UNA = oldest unacknowledged sequence number<\/li>\n<li>SND.NXT = next sequence number to be sent<\/li>\n<li>SEG.ACK = acknowledgment from the receiving TCP peer (next sequence number expected by the &#8211; receiving TCP peer)<\/li>\n<li>SEG.SEQ = first sequence number of a segment<\/li>\n<li>SEG.LEN = the number of octets occupied by the data in the segment (counting SYN and FIN)<\/li>\n<li>SEG.SEQ + SEG.LEN &#8211; 1 = last sequence number of a segment<\/li>\n<\/ul>\n<p>\u4e00\u4e2a\u65b0\u7684 acknowledgement (\u79f0\u4e3a &#8220;acceptable ack&#8221; ) \u4f7f\u5f97\u4ee5\u4e0b\u4e0d\u7b49\u5f0f\u6210\u7acb\uff1a<br \/>\nSND.UNA &lt; SEG.ACK &lt; SND.NXT<\/p>\n<pre><code>\u672a\u786e\u8ba4\u5e8f\u5217\u53f7 &lt; \u63a5\u6536\u4e2d\u7684\u786e\u8ba4\u5e8f\u53f7 &lt; \u4e0b\u4e00\u4e2a\u5373\u5c06\u53d1\u9001\u7684\u5e8f\u5217\u53f7  <\/code><\/pre>\n<p>\u5bf9\u4e8e\u4e00\u4e2a segment \u7684 <code>\u91cd\u4f20\u5e8f\u5217(retransmission queue)<\/code>\uff0c\u5982\u679c\u5b83\u7684 \u5e8f\u5217\u53f7 \u548c \u957f\u5ea6 \u7684\u548c\uff0c\u5c0f\u4e8e\u7b49\u4e8e \u4f20\u5165 segment \u4e2d \u786e\u8ba4\u5e8f\u53f7 \u7684\u503c\uff0c<br \/>\n\u5219\u79f0\u5b83\u88ab <code>\u5b8c\u5168\u786e\u8ba4(fully acknowledged)<\/code><\/p>\n<pre><code>\u6839\u636e\u5b9a\u4e49\uff0csegment \u6700\u540e\u4e00\u4e2a\u5e8f\u5217\u53f7\u7684\u503c\uff0c\u662f \u9996\u4f4d\u5e8f\u5217\u53f7 + \u516b\u4f4d\u5b57\u8282\u957f\u5ea6 - 1  \n\u8fd9\u53e5\u8bdd\u6362\u4e2a\u610f\u601d\u5c31\u662f\uff1a\u82e5\u4f20\u5165\u7684 \u786e\u8ba4\u5e8f\u53f7 \u8d85\u51fa\u4e86 \u5e8f\u5217\u53f7\u7684\u8986\u76d6\u8303\u56f4\uff0c\u5219\u610f\u5473\u7740\u8be5 segment \u7684\u5e8f\u5217\u88ab\u5b8c\u5168\u786e\u8ba4<\/code><\/pre>\n<h4>\u63a5\u6536\u65f6<\/h4>\n<ul>\n<li>RCV.NXT = next sequence number expected on an incoming segment, and is the left or lower edge of the receive window<\/li>\n<li>RCV.NXT + RCV.WND &#8211; 1 = last sequence number expected on an incoming segment, and is the right or upper edge of the receive window<\/li>\n<li>SEG.SEQ = first sequence number occupied by the incoming segment<\/li>\n<li>SEG.SEQ + SEG.LEN &#8211; 1 = last sequence number occupied by the incoming segment<\/li>\n<\/ul>\n<p>\u5982\u679c\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\u4e4b\u4e00\uff0c\u5219\u5224\u5b9a\u8be5 segment \u5360\u7528\u4e86\uff08TCB \u5185\u5b58\u4e2d\uff09\u53ef\u7528\u7684 <code>\u63a5\u6536\u5e8f\u5217\u7a7a\u95f4(receive sequence space)<\/code>\uff1a<\/p>\n<ul>\n<li>RCV.NXT =&lt; SEG.SEQ &lt; RCV.NXT + RCV.WND<\/li>\n<li>RCV.NXT =&lt; SEG.SEQ + SEG.LEN &#8211; 1 &lt; RCV.NXT + RCV.WND<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>\u7b2c\u4e00\u90e8\u5206\u8868\u793a\uff0c\u6d4b\u8bd5segment\u7684\u5f00\u5934\u662f\u5426\u4f4d\u4e8e window \u8986\u76d6\u7684\u533a\u95f4\u5185\uff0c\u800c\u7b2c\u4e8c\u90e8\u5206\u8868\u793a\u6d4b\u8bd5\u5c3e\u90e8<br \/>\n\u5982\u679c\u9996\u4f4d\u5747\u88ab window \u8986\u76d6\u7684\u533a\u95f4\u5305\u542b\uff0c\u5219\u8be5\u6570\u636e\u4f4d\u4e8e window \u533a\u95f4\u5185<br \/>\n\u4e0d\u8fc7\u5b9e\u9645\u60c5\u51b5\u6bd4\u8fd9\u8981\u590d\u6742\uff0c\u56e0\u4e3a\u5b58\u5728 window \u6216\u8005 segment \u7684 \u957f\u5ea6(\u4e0d\u8981\u5fd8\u4e86\u8fd9\u4e2a\u6307\u7684\u662f\u6570\u636e\u90e8\u5206\u7684\u516b\u4f4d\u5b57\u8282\u6570) \u4e3a 0 \u7684\u60c5\u51b5\uff0c\u5bf9\u4e8e\u4f20\u5165 segment \u53ef\u4ee5\u63a5\u53d7\u4ee5\u4e0b\u56db\u79cd\u60c5\u51b5\uff1a<br \/>\nSegment Length<\/th>\n<th>Receive Window<\/th>\n<th>Test<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>0<\/td>\n<td>0<\/td>\n<td>SEG.SEQ = RCV.NXT<\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td>&gt;0<\/td>\n<td>RCV.NXT =&lt; SEG.SEQ &lt; RCV.NXT+RCV.WND<\/td>\n<\/tr>\n<tr>\n<td>&gt;0<\/td>\n<td>0<\/td>\n<td>not acceptable<\/td>\n<\/tr>\n<tr>\n<td>&gt;0<\/td>\n<td>&gt;0<\/td>\n<td>RCV.NXT =&lt; SEG.SEQ &lt; RCV.NXT + RCV.WND<br \/>\n\u6216\u8005<br \/>\nRCV.NXT =&lt; SEG.SEQ+SEG.LEN-1 &lt; RCV.NXT + RCV.WND<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#name-segment-acceptability-tests\">Table 5: Segment Acceptability Tests<\/a><\/p>\n<p>\u6ce8\u610f\uff0c\u5f53\u63a5\u6536\u5230\u7684 window \u503c\u4e3a 0 \u65f6\uff0c\u4e0d\u5e94\u8be5\u63a5\u53d7\u9664 ACK segments \u4ee5\u5916\u7684\u4efb\u4f55 segments.<br \/>\n\u56e0\u6b64\uff0c\u4e00\u4e2aTCP\u5b9e\u73b0\u53ef\u80fd\u4f1a\u5728 \u4f20\u8f93\u6570\u636e\u3001\u63a5\u6536 ACKs \u65f6\uff0c\u7ef4\u6301\u4e00\u4e2a window = 0 \u63a5\u6536\u5e8f\u5217\u7a7a\u95f4. \uff08\u8fd9\u6837\u5c31\u4e0d\u4f1a\u63a5\u6536\u5230\u5176\u4ed6 segment\uff09<br \/>\n\u4e00\u4e2a TCP \u63a5\u6536\u8005\uff0c\u5fc5\u987b\u5904\u7406\u6240\u6709\u4f20\u5165 segments \u4e2d\u7684 RST \u548c URS \u5b57\u6bb5\uff0c\u5373\u4f7f window = 0.<\/p>\n<p>\u6211\u4eec\u4e5f\u7528\u7f16\u53f7\u65b9\u6848\u6765\u4fdd\u62a4\u67d0\u4e9b \u63a7\u5236\u4fe1\u606f(control information).<br \/>\n\u8fd9\u662f\u5728 <code>\u5e8f\u5217\u7a7a\u95f4<\/code> \u9690\u5f0f\u5305\u542b\u4e00\u4e9b \u63a7\u5236\u4f4d \u6765\u5b9e\u73b0\u7684\uff0c\u8fd9\u4f7f\u5f97\u5b83\u4eec\u5728 \u91cd\u4f20\u3001\u786e\u8ba4 \u65f6\u4e0d\u4f1a\u88ab\u6df7\u6dc6. \uff08\u6bd4\u5982\uff0c\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u63a7\u5236\u526f\u672c\u4f1a\u88ab\u6267\u884c\uff09.<br \/>\n\u63a7\u5236\u4fe1\u606f \u5e76\u6ca1\u6709\u7269\u7406\u5305\u542b\u5728 <code>\u6bb5\u7684\u6570\u636e\u7a7a\u95f4(segment data space)<\/code>.<br \/>\n\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u91c7\u7eb3\u4e00\u79cd\u89c4\u5219\uff0c\u5c06 sequence number \u9690\u5f0f\u5206\u914d\u4e3a <code>\u63a7\u5236\u4f4d(control)<\/code> .<br \/>\n\u800c SYN \u548c FIN \u662f\u552f\u4e8c\u9700\u8981\u8fd9\u79cd\u4fdd\u62a4\u673a\u5236\u7684 \u63a7\u5236\u4f4d(controls), \u5e76\u4e14\u8fd9\u4e9b \u63a7\u5236\u4f4d \u4ec5\u5728\u8fde\u63a5\u5f00\u542f\u3001\u5173\u95ed\u65f6\u88ab\u4f7f\u7528.<br \/>\n\u51fa\u4e8e\u5e8f\u5217\u53f7\u7684\u76ee\u7684\uff0cSYN \u88ab\u8ba4\u4e3a\u51fa\u73b0\u5728\u5b83 \u5b9e\u9645\u6570\u636e\u7684 \u7b2c\u4e00\u4e2a\u516b\u4f4d\u5b57\u8282 \u4e4b\u524d\uff0c\u800c FIN \u88ab\u8ba4\u4e3a\u51fa\u73b0\u5728\u5b83\u5b9e\u9645\u6570\u636e\u7684 \u6700\u540e\u4e00\u4e2a\u516b\u4f4d\u5b57\u8282 \u4e4b\u540e.<br \/>\n\u800c <code>segment length (SEG.LEN)<\/code> \u5305\u62ec\u4e86 \u6570\u636e \u548c \u5e8f\u5217\u7a7a\u95f4\u5360\u7528\u63a7\u5236\u4f4d.<br \/>\n\u5f53 SYN \u88ab\u8868\u8fbe\u65f6\uff0c SEG.SEQ \u662f SYN \u7684\u5e8f\u5217\u53f7.<\/p>\n<pre><code>\u6309\u6211\u7684\u7406\u89e3\uff0c\n\u5b83\u5229\u7528\u7f16\u53f7\u65b9\u6848\u6765\u5c06 control bit \u4e2d\u7684\u90e8\u5206\u63a7\u5236\u4f4d \u9690\u5f0f\u5206\u914d\u4e00\u4e2a\u5e8f\u5217\u53f7\uff0c\u52a0\u4ee5\u4fdd\u62a4\uff0c  \n\u800c\u4f7f\u7528\u8fd9\u79cd\u673a\u5236\u7684\u53ea\u6709 SYN \u548c FIN\uff0c\u5e76\u4e14\u4ec5\u5728\u5f00\u542f\u3001\u5173\u95ed\u8fde\u63a5\u65f6  \nSYN \u7684\u5e8f\u5217\u53f7\u4ece\u4f4d\u7f6e\u770b\uff0c\u662f\u5728\u6570\u636e\u7684 \u7b2c\u4e00\u4e2a\u516b\u4f4d\u5b57\u8282 \u4e4b\u524d  \n\n\u6362\u53e5\u8bdd\u8bf4\uff0c\u5728 sequence number \u4e2d\u7684\u4ecb\u7ecd\u4e2d\uff0c\u6709\u63d0\u5230\u5982\u679c SYN \u88ab\u8868\u8fbe\u65f6\uff0c\u5e8f\u5217\u53f7\u7684\u503c\u4f4d ISN\uff0c\u800c\u7b2c\u4e00\u4e2a\u6570\u636e\u5b57\u8282\u4e3a ISN + 1  \n\u8fd9\u610f\u601d\u5c31\u662f\uff0cISN \u6307\u7684\u662f\u63a7\u5236\u4f4d\u7684\u5e8f\u5217\u53f7\uff0c\u56e0\u4e3a\u7b2c\u4e00\u4e2a\u6570\u636e\u5b57\u8282\u524d\u9762\u8fd8\u6709\u4e2a\u9690\u5f0f\u5b58\u5728\u7684\u4e1c\u897f\uff0c\u5b83\u5e76\u4e0d\u662f\u6570\u636e\u5b57\u8282\uff0c\u800c\u662f\u8fd9\u4e2a\u63a7\u5236\u4f4d SYN   <\/code><\/pre>\n<h3>\u521d\u59cb\u5316\u5e8f\u5217\u53f7\u9009\u62e9<\/h3>\n<p>\u4e00\u4e2a TCP \u8fde\u63a5 \u88ab\u5b9a\u4e49\u4e3a\u4e00\u5bf9 <code>sockets<\/code> <sup id=\"fnref1:REF2\"><a class=\"footnote-ref\" href=\"#fn:REF2\">1<\/a><\/sup>. \u8fde\u63a5\u662f\u53ef\u4ee5\u88ab\u62d2\u7edd\u7684.<\/p>\n<p>\u65b0\u7684\u8fde\u63a5\u5b9e\u4f8b\u4f1a\u88ab\u5b9a\u4e49\u4e3a\u8be5\u8fde\u63a5\u7684 <code>\u5b9e\u4f53(incarnations)<\/code>.<br \/>\n\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff08\u7279\u522b\u662f\u8fde\u63a5\u6210\u529f\u5730\u5feb\u901f \u5f00\u542f\u3001\u5173\u95ed \u65f6\uff0c\u6216\u8005\u8fde\u63a5\u5728\u4e22\u5931\u5185\u5b58\u7684\u524d\u63d0\u4e0b\u4e2d\u65ad\u3001\u7136\u540e\u91cd\u65b0\u8fde\u63a5\uff09\u4f1a\u5f15\u53d1\u4e00\u4e2a\u95ee\u9898\uff1aTCP \u5982\u4f55\u4ece\u5148\u524d\u7684 \u8fde\u63a5\u5b9e\u4f53 \u4e2d\u533a\u5206\u51fa\u90a3\u4e9b\u91cd\u590d\u7684 segments \uff1f<br \/>\n\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c TIME-WAIT \u72b6\u6001\u4f1a\u9650\u5236\u8fde\u63a5\u7684\u91cd\u7528\u7684\u6bd4\u4f8b\uff08\u4ece\u5b8f\u89c2\u4e0a\u964d\u4f4e\u8be5\u95ee\u9898\u53d1\u751f\u7684\u6982\u7387\uff09<br \/>\n\u800c\u4e0b\u9762\u63cf\u8ff0\u7684\u5173\u4e8e <code>\u521d\u59cb\u5316\u5e8f\u5217\u53f7 ISN(initial sequence number)<\/code> \u7684\u9009\u62e9\uff0c\u8fdb\u4e00\u6b65\u5bf9 \u4f20\u5165\u6570\u636e\u5305\u5e94\u8be5\u9009\u62e9\u7684\u8fde\u63a5\u5b9e\u4f53 \u8fdb\u884c\u4e86\u6d88\u6b67.<\/p>\n<p>\u4e3a\u4e86\u907f\u514d(\u5b9e\u4f53)\u6df7\u6dc6\uff0c\u6211\u4eec\u5fc5\u987b\u9632\u6b62\u65b0\u5b9e\u4f53\u8fde\u63a5\u4f7f\u7528\u65f6\uff0c\u76f8\u540c\u7684\u5e8f\u5217\u53f7\u4ecd\u7136\u5728\u65e9\u5148\u7684\u5b9e\u4f53\u4e2d\u8868\u8fbe.<br \/>\n\u6211\u4eec\u5e0c\u671b\u5bf9\u4e8b\u4ef6\u8fdb\u884c\u786e\u8ba4\uff0c\u54ea\u6015 <code>TCP endpoint<\/code> \u4e22\u5931\u4e86\u6240\u6709\u6b63\u5728\u4f7f\u7528\u7684\u5df2\u77e5\u5e8f\u5217\u53f7.<br \/>\n\u5f53\u65b0\u7684\u8fde\u63a5\u88ab\u521b\u5efa\u65f6\uff0c ISN\u751f\u6210\u5668 \u4f1a\u88ab\u59d4\u6d3e\u9009\u62e9\u4e00\u4e2a\u65b0\u7684 32\u4f4d\u521d\u59cb\u5316\u5e8f\u5217\u53f7.<br \/>\n\u6b64\u65f6\u5b58\u5728\u4e00\u4e2a\u5b89\u5168\u95ee\u9898\uff0c\u5982\u679c \u521d\u59cb\u5316\u5e8f\u5217\u53f7 \u7684\u503c\u53ef\u4ee5\u88ab\u9884\u6d4b\u3001\u731c\u6d4b\uff0c\u5219\u53ef\u80fd\u906d\u5230\u975e\u5e38\u89c4\u8def\u5f84\u7684\u653b\u51fb<\/p>\n<p>TCP\u4e2d\u7684\u521d\u59cb\u5316\u5e8f\u5217\u53f7\uff0c\u7531\u4e00\u79cd\u5927\u81f4\u88ab\u79f0\u4e3a \u201cclock\u201d \u7684\u7ec4\u4ef6\u751f\u6210\uff0c\u5b83\u4f1a\u8ba9\u6570\u5b57\u5355\u8c03\u9012\u589e\u76f4\u5230\u5faa\u73af\uff0c\u4ee5\u6b64\u751f\u6210\u521d\u59cb\u5316\u5e8f\u5217\u53f7.<br \/>\nclock \u662f\u4e00\u4e2a 32\u4f4d\u7684\u8ba1\u6570\u5668\uff0c\u7ea6 4\u5fae\u79d2(microseconds) \u589e\u52a0\u4e00\u6b21\uff0c\u5b83\u4e0d\u662f\u771f\u5b9e\u65f6\u95f4\u3001\u5e76\u4e14\u91cd\u542f(reboots)\u540e\u4e0d\u4f1a\u6301\u7eed\u5b58\u5728.\uff08\u7406\u8bba\u8ba1\u7b97\u51fa\u7684\u4e0a\u9650\u503c\u662f $4 <em> 2^{32}<\/em>10^{-6}$ \u7ea6\u7b49\u4e8e 4~5\u5c0f\u65f6\uff09<br \/>\nclock \u7ec4\u4ef6 \u7684\u5faa\u73af\u5468\u671f\u5927\u6982\u5728 4.55 \u5c0f\u65f6\uff0c\u8fdc\u5927\u4e8e <code>MSL(Maximum segment Lifetime)<\/code>\uff0c\u800c clock \u7ec4\u4ef6\u65e8\u5728\u786e\u4fdd\u5728\u5355\u4e2a\u5faa\u73af\u5468\u671f\u5185\uff0c\u6bcf\u4e2aISN\u5728\u81ea\u8eabMSL\u5185\u90fd\u662f\u72ec\u4e00\u65e0\u4e8c\u7684.<br \/>\n\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u73b0\u4ee3\u7f51\u7edc\u652f\u6301\u8f83\u9ad8\u7684\u6570\u636e\u4f20\u8f93\u901f\u7387\uff0c\u8fd9\u4f7f\u5f97 \u5e8f\u5217\u53f7\u53ef\u80fd\u9012\u589e\u975e\u5e38\u9891\u7e41\uff0c\u4f7f\u5f97\u8fd9\u4e9b\u5e8f\u5217\u53f7\u5404\u81ea\u7684 MSL \u5b58\u5728\u91cd\u53e0. \u5982\u679c\u9700\u8981\u5b9e\u73b0\u65f6\u95f4\u6233\uff0c\u8bf7\u53c2\u8003 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#tcp_quiet_time_concept\">Section 3.4.3.<\/a><\/p>\n<p>\u4e00\u4e2a TCP \u5b9e\u73b0\uff0c<strong>\u5fc5\u987b<\/strong>\u4f7f\u7528\u4e0a\u8ff0\u7684 clock \u7ec4\u4ef6\u6765\u9009\u62e9 ISN.<br \/>\n\u5e76\u4e14\uff0c\u5e94\u8be5\u4f7f\u7528\u8be5\u516c\u5f0f\u8fdb\u884c\u8868\u8fbe\uff1a<br \/>\n$$<br \/>\nISN = M + F (localip, localport, remoteip, remoteport, secretkey)<br \/>\n$$<br \/>\n\u5176\u4e2d\uff0cM\u8868\u793a 4\u5fae\u79d2 \u8ba1\u65f6\u5668\uff0c F() \u662f\u4e00\u4e2a\u548c \u8bc6\u522b\u53c2\u6570(localip, localport, remoteip, remoteport) \u4ee5\u53ca \u52a0\u5bc6\u5173\u952e\u5b57(secretkey) \u76f8\u5173\u7684 \u4f2a\u968f\u673a\u51fd\u6570(pseudorandom function PRF)<br \/>\nF() \u4e0d\u5141\u8bb8\u80fd\u88ab\u5916\u90e8\u8ba1\u7b97\uff0c\u5426\u5219\u653b\u51fb\u8005\u53ef\u4ee5\u7531 ISN \u731c\u6d4b\u5e8f\u5217\u53f7\u5e76\u7528\u4e8e\u5176\u4ed6\u8fde\u63a5\uff0c<br \/>\nPRF \u53ef\u80fd\u88ab\u5b9e\u73b0\u4f5c\u4e3a TCP\u8fde\u63a5\u53c2\u6570 \u4ee5\u53ca\u4e00\u4e9b\u52a0\u5bc6\u6570\u636e \u76f8\u5173\u7684 hash \u52a0\u5bc6\uff0c<br \/>\n\u6709\u5173\u7279\u5b9ahash\u7b97\u6cd5\u7684\u9009\u62e9\u4ee5\u53ca \u5bc6\u94a5\u6570\u636e\u7684\u7ba1\u7406\uff0c\u53c2\u8003 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6528#section-3\">Section 3<\/a><\/p>\n<p>\u6bcf\u4e2a\u8fde\u63a5\u90fd\u4f1a\u6536\u53d1\u5e8f\u5217\u53f7. \u521d\u59cb\u5316\u53d1\u9001\u5e8f\u5217\u53f7(initial send sequence number, ISS) \u7528\u4e8e\u5411\u5bf9\u7b49TCP\u8fdb\u884c\u53d1\u9001\uff1b\u800c\u521d\u59cb\u5316\u63a5\u6536\u5e8f\u5217\u53f7(initial receive sequence number, IRS) \u5219\u662f\u5728 <code>connection-establishing(\u8fde\u63a5\u5efa\u7acb)<\/code> \u65f6\u8fdb\u884c\u5b66\u4e60.<\/p>\n<p>\u4e00\u4e2a\u8fde\u63a5 \u5efa\u7acb\u3001\u521d\u59cb\u5316 \u65f6\uff0c\u4e24\u4e2a\u5bf9\u7b49 TCP \u5fc5\u987b\u540c\u6b65\u5f7c\u6b64\u7684 ISN.<br \/>\n\u8fd9\u901a\u8fc7\u5728\u8fdb\u884c <code>connection-establishing(\u8fde\u63a5\u5efa\u7acb)<\/code> \u65f6\uff0c\u5728\u4ea4\u6362\u7684 segment \u4e2d\u643a\u5e26 SYN \u63a7\u5236\u4f4d\u3001ISN \u6765\u5b8c\u6210. \u8fd9\u4e9b segment \u643a\u5e26\u7684\u6240\u6709 SYN \u5728\u6587\u6863\u4e2d\u4e5f\u7b80\u79f0\u4e3a SYNs.<br \/>\n\u800c\u8be5\u89e3\u51b3\u65b9\u6848\u9700\u8981\u4e00\u79cd\u5408\u9002\u7684\u673a\u5236\u6765\u6311\u9009 ISN\uff0c\u8fd9\u91cc\u9700\u8981\u7a0d\u5fae\u6d89\u53ca\u5230 \u63e1\u624b(handshake) \u7684\u6982\u5ff5\u6765\u8fdb\u884c ISN \u7684\u4ea4\u6362.<br \/>\n\u56fe\u89e3\uff1a<\/p>\n<pre><code>    1) A --&gt; B  SYN A:\u6211\u7684\u5e8f\u5217\u53f7\u662f X\n    2) A &lt;-- B  ACK B:\u4f60\u7684\u5e8f\u5217\u53f7\u662f X\n    3) A &lt;-- B  SYN B:\u6211\u7684\u5e8f\u5217\u53f7\u662f Y\n    4) A --&gt; B  ACK A:\u4f60\u7684\u5e8f\u5217\u53f7\u662f Y<\/code><\/pre>\n<p>\u7531\u4e8e 2\u30013 \u6b65\u53ef\u4ee5\u5408\u5e76\uff0c<\/p>\n<pre><code>    1) A --&gt; B  SYN A:\u6211\u7684\u5e8f\u5217\u53f7\u662f X\n    2) A &lt;-- B  ACK B:\u4f60\u7684\u5e8f\u5217\u53f7\u662f X, \u800c\u6211\u7684\u5e8f\u5217\u53f7\u662f Y\n    3) A --&gt; B  ACK A:\u4f60\u7684\u5e8f\u5217\u53f7\u662f Y<\/code><\/pre>\n<p>\u56e0\u6b64\u4e5f\u79f0\u4e3a <code>\u4e09\u8def\u63e1\u624b\uff0cthree-way (or three message) handshake (3WHS).<\/code><\/p>\n<p>\u7531\u4e8e\u5e8f\u5217\u53f7\u5e76\u975e\u662f\u7531\u7f51\u7edc\u4e2d\u5168\u5c40\u7684 clock \u7ec4\u4ef6\u7ed1\u5b9a\uff0c\u4e00\u4e2a TCP\u5b9e\u73b0\u53ef\u80fd\u7528\u4e0d\u540c\u7684\u673a\u5236\u53bb\u83b7\u53d6ISN\uff0c\u56e0\u6b64\u4e00\u4e2a\u57fa\u4e8e\u4e09\u8def\u63e1\u624b\u7684\u5e8f\u5217\u53f7\u4ea4\u6362\u662f\u5fc5\u8981\u7684\uff08\u800c\u4e0d\u662f\u81ea\u5df1\u5404\u7b97\u5404\uff0c\u7136\u540e\u8ba4\u4e3a\u7b97\u51fa\u6765\u7684\u662f\u5bf9\u65b9\u6301\u6709\u7684\u503c\uff09<br \/>\n\u63a5\u6536\u8005\u4ec5\u9760\u6536\u5230\u7684\u7b2c\u4e00\u4e2a SYN \u65e0\u6cd5\u5206\u8fa8\u8be5 segment \u662f\u5426\u8fc7\u65f6\uff0c\u9664\u975e\u4e0a\u4e00\u4e2a\u5e8f\u5217\u53f7\u5728\u8fde\u63a5\u4f7f\u7528\u65f6\u88ab\u8bb0\u5fc6\uff08\u8fd9\u662f\u5c11\u6570\u60c5\u51b5\uff09\uff0c\u56e0\u6b64\u5b83\u5fc5\u987b\u8be2\u95ee\u53d1\u9001\u8005\u6765\u9a8c\u8bc1\u8fd9\u4e2a SYN. \uff08\u8fd9\u6837\u4fbf\u662f\u4e00\u6b21\u201c\u63e1\u624b\u201d\u884c\u4e3a\uff09<br \/>\n\u4e09\u8def\u63e1\u624b \u4ee5\u53ca \u5728ISN\u9009\u62e9\u65f6\u4ee5clock\u8fdb\u884c\u9a71\u52a8\u7684\u65b9\u6848\uff0c\u53ef\u4ee5\u53c2\u8003\uff1a<a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#DS78\">\u9644\u5f55\uff1a69<\/a><\/p>\n<pre><code>\u9636\u6bb5\u603b\u7ed3\u4e00\u4e0b\uff0c\u6bcf\u4e2a segment \u7684 header \u9700\u8981\u6307\u5b9a \u5e8f\u5217\u53f7\uff0c\u4ee5\u8868\u793a \u6570\u636e\u90e8\u5206\u516b\u4f4d\u5b57\u8282\u7684\u5e8f\u5217\u7684\u5f00\u59cb  \n\n\u5e8f\u5217\u53f7\u5728\u751f\u6210\u65f6\uff0c\u5229\u7528 clock \u7ec4\u4ef6\u7684\u673a\u5236\uff0c\u4f7f\u5f97\u6bcf\u4e2a segment \u7528\u5230\u7684 \u5e8f\u5217\u53f7\u90fd\u662f\u7406\u8bba\u4e0a\u552f\u4e00\u7684\n\n\u5728\u8fde\u63a5\u5efa\u7acb\u4e4b\u521d\uff0c\u53cc\u65b9\u5fc5\u987b\u77e5\u9053\u5f7c\u6b64\u7684\u521d\u59cb\u5e8f\u5217\u53f7\uff0c\u8fd9\u6837\u624d\u80fd\u540c\u6b65\u4f20\u8f93\u7684\u5b8c\u6210\u5ea6  \n\n\u4e3a\u4e86\u4ea4\u6362\u521d\u59cb\u5e8f\u5217\u53f7\uff0c\u9700\u8981\u5728\u8fde\u63a5\u5efa\u7acb\u7684\u65f6\u5019\uff0c\u4ee5 SYN \u63a7\u5236\u4f4d\u4e3a\u5951\u673a\u8fdb\u884c\u5e8f\u5217\u53f7\u4ea4\u6362\n\n\u53cc\u65b9\u4ee5 SYN \u4ea4\u6362\u5e8f\u5217\u53f7\uff0c\u6700\u5c11\u9700\u8981\u4e09\u6b65\uff0c\u624d\u80fd\u786e\u8ba4\u53cc\u65b9\u6b63\u786e\u6301\u6709\u7684\u5e8f\u5217\u53f7\uff0c\u8fd9\u79f0\u4e3a 3WHS(3 way handshake)<\/code><\/pre>\n<h2>\u5efa\u7acb\u53ef\u9760\u7684\u8fde\u63a5<\/h2>\n<p>\u4e09\u8def\u63e1\u624b(three-way handshake, 3WHS), \u662f\u4e00\u79cd\u7528\u5728\u53ef\u9760\u8fde\u63a5\u7684\u6b65\u9aa4.<br \/>\n\u8be5\u901a\u5e38\u6b65\u9aa4\u7531 TCP\u5bf9\u7b49\u70b9 <code>\u542f\u52a8(initiated)<\/code> \uff0c\u7531\u53e6\u4e00\u4e2a TCP\u5bf9\u7b49\u70b9 \u8fdb\u884c\u56de\u6267. \u4e5f\u53ef\u4ee5\u540c\u65f6\u5728\u4e24\u7aef\u542f\u52a8.<br \/>\n\u5f53\u540c\u65f6\u6253\u5f00\u65f6\uff0c\u6bcf\u4e2a TCP\u5bf9\u7b49\u70b9 \u5728\u53d1\u9001 SYN \u540e\u63a5\u6536\u5230\u4e00\u4e2a\u6ca1\u6709 <code>\u786e\u8ba4\u7f16\u53f7(acknowledgment)<\/code> \u7684 SYN segment.<br \/>\n\u5f53\u7136\uff0c\u6709\u53ef\u80fd\u4f1a\u6536\u5230\u65e7\u7684\u91cd\u590d SYN segment\uff0c\u4f7f\u5f97\u63a5\u6536\u8005\u8ba4\u4e3a\u8fde\u63a5\u7684\u521d\u59cb\u5316\u6b63\u5728\u540c\u65f6\u8fdb\u884c.<br \/>\n\u800c\u6b63\u786e\u4f7f\u7528 &#8220;reset&#8221; segments \u53ef\u4ee5\u6d88\u9664\u8fd9\u91cc\u7684\u6b67\u4e49.<\/p>\n<p>\u4e0b\u9762\u6709\u51e0\u4e2a\u5173\u4e8e \u8fde\u63a5\u542f\u52a8 \u7684\u4f8b\u5b50\uff0c\u867d\u7136\u5b83\u4eec\u5728\u53d1segment\u65f6\u6ca1\u6709\u643a\u5e26\u6570\u636e\uff0c\u4f46\u53ea\u8981\u5728TCP endpoint\u8ba4\u4e3a\u6570\u636e\u660e\u786e\u6709\u6548\u4e4b\u524d\uff0c\u4e0d\u8981\u53d1\u9001\u6570\u636e\u7ed9\u7528\u6237\uff0c\u5c31\u662f\u5408\u7406\u7684\u3002 (\u4f8b\u5982\uff0c\u6570\u636e\u5728\u63a5\u6536\u8005\u7684\u7f13\u51b2\u533a\u5185\uff0c\u76f4\u5230\u8be5\u8fde\u63a5\u62b5\u8fbe ESTABLISHED \u72b6\u6001\uff0c\u4f7f\u7528\u4e09\u8def\u63e1\u624b\u51cf\u5c11\u8fde\u63a5\u5931\u8d25\u7684\u53ef\u80fd\u6027). \u4e3a\u8fd9\u79cd\u68c0\u6d4b\u63d0\u4f9b\u4fe1\u606f\uff0c\u662f\u57fa\u4e8e \u5185\u5b58\u3001\u6d88\u606f \u4e4b\u95f4\u7684\u6743\u8861.<\/p>\n<p>\u4e0b\u56fe\u7b80\u5355\u5c55\u793a\u4e86\u4e00\u4e2a 3WHS.<br \/>\n\u6bcf\u884c\u90fd\u6709\u7f16\u53f7\u4f9b\u53c2\u8003. \u53f3\u7bad\u5934(&#8211;&gt;) \u8868\u793a TCP segment \u4ece A \u79bb\u5f00\u5230\u8fbe B. \u5de6\u7bad\u5934\u53cd\u8fc7\u6765.<br \/>\n\u7701\u7565\u53f7 (&#8230;) \u8868\u793a segment \u4ecd\u7136\u5728\u7f51\u7edc\u4e2d(\u88ab\u5ef6\u8fdf\u4e86\uff0c\u6b63\u5728\u4f20\u8f93)<br \/>\n\u56fe\u4e2d\u62ec\u53f7\u91cc\u7684\u662f\u6ce8\u91ca.<br \/>\nTCP \u8fde\u63a5\u72b6\u6001\uff0c\u8868\u793a segment \u5728\u79bb\u5f00\u6216\u8005\u5230\u8fbe\u540e\u7684\u72b6\u6001(\u8fd9\u4e9b\u5185\u5bb9\u5c55\u793a\u5728\u6bcf\u4e00\u884c\u4e2d\u95f4).<br \/>\nsegment \u7684\u5185\u5bb9\u4f1a\u7528\u4e00\u4e9b\u7f29\u5199\uff0c\u8fd9\u91cc\u4e0d\u8d58\u8ff0.<\/p>\n<h3>\u7531\u4e00\u8fb9\u53d1\u8d77<\/h3>\n<pre><code>    TCP Peer A                                           TCP Peer B\n1.  CLOSED                                               LISTEN\n2.  SYN-SENT    --&gt; &lt;SEQ=100&gt;&lt;CTL=SYN&gt;               --&gt; SYN-RECEIVED\n3.  ESTABLISHED &lt;-- &lt;SEQ=300&gt;&lt;ACK=101&gt;&lt;CTL=SYN,ACK&gt;  &lt;-- SYN-RECEIVED\n4.  ESTABLISHED --&gt; &lt;SEQ=101&gt;&lt;ACK=301&gt;&lt;CTL=ACK&gt;       --&gt; ESTABLISHED\n5.  ESTABLISHED --&gt; &lt;SEQ=101&gt;&lt;ACK=301&gt;&lt;CTL=ACK&gt;&lt;DATA&gt; --&gt; ESTABLISHED<\/code><\/pre>\n<p>\u8fd9\u4e2a\u56fe\u8bf4\u5f97\u5f88\u5f62\u8c61\uff0c<\/p>\n<ol>\n<li>\u9996\u5148 A \u53d1\u9001\u4e00\u4e2a SYN segment\uff0c\u5e76\u4e14\u544a\u8bc9\u5bf9\u65b9\u81ea\u5df1\u7684\u5e8f\u5217\u53f7\u662f\u4ece100\u5f00\u59cb\uff0c<\/li>\n<li>\u7136\u540e B \u8868\u8fbe ACK(\u63a7\u5236\u7b26)\uff0c\u4ee5\u786e\u8ba4\u6536\u5230\u4e0a\u4e00\u6761\u5185\u5bb9\uff1b\u4e5f\u53d1\u9001 SYN(\u63a7\u5236\u7b26) \u544a\u8bc9\u5bf9\u65b9\u81ea\u5df1\u4e5f\u9700\u8981\u8fdb\u884c\u5e8f\u5217\u53f7\u7684\u540c\u6b65\uff1b<br \/>\n\u5e76\u4e14\u53d1\u9001 ACK(\u786e\u8ba4\u5e8f\u53f7) \u544a\u8bc9 A \u81ea\u5df1\u63a5\u4e0b\u6765\u60f3\u8981 A \u7684\u7b2c\u4e00\u4e2a\u516b\u4f4d\u5b57\u8282\u7684\u5185\u5bb9 101\uff08\u89c1\u4e0b\u6587\u7684\u8865\u5145\u8bf4\u660e\uff09\uff1b\u540c\u65f6\u53d1\u9001 SEQ \u544a\u8bc9\u5bf9\u65b9\uff0c\u81ea\u5df1\u7684\u5e8f\u5217\u53f7\u662f\u4ece 300 \u5f00\u59cb.<br \/>\n\u5f53 A \u6536\u5230\u4ece B \u53d1\u8fc7\u6765\u7684\u56de\u6267\uff0c\u5219 A \u80fd\u786e\u8ba4\u81ea\u5df1\u6d88\u606f\u6709\u6b63\u786e\u53d1\u51fa\u53bb\uff0c\u6b64\u65f6 A \u81ea\u8eab\u8fdb\u5165 ESTABLISHED \u72b6\u6001\uff0c\u5b83\u80fd\u786e\u5b9a\u81ea\u5df1\u7684\u6d88\u606f\u662f\u80fd\u53ef\u9760\u53d1\u51fa\u53bb\u7684\uff1b\u4f46 B \u8fd9\u8fb9\u5c1a\u672a\u6536\u5230 A \u7684\u56de\u6267\uff0c\u6240\u4ee5 B \u4ecd\u7136\u5728\u7b49\u5f85\u540e\u7eed\u786e\u8ba4\u6b65\u9aa4.<\/li>\n<li>\u4e4b\u540e A \u8fd9\u8fb9\u4e5f\u540c\u6837\u5730\uff0c\u56de\u6267\u4e00\u4e2a ACK(\u63a7\u5236\u7b26) \u4f5c\u4e3a\u786e\u8ba4\uff0c\u5e76\u5c06\u5bf9\u65b9\u9700\u8981\u7684 SEQ \u53d1\u51fa\uff0c\u7136\u540e\u540c\u6837\u5730\u8ba9 ACK \u4e3a 301 \u53d1\u51fa\uff1b<br \/>\n\u5f53 B \u6536\u5230\u4ee5\u540e\uff0cB \u4e5f\u8fdb\u5165 ESTABLISHED \u72b6\u6001\uff0c\u6b64\u65f6\u4e00\u4e2a\u4e09\u8def\u63e1\u624b\u5c31\u5b8c\u6210\u4e86<\/li>\n<\/ol>\n<p>\u8fd9\u4e09\u4e2a\u7528\u4e8e\u63e1\u624b\u7684 segment\uff0c\u4e0d\u643a\u5e26\u7528\u6237\u6570\u636e<br \/>\n\u5728\u8fd9\u4e4b\u540e\uff0c\u53ef\u9760\u8fde\u63a5\u88ab\u5efa\u7acb\uff0c\u540e\u7eed\u6d41\u7a0b\u539f\u5219\u4e0a\u5e94\u8be5\u53d1\u9001\u6570\u636e\uff0c\u5426\u5219\u5728\u63cf\u8ff0\u4e0a\u8ba4\u4e3a\u662f\u4e00\u4e2a &#8220;\u7a7a\u7684 segment&#8221;<\/p>\n<p>\u5728\u6700\u540e\u4e00\u884c\uff0cA \u5411 B \u53d1\u9001\u4e86\u4e00\u4e9b\u6570\u636e\uff0c\u4f46\u5e8f\u5217\u53f7\u3001\u786e\u8ba4\u5e8f\u53f7\u90fd\u6ca1\u6709\u6539\u53d8\uff0c<br \/>\n\u5728\u63e1\u624b\u65f6\uff0cSEQ \u548c ACK \u4e4b\u6240\u4ee5\u6539\u53d8\uff0c\u662f\u56e0\u4e3a SYN \u4f1a\u4f7f\u5f97 ISN + 1\uff08\u8fd9\u662f\u4e00\u79cd\u4f20\u8f93\u65f6\u7684\u4fdd\u62a4\u673a\u5236\uff0c\u76f8\u5f53\u4e8e\u5360\u7528\u4e86\u5e8f\u5217\u53f7\u7a7a\u95f4\u7684\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u53c2\u8003\u5e8f\u5217\u53f7\u7684\u5b9a\u4e49\uff09\uff0c\u800c\u6b63\u5e38\u60c5\u51b5\u4e0b\u5e8f\u5217\u53f7\u662f\u4e0d\u4f1a\u53d8\u7684\uff08\u56e0\u4e3a ACK \u5e76\u4e0d\u4f1a\u5360\u7528\u5e8f\u5217\u53f7\u7a7a\u95f4\uff09\uff1b\u9664\u975e\u5bf9\u9762\u53d1\u8fc7\u6765\u65b0\u7684 ACK \u5e8f\u53f7\u8981\u6c42\u4f60\u53d1\u65b0\u7684\u5185\u5bb9\u7ed9\u5b83<\/p>\n<h3>\u4e24\u8fb9\u540c\u65f6\u53d1\u8d77<\/h3>\n<p>\u4e24\u8fb9\u540c\u65f6\u542f\u52a8\u7684\u60c5\u51b5\u53ea\u6709\u4e00\u4e9b\u5fae\u5c0f\u7684\u5dee\u522b.<br \/>\n\u5728\u4e0b\u56fe\u4e2d\uff0c\u6bcf\u4e2a TCP\u5bf9\u7b49\u70b9 \u4e4b\u95f4\u7684\u8fde\u63a5\u72b6\u6001\uff0c\u4ece CLOSED | SYN-SENT | SYN-RECEIVED | ESTABLISHED \u4e4b\u95f4\u5faa\u73af<\/p>\n<pre><code>    TCP Peer A                                       TCP Peer B\n1.  CLOSED                                           CLOSED\n2.  SYN-SENT     --&gt; &lt;SEQ=100&gt;&lt;CTL=SYN&gt;              ...\n3.  SYN-RECEIVED &lt;-- &lt;SEQ=300&gt;&lt;CTL=SYN&gt;              &lt;-- SYN-SENT\n4.               ... &lt;SEQ=100&gt;&lt;CTL=SYN&gt;              --&gt; SYN-RECEIVED\n5.  SYN-RECEIVED --&gt; &lt;SEQ=100&gt;&lt;ACK=301&gt;&lt;CTL=SYN,ACK&gt; ...\n6.  ESTABLISHED  &lt;-- &lt;SEQ=300&gt;&lt;ACK=101&gt;&lt;CTL=SYN,ACK&gt; &lt;-- SYN-RECEIVED\n7.               ... &lt;SEQ=100&gt;&lt;ACK=301&gt;&lt;CTL=SYN,ACK&gt; --&gt; ESTABLISHED<\/code><\/pre>\n<p>TCP\u5b9e\u73b0\u5fc5\u987b\u652f\u6301\u8fd9\u79cd\u540c\u65f6\u6253\u5f00\u7684\u5c1d\u8bd5<br \/>\nTCP\u5b9e\u73b0\u5fc5\u987b\u8ffd\u8e2a SYN-RECEIVED \u662f\u4ece \u79ef\u6781 \u8fd8\u662f \u88ab\u52a8\u7684 OPEN \u8fdb\u5165\u7684.<\/p>\n<p>3WHS \u7684\u4e3b\u8981\u539f\u56e0\u662f \u9632\u6b62\u65e7\u7684\u91cd\u590d\u8fde\u63a5\u542f\u52a8 \u800c\u5f15\u8d77\u6df7\u4e71. \u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u4f1a\u6307\u5b9a\u4e00\u4e2a\u7279\u6b8a\u7684\u63a7\u5236\u4fe1\u606f <code>reset<\/code> .<br \/>\n\u5982\u679c\u63a5\u6536\u4e2d\u7684 TCP peer \u662f\u975e\u540c\u6b65\u72b6\u6001\uff08\u6bd4\u5982 SYN-SENT, SYN- RECEIVED)\uff0c\u5b83\u4f1a\u5728\u63a5\u6536\u5230\u53ef\u7528\u7684 reset \u540e\u8fd4\u56de\u5230 LISTEN \u72b6\u6001.<br \/>\n\u5982\u679c TCP peer \u662f\u67d0\u79cd \u5df2\u540c\u6b65\u72b6\u6001(ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT), \u5728\u63a5\u5230 reset \u540e\u4f1a\u7ec8\u6b62\u8fde\u63a5\u5e76\u4e14\u901a\u77e5\u7528\u6237\u3002<br \/>\n\u8fd9\u4f1a\u5728\u540e\u9762\u7684 <code>half-open \u8fde\u63a5<\/code> \u4e2d\u8fdb\u4e00\u6b65\u8ba8\u8bba.<\/p>\n<p>\u901a\u8fc7<strong>\u603b\u7ed3<\/strong>\u4e24\u79cd\u60c5\u51b5\uff0c\u5bf9\u4e8e\u5355\u4e2a TCP peer\uff0c\u5b83\u7684\u72b6\u6001\u4f1a\u50cf\u8fd9\u6837\uff1a<\/p>\n<ul>\n<li>\u53d1\u51fa SYN \u540c\u6b65\u5e8f\u5217\u53f7\uff0c\u81ea\u8eab\u8fdb\u5165 SYN-SENT \u72b6\u6001\uff0c<\/li>\n<li>\u82e5\u6210\u529f\u6536\u5230\u6765\u81ea\u5bf9\u65b9\u7684 SYN \u8bf7\u6c42\uff0c\u81ea\u8eab\u8fdb\u5165 SYN-RECEIVED \u72b6\u6001\uff0c<\/li>\n<li>\u82e5\u53d1\u51fa SYN \u540e\uff0c\u6210\u529f\u6536\u5230\u5bf9\u65b9\u7684 SYN\u3001ACK\uff0c\u5219\u8fdb\u5165 ESTABLISHD \u72b6\u6001\uff0c<\/li>\n<li>\u53cc\u65b9\u8fdb\u5165 ESTABLISHED \u72b6\u6001\u65f6\uff0c\u63e1\u624b\u5b8c\u6210<\/li>\n<\/ul>\n<p>\u800c\u6839\u636e\u662f\u5426\u63e1\u624b\u5b8c\u6210\uff0c\u5206\u4e3a \u540c\u6b65\u72b6\u6001(synchronized state) \uff0c\u4ee5\u53ca\u975e\u540c\u6b65\u72b6\u6001(non-synchronized state)<br \/>\n\u6b63\u5e38\u5355\u8fb9\u53d1\u8d77\u7684\u63e1\u624b\uff0c\u53ea\u9700\u8981\u4e09\u6b21\uff1b\u4f46\u4e24\u65b9\u540c\u65f6\u53d1\u8d77\u7684\u63e1\u624b\uff0c\u89c6\u60c5\u51b5\u53ef\u80fd\u4f1a\u53d8\u6210\u56db\u6b21\u3002<\/p>\n<h3>\u4ece\u65e7\u7684\u91cd\u590dSYN\u4e2d\u8fdb\u884c\u6062\u590d<\/h3>\n<pre><code>    TCP Peer A                                           TCP Peer B\n1.  CLOSED                                               LISTEN\n2.  SYN-SENT    --&gt; &lt;SEQ=100&gt;&lt;CTL=SYN&gt;               ...\n3.  (duplicate) ... &lt;SEQ=90&gt;&lt;CTL=SYN&gt;               --&gt; SYN-RECEIVED\n4.  SYN-SENT    &lt;-- &lt;SEQ=300&gt;&lt;ACK=91&gt;&lt;CTL=SYN,ACK&gt;  &lt;-- SYN-RECEIVED\n5.  SYN-SENT    --&gt; &lt;SEQ=91&gt;&lt;CTL=RST&gt;               --&gt; LISTEN\n6.              ... &lt;SEQ=100&gt;&lt;CTL=SYN&gt;               --&gt; SYN-RECEIVED\n7.  ESTABLISHED &lt;-- &lt;SEQ=400&gt;&lt;ACK=101&gt;&lt;CTL=SYN,ACK&gt;  &lt;-- SYN-RECEIVED\n8.  ESTABLISHED --&gt; &lt;SEQ=101&gt;&lt;ACK=401&gt;&lt;CTL=ACK&gt;      --&gt; ESTABLISHED<\/code><\/pre>\n<p>\u5728\u8be5\u56fe\u4e2d\uff0c\u4e00\u4e2a\u65b0\u7684 SEQ=100 \u7684 SYN segment \u88ab\u53d1\u5f80B\uff0c\u800c\u65e9\u524d\u4ece A \u53d1\u5f80 B \u7684 SEQ = 90 \u7684 SYN segment \u4e5f\u88ab\u9001\u8fbe<br \/>\nB \u6b64\u65f6\u770b\u4e0d\u51fa\u6765 SEQ=90 \u7684\u662f\u65e7\u7684\u91cd\u590d segment\uff0c\u5b83\u5c06\u5176\u89c6\u4e3a\u6b63\u5e38\u7684 SYN segment\uff0c\u5e76\u8fd4\u56de\u4e00\u4e2a ACK=91<br \/>\n\u800c A \u81ea\u5df1\u80fd\u770b\u51fa\u6765\u8fd9\u4e2a ACK \u662f\u4e0d\u6b63\u786e\u7684\u8bf7\u6c42\uff0c\u56e0\u6b64\u8fd4\u56de\u4e00\u4e2a RST(reset)\uff0c\u5e76\u4e14\u628a\u8fd9\u4e2a SEQ \u7ed9\u5e26\u4e0a\u4f7f\u5176\u53ef\u4fe1.<br \/>\n\u6b64\u65f6 B \u6536\u5230 RST\uff0c\u91cd\u65b0\u8fdb\u5165 LISTEN \u72b6\u6001<br \/>\n\u4e4b\u540e\uff0cA \u518d\u6b21\u91cd\u65b0\u7528\u6b63\u786e\u7684 SEQ = 100 \u5c1d\u8bd5\u540c\u6b65\uff0c\u8fd9\u4e2a\u65f6\u5019\u6d41\u7a0b\u5c31\u6b63\u5e38\u4e86.<br \/>\n\u800c\u5982\u679c\u7b2c\u516d\u884c\u7684 segment \u53c8\u6bd4 \u7b2c\u4e94\u884c\u7684\u65e9\u5230\uff0c\u5219\u8fd9\u91cc\u7684\u4ea4\u6362\u4f1a\u53d8\u5f97\u66f4\u52a0\u590d\u6742\u2026\u2026<\/p>\n<h3>\u534a\u5f00\u8fde\u63a5 \u4ee5\u53ca \u5176\u4ed6\u5f02\u5e38\u60c5\u51b5<\/h3>\n<p>TODO<\/p>\n<h2>\u5173\u95ed\u8fde\u63a5<\/h2>\n<h2>Segmentation<\/h2>\n<p>\u672f\u8bed <code>segmentation<\/code> \u6307TCP\u6267\u884c\u7684\u4e00\u79cd\u884c\u4e3a \u2014\u2014 \u5c06application \u53d1\u9001\u7684 <code>\u5b57\u8282\u6d41(stream of bytes)<\/code> \u6253\u5305 \u5e76\u586b\u5145\u5230 <code>TCP segments<\/code><br \/>\n\u5355\u4e2a <code>TCP segment<\/code> \u901a\u5e38\u5e76\u4e0d\u4f1a\u548c \u6765\u81eaapplication\u7684 \u5355\u4e2a \u53d1\u9001\uff08\u6216 socket \u5199\u5165\uff09\u8c03\u7528 <code>\u4e00\u4e00\u5bf9\u5e94(one-for-one)<\/code> .<br \/>\n\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u80fd\u4ee5\u4e0a\u5c42\u534f\u8bae\u7684\u6d88\u606f\u7c92\u5ea6(granularity of message) \u8fdb\u884c\u5199\u5165\uff0c<br \/>\n\u4f46 TCP \u4fdd\u8bc1\uff1a TCP segment \u5728 \u53d1\u9001\u3001\u63a5\u6536 \u65f6\u7684\u8fb9\u754c(boundaries) \u3001application \u8bfb\/\u5199 \u65f6\u7f13\u51b2\u533a\u7684\u8fb9\u754c \u662f\u65e0\u5173\u7684\uff0c<br \/>\n\u5728\u4e00\u4e9b\u7279\u6b8a\u7684\u534f\u8bae\u4e2d\uff0c\u6bd4\u5982 <code>RDMA(Remote Direct Memory Access)<\/code> \u3001 <code>DDP(Direct Data Placement)<\/code> \u3001 <code>MPA(Marker PDU Aligned Framing<\/code> \uff0c\u5f53 TCP segment \u548c application data units \u4e4b\u95f4\u7684\u5173\u7cfb\u53ef\u4ee5\u88ab\u63a7\u5236\u65f6\uff0c\u8fd9\u4e9b\u8868\u73b0\u53ef\u80fd\u5f97\u5230\u4f18\u5316\uff1b\u5e76\u4e14MPA\u5305\u542b\u4e00\u4e9b\u7279\u6b8a\u7684\u673a\u5236\u6765 \u53d1\u73b0\u3001\u9a8c\u8bc1 <code>TCP segments<\/code> \u548c <code>application message data structures<\/code> \u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u4f46\u8fd9\u5728 applications \u4e2d\u662f\u7279\u6b8a\u7684\uff0c\u5c31\u50cf RDMA \u4e00\u6837. \u901a\u5e38\uff0cTCP segments \u7684 \u5927\u5c0f(sizing) \u4f1a\u53d7\u5230 TCP implementation \u591a\u4e2a\u76ee\u6807(multiple goals) \u7684\u5f71\u54cd<\/p>\n<p>\u53d1\u9001\u8f83\u5927 segment \u7684\u539f\u56e0\u5305\u542b\uff1a<\/p>\n<ul>\n<li>\u51cf\u5c11\u7f51\u7edc\u4e2d\u4f20\u8f93\u7684 \u6570\u636e\u5305(packets) \u6570\u91cf<\/li>\n<li>\u901a\u8fc7\u542f\u7528\u8f83\u5c11\u6570\u91cf\u7684\u4e2d\u65ad\u548c\u5c42\u95f4\u4ea4\u4e92\u6765\u63d0\u9ad8\u5904\u7406\u6548\u7387\u548c\u6f5c\u5728\u6027\u80fd\u3002<\/li>\n<li>\u9650\u5236 TCP headers \u7684\u5f00\u9500<\/li>\n<\/ul>\n<p>\u6ce8\u610f\uff0c\u53d1\u9001\u66f4\u5927\u7684 segments \u7684\u4f18\u52bf\uff0c\u53ef\u80fd\u968f\u7740\u5176\u5927\u5c0f\u7684\u589e\u52a0\u800c\u53d8\u4f4e\uff0c\u5e76\u4e14\u53ef\u80fd\u5b58\u5728\u4f18\u52a3\u98a0\u5012\u7684\u4e34\u754c\u503c(boundaries)<br \/>\n\u4f8b\u5982\uff0c\u5728\u6709\u4e9b\u5b9e\u73b0\u67b6\u6784\u4e2d\uff0c1025 bytes \u5728 segment \u53ef\u80fd\u8868\u73b0\u6bd4 1024 bytes \u66f4\u52a0\u7cdf\u7cd5\uff0c\u7eaf\u7cb9\u662f\u56e0\u4e3a \u590d\u5236 \u64cd\u4f5c\u4e0a\u7684\u6570\u636e\u5bf9\u9f50.<\/p>\n<p>\u53d1\u9001\u8f83\u5c0f segment \u7684\u539f\u56e0\u5305\u542b\uff1a<\/p>\n<ul>\n<li>\u907f\u514d\u53d1\u9001\u7684 TCP segment \u4f7f\u5f97 IP datagram \u53d8\u5f97\u5f88\u5927\uff0c\u8ba9 IP \u5728\u7f51\u7edc\u8def\u5f84\u4e2d\u4f20\u8f93\u65f6 MTU \u5c3d\u53ef\u80fd\u6700\u5c0f\uff0c\u907f\u514d\u4efb\u4f55 packet \u4e22\u5931 \u6216\u8005 \u89e6\u53d1 fragmentation. \u66f4\u7cdf\u7684\u662f\uff0c\u4e00\u4e9b \u9632\u706b\u5899(firewalls) \u6216\u8005 middleboxes \u53ef\u80fd\u4f1a\u4e22\u5f03 \u89e6\u53d1 fragment \u7684 \u6570\u636e\u5305(packets) \u6216\u8005\u4e0e fragmentation \u76f8\u5173\u7684 ICMP \u76f8\u5173\u6d88\u606f<\/li>\n<li>\u907f\u514d application \u6570\u636e\u6d41 \u7684\u5ef6\u8fdf\uff0c\u5c24\u5176\u662f TCP \u5728\u7b49\u5f85 application \u751f\u6210\u66f4\u591a \u6570\u636e\uff0c\u6216\u8005\u4e00\u4e2a\u5bf9\u7b49\u7684 \u4e3a\u4e86\u751f\u6210\u66f4\u591a\u6570\u636e\u7684 \u4e8b\u4ef6\u3001\u8f93\u5165 \u65f6<\/li>\n<li>\u5728 TCP segments \u548c \u5e95\u5c42\u6570\u636e\u5355\u5143\u4e2d \u8fdb\u884c <code>fate sharing<\/code> \uff08\u4f8b\u5982\uff0c\u5728\u5e95\u5c42IP\u534f\u8bae\u4e2d\uff0c\u7528\u4e8e\u90a3\u4e9b \u5355\u5143(cell) \u6216\u8005 frame sizes \u5c0f\u4e8e IP \u4e2d MTU \u503c \u7684 \u94fe\u8def<\/li>\n<\/ul>\n<p>\u603b\u7684\u6765\u8bf4\uff0cTCP\u5305\u542b\u82e5\u5e72\u673a\u5236\uff0c<\/p>\n<ul>\n<li>Maximum Segment Size Option(\u6700\u5927segment\u5927\u5c0f)<\/li>\n<li>Path MTU Discovery(\u8def\u5f84\u6700\u5927\u4f20\u8f93\u957f\u5ea6)<\/li>\n<li>Nagle algorithm<\/li>\n<li>IPv6 Jumbograms<\/li>\n<\/ul>\n<p>\u8fd9\u4e9b\u5728\u4e0b\u9762\u7684\u7ae0\u8282\u8fdb\u4e00\u6b65\u5c55\u5f00\u4e86\u8bf4\u660e<\/p>\n<p>TODO<\/p>\n<h2>\u6570\u636e\u6c9f\u901a Data Communication<\/h2>\n<p>\u5f53\u8fde\u63a5\u88ab\u786e\u7acb(established)\uff0c\u6570\u636e\u7684\u6c9f\u901a \u5c06\u901a\u8fc7 <code>segments<\/code> \u4e4b\u95f4\u7684\u4ea4\u6362\u6765\u5b9e\u73b0.<br \/>\n\u56e0\u4e3a segments \u53ef\u80fd\u56e0\u4e3a error(\u6821\u9a8c\u6d4b\u8bd5\u5931\u8d25) \u6216\u8005 <code>network congestion(\u7f51\u7edc\u62e5\u5835)<\/code> \u800c\u4e22\u5931, TCP \u4f7f\u7528 <code>\u91cd\u53d1(retransmission)<\/code> \u673a\u5236\u786e\u4fdd\u6bcf\u4e2a segment \u90fd\u80fd\u88ab\u6b63\u786e\u53d1\u9001.<br \/>\n\u800c segments \u53ef\u80fd\u4ece \u7f51\u7edc\u3001TCP\u7684retransmission \u83b7\u5f97\u91cd\u590d\u6570\u636e. \u5728\u524d\u9762 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#sequence-numbers\">\u6bb5\u843d 3.4<\/a> \u4ecb\u7ecd\u4e86 <code>sequence number<\/code>\uff0cTCP implementation \u4f1a\u5bf9 segments \u4e2d\u7684 <code>\u5e8f\u5217(sequence)<\/code> \u3001 <code>\u627f\u8ba4\u8bc1\u660e\u503c(acknowledgment numbers)<\/code> \u8fdb\u884c\u7279\u5b9a\u7684\u6d4b\u8bd5\uff0c\u4ee5\u9a8c\u8bc1\u4ed6\u4eec\u7684\u5408\u7406\u6027(\u53ef\u63a5\u53d7\u6027, aceptability)<\/p>\n<p>\u6570\u636e\u7684\u53d1\u9001\u8005\u8ffd\u8e2a\u4e0b\u4e00\u4e2a sequence number\uff0c\u4ee5\u7528\u5728(use in)\u53d8\u91cf SND.NXT \u4e2d.<br \/>\n\u6570\u636e\u7684\u63a5\u6536\u8005\u8ffd\u8e2a\u4e0b\u4e00\u4e2a sequence number\uff0c\u4ee5\u8981\u6c42(expect in) RCV.NXT.<br \/>\n\u6570\u636e\u7684\u53d1\u9001\u8005\u8ffd\u8e2a \u53d8\u91cf SND.UNA \u4e2d\u6700\u65e9\u7684 unacknowledged sequence number.<br \/>\n\u5982\u679c \u6570\u636e\u6d41(data flow) \u6682\u65f6 idle, \u5e76\u4e14\u6240\u6709 data sent \u5df2\u7ecf\u88ab acknowledged\uff0c\u6b64\u65f6\u4e09\u4e2a\u53d8\u91cf\u5c06\u76f8\u7b49.<\/p>\n<p>\u5f53\u53d1\u9001\u8005\u521b\u5efa segment \u5e76\u4e14\u4f20\u8f93\u65f6\uff0c\u53d1\u9001\u8005 \u589e\u52a0(advances) SND.NXT\uff0c<br \/>\n\u5f53\u63a5\u6536\u8005\u6536\u5230 segment\uff0c\u5b83 \u589e\u52a0(advances) RCV.NXT\uff0c\u5e76\u4e14\u53d1\u9001 acknowledgment.<br \/>\n\u5f53\u53d1\u9001\u8005\u6536\u5230 acknowledgment \u56de\u6267\uff0c\u5b83 \u589e\u52a0(advances) SND.UNA<br \/>\n\u8fd9\u4e9b\u53d8\u91cf\u7684\u533a\u522b\uff0c\u7531\u4ed6\u4eec\u5728 communication \u4e2d\u7684\u5ef6\u8fdf\u800c\u5ea6\u91cf<br \/>\n\u800c\u8fd9\u4e9b\u53d8\u91cf \u88ab\u589e\u52a0(advanced) \u7684\u503c\u662f segment \u4e2d SYN\/FIN \u6807\u5fd7 \u4ee5\u53ca \u6570\u636e\u7684\u957f\u5ea6<br \/>\n\u6ce8\u610f\uff0c\u5728 ESTABLISHED \u72b6\u6001\uff0c\u6240\u6709 segments \u5fc5\u987b\u643a\u5e26\u5f53\u524d\u7684 acknowledgment \u4fe1\u606f<\/p>\n<p>CLOSE \u7528\u6237\u8c03\u7528 \u6697\u793a\u4e00\u4e2a push \u51fd\u6570(<a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#user-api\">\u53c2\u8003 3.9.1<\/a>, \u4e0e\u4f20\u5165\u7684 segment \u4e2d\u7684 FIN \u63a7\u5236\u6807\u5fd7 \u4e00\u81f4<\/p>\n<h2>\u63a5\u53e3<\/h2>\n<p><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9293#name-interfaces\">Interface &#8211; RFC9293<\/a><br \/>\n\u8be5\u7ae0\u8282\u5b9a\u4e49\u4e86\u4e00\u4e9b TCP implementation\u4e2d \u9762\u5411 user \u7684\u62bd\u8c61\u7684\u529f\u80fd\u6027\u63cf\u8ff0\u547d\u4ee4\uff0c\u6bcf\u79cd\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u4f1a\u6709\u4e0d\u540c\u7684\u5b9e\u73b0<br \/>\n\u6700\u540e\uff0c\u6211\u4eec\u5fc5\u987b\u8b66\u544a\u8bfb\u8005\uff0c\u4e0d\u540c\u7684TCP implementation \u53ef\u80fd\u6709\u4e0d\u540c\u7684 <code>\u7528\u6237\u63a5\u53e3(user interface)<\/code><br \/>\n\u4e0d\u8fc7\uff0c\u6240\u6709 TCP implementation \u90fd\u5fc5\u987b\u63d0\u4f9b \u4e3b\u8981\u3001\u516c\u5171\u7684\u670d\u52a1 \u4ee5\u4fdd\u8bc1\u6240\u6709 TCP implementations \u90fd\u80fd\u652f\u6301\u4e00\u4e9b\u76f8\u540c\u7684\u534f\u8bae\u7b49\u7ea7\uff0c<br \/>\n\u8be5\u6bb5\u843d\u6307\u51fa\u4e86\u8fd9\u4e9b \u6240\u6709TCP implementations \u90fd\u9700\u8981\u7684\u529f\u80fd\u63a5\u53e3<\/p>\n<p>\u5728\u6b63\u5f0f\u9605\u8bfb\u524d\uff0c<br \/>\n<a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8303#section-3.1\">3.1. Primitives Provided by TCP &#8211; RFC8303<\/a> \u63d0\u4f9b\u4e86 TCP\u7684\u4e00\u4e9b \u539f\u8bed(Primitives) \u4ee5\u4f9b\u53c2\u8003<br \/>\n\u4ee5\u4e0b\u6bb5\u843d\u662f \u7528\u6237\/TCP \u63a5\u53e3 \u7684\u529f\u80fd\u8868\u5f81\uff0c\u4ed6\u4eec\u9ed8\u8ba4\u4f60\u5b9e\u7528 <code>\u9ad8\u7ea7\u8bed\u8a00(hight-level languages)<\/code> \u7684 <code>\u7a0b\u5e8f(procedure)<\/code> \u6216\u8005 <code>\u65b9\u6cd5\u8c03\u7528(function calls)<\/code>\uff0c\u4f46\u8fd9\u4e0d\u610f\u5473\u7740\u6392\u9664 <code>\u9677\u9631\u7c7b\u670d\u52a1\u8c03\u7528(trap-type service calls)<\/code><br \/>\n\u4ee5\u4e0b\u7528\u6237\u547d\u4ee4\u63cf\u8ff0\u7684\u4e2d\u7684\u57fa\u672c\u65b9\u6cd5\uff0cTCP implementation \u5fc5\u987b\u5b9e\u73b0\u4ed6\u4eec\u4ee5\u652f\u6301\u8fdb\u7a0b\u95f4\u7684\u901a\u4fe1. \u800c\u4e2a\u4eba\u7684\u5b9e\u73b0\u5fc5\u987b\u5b9a\u4e49\u4ed6\u4eec\u81ea\u8eab\u989d\u5916\u7684\u683c\u5f0f\u3001\u4ee5\u53ca\u5728\u5355\u4e2a\u529f\u80fd\u8c03\u7528\u4e2d\u53ef\u80fd\u8981\u63d0\u4f9b\u7684 \u7ec4\u5408 \u6216\u8005 \u5b50\u96c6. \u5728\u4e00\u4e9b TCP\u5b9e\u73b0 \u4e2d\uff0c\u53ef\u80fd\u4f1a\u5e0c\u671b\u5728\u8fde\u63a5\u65f6 \u7b2c\u4e00\u6b21 SEND \u6216\u8005 RECEIVE \u53d1\u51fa\u540e\u81ea\u52a8\u8fdb\u884c OPEN.<br \/>\n\u5728\u63d0\u4f9b\u8fdb\u7a0b\u95f4\u901a\u4fe1\u7684\u529f\u80fd\u65f6\uff0cTCP\u5b9e\u73b0 \u4e0d\u80fd\u53ea\u662f\u63a5\u6536\u547d\u4ee4\uff0c\u800c\u662f\u5fc5\u987b\u8fd4\u56de\u5b83\u6267\u884c\u670d\u52a1\u8fdb\u7a0b\u7684\u4e00\u4e9b\u76f8\u5173\u4fe1\u606f\uff0c\u5305\u62ec\uff1a<\/p>\n<ul>\n<li>\u8fde\u63a5\u76f8\u5173\u7684\u5e38\u89c4\u4fe1\u606f\uff08\u6bd4\u5982\uff0c\u4e2d\u65ad\u3001\u8fdc\u7aef\u5173\u95ed\u3001\u7ed1\u5b9a\u4e00\u4e2a\u4e0d\u88ab\u671f\u5f85\u7684socket \u7b49\u7b49\uff09<\/li>\n<li>\u5bf9\u7279\u6b8a\u7528\u6237\u547d\u4ee4\u8fdb\u884c\u56de\u590d\uff0c\u4ee5\u6307\u793a\u6210\u529f\u7ed3\u679c\uff0c\u6216\u8005\u591a\u79cd\u7c7b\u578b\u7684\u5931\u8d25<\/li>\n<\/ul>\n<p>\u5176\u4e2d\uff0c\u8fd9\u4e9b\u4e3b\u8981\u7684\u529f\u80fd\u96c6\uff0c\u5305\u542b\uff1a<br \/>\n\u5305\u542b\uff1a<\/p>\n<ul>\n<li>OPEN Call<\/li>\n<li>SEND Call<\/li>\n<li>RECEIVE Call<\/li>\n<li>CLOSE Call<\/li>\n<li>ABORT Call<\/li>\n<li>STATUS Call<\/li>\n<li>SEGMENT ARRIVES<\/li>\n<li>Timeouts<\/li>\n<\/ul>\n<p>\u800c\u4ed6\u4eec\u5728\u4ee5\u4e0b\u6bcf\u79cd\u72b6\u6001\u4e0b\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u8868\u73b0\uff1a<\/p>\n<ul>\n<li>CLOSED STATE (i.e., TCB does not exist)<\/li>\n<li>LISTEN STATE<\/li>\n<li>SYN-SENT STATE<\/li>\n<li>SYN-RECEIVED STATE<\/li>\n<li>ESTABLISHED STATE<\/li>\n<li>FIN-WAIT-1 STATE<\/li>\n<li>FIN-WAIT-2 STATE<\/li>\n<li>CLOSE-WAIT STATE<\/li>\n<li>CLOSING STATE<\/li>\n<li>LAST-ACK STATE<\/li>\n<li>TIME-WAIT STATE<\/li>\n<\/ul>\n<p>\u4ed6\u4eec\u5728\u67d0\u4e9b\u72b6\u6001\u4e0b\uff0c\u6bd4\u5982 TIME-WAIT STATE\uff0c\u4f1a\u53cd\u4e00\u4e2a\u9519\u8bef\uff0c\u672c\u6587\u4e0d\u518d\u8d58\u8ff0\u8fd9\u4e9b\u60c5\u51b5<\/p>\n<h3>Open<\/h3>\n<p>CLOSED STATE\uff1a<br \/>\n\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 TCB(\u4f20\u8f93\u63a7\u5236\u5757)\uff0c\u4ee5\u7ef4\u6301\u8fde\u63a5\u72b6\u6001\u76f8\u5173\u7684\u4fe1\u606f<br \/>\n\u586b\u5199\uff1a<\/p>\n<ul>\n<li>local socket identifier<\/li>\n<li>remote socket<\/li>\n<li>Diffserv field<\/li>\n<li>security\/compartment<\/li>\n<li>user timeout information<\/li>\n<\/ul>\n<p>\u6ce8\u610f\uff0cremote socket \u7684\u4e00\u90e8\u5206\u5185\u5bb9\u53ef\u80fd\u4e0d\u5e0c\u671b\u5728 \u88ab\u52a8\u7684OPEN \u4e2d\u51fa\u73b0\uff0c\u800c\u662f\u88ab\u4f20\u5165\u7684 SYN segment \u7684\u53c2\u6570\u586b\u5145<br \/>\n\u9700\u8981\u8be5 user \u7684 \u5b89\u5168\u6027(security)\u3001\u5dee\u5f02\u503c(Diffserv value) \u5f97\u5230\u9a8c\u8bc1\uff0c\u5426\u5219\u8fd4\u56de\u9519\u8bef&#8221;Diffserv value not allowed&#8221; \u6216\u8005 &#8220;error: security\/compartment not allowed&#8221;<\/p>\n<p>\u5982\u679c\u662f\u88ab\u52a8\u7684\u76d1\u542c\uff0c\u8fdb\u5165 LISTEN \u72b6\u6001\uff0c\u5e76\u4e14\u8fd4\u56de<br \/>\n\u5982\u679c\u6fc0\u6d3b\uff0c\u5e76\u4e14\u8fdc\u7aefsocket\u672a\u6307\u5b9a\uff0c\u5219\u8fd4\u56de &#8220;error: remote socket unspecified&#8221;<\/p>\n<p>\u5982\u679c\u6fc0\u6d3b\uff0c\u5e76\u4e14\u8fdc\u7aefsocket\u6307\u5b9a\uff0c\u5219\u63d0\u51fa\u4e00\u4e2a SYN segment. \u6b64\u65f6\uff0c\u4e00\u4e2a ISS\uff08Initial send sequence unmber) \u88ab\u9009\u62e9. \u7136\u540e\u8be5 SYN segment \u88ab\u53d1\u9001\uff0c\u5b83\u5904\u4e8e\u4e00\u4e2a\u5f62\u5982 <code>&lt;SEQ=ISS&gt;&lt;CTL=SYN&gt;<\/code> \u7684\u8868.<br \/>\n\u5c06 SND.UNA \u8bbe\u7f6e\u4e3a ISS\uff0cSND.NXT \u8bbe\u7f6e\u4e3a ISS+1\uff0c\u7136\u540e\u8fdb\u5165 SYN-SENT \u72b6\u6001\uff0c\u5e76\u8fd4\u56de<\/p>\n<p>\u53e6\u4e00\u65b9\u9762\uff0c\u5982\u679c\u8c03\u7528\u8005\u6ca1\u6709 \u672c\u5730\u6307\u5b9asocket \u7684\u8bbf\u95ee\u6743\u9650\uff0c\u5219\u8fd4\u56de &#8220;error: connection illegal for this process&#8221;<br \/>\n\u5982\u679c\u6ca1\u6709\u4f4d\u7f6e(room)\u53bb\u521b\u5efa\u65b0\u7684\u8fde\u63a5\uff0c\u8fd4\u56de&#8221;error: insufficient resources&#8221;<\/p>\n<p>LISTEN STATE\uff1a<br \/>\n\u5982\u679c OPEN \u8c03\u7528\u88ab\u6267\u884c\uff0c\u5e76\u4e14\u8fdc\u7aefsocket\u88ab\u6307\u5b9a\uff0c\u6b64\u65f6\u5c06\u8fde\u63a5\u4ece\u88ab\u52a8\u72b6\u6001\u4ea4\u66ff\u4e3a\u4e3b\u52a8\u72b6\u6001\uff0c\u5e76\u9009\u62e9\u4e00\u4e2a ISS<br \/>\n\u53d1\u9001 SYN segment\uff0c\u8bbe\u7f6e SND.UNA \u4e3a ISS\uff0cSND.NXT = ISS+1<br \/>\n\u8fdb\u5165 SYN-SENT \u72b6\u6001.<\/p>\n<p>\u5728\u8fdb\u5165 ESTABLISHED \u72b6\u6001\u540e\uff0c\u548c SEND \u76f8\u5173\u7684\u6570\u636e\u53ef\u80fd\u4f1a\u548c SYN segment \u4e00\u8d77\u53d1\u9001\uff0c\u6216\u8005\u4e3a\u4f20\u8f93\u8fdb\u884c\u6392\u5e8f<br \/>\n<code>\u7d27\u6025\u6bd4\u7279\u4f4d(urgent bit)<\/code> \u5fc5\u987b\u548c data segments \u4e00\u8d77\u53d1\u9001\uff0c\u4f5c\u4e3a\u8be5\u547d\u4ee4\u7684\u7ed3\u679c<br \/>\n\u5982\u679c\u6ca1\u6709 room \u6765\u5165\u961f\u8be5\u4eb2\u6c42\uff0c\u8fd4\u56de &#8220;error: insufficient resources&#8221;<br \/>\n\u5982\u679c \u8fdc\u7aefsocket \u672a\u6307\u5b9a\uff0c\u8fd4\u56de&#8221;remote socket unspecified&#8221;<\/p>\n<p>\u5176\u4ed6\u8bf7\u53c2\u8003\u539f\u6587\u6863<\/p>\n<div class=\"footnotes\">\n<hr>\n<ol>\n<li id=\"fn:REF2\">\u6ce8\u610f\uff0c\u8fd9\u91cc\u8bf4\u7684 sockets \u6307\u7684\u662f\u4e00\u4e2a\u4e60\u60ef\u7528\u8bed\uff08\u9996\u5b57\u6bcd\u5c0f\u5199\uff09\uff0c\u4f60\u4e0d\u5fc5\u628a\u4ed6\u5f53\u6210 API \u4e2d\u4f7f\u7528\u7684 Sockets\uff0c\u53ea\u9700\u8981\u628a\u4ed6\u5f53\u6210\u4e00\u4e2a\u5f88\u591a\u5730\u65b9\u90fd\u4f1a\u4f7f\u7528\u7684\u540d\u8bcd\uff0c\u5e76\u4e14\u5728TCP\u8fd9\u91cc\u4e5f\u6709\u7279\u5b9a\u542b\u4e49\u3002\u8fd9\u4e2a\u8bcd\u6700\u521d\u6e90\u81ea\u963f\u5e15\u7f51\uff0c\u8be6\u60c5\u53ef\u4ee5\u53c2\u8003 Sockets \u76f8\u5173\u6587\u6863&nbsp;<a class=\"footnote-backref\" href=\"#fnref1:REF2\" rev=\"footnote\">\u21a9<\/a><\/li>\n<\/ol>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u7ffb\u8bd1 RFC9293<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=\/wp\/v2\/posts\/66"}],"collection":[{"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66"}],"version-history":[{"count":3,"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=\/wp\/v2\/posts\/66\/revisions"}],"predecessor-version":[{"id":93,"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=\/wp\/v2\/posts\/66\/revisions\/93"}],"wp:attachment":[{"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=66"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanghanwen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}