{"id":774,"date":"2016-11-05T11:40:00","date_gmt":"2016-11-05T03:40:00","guid":{"rendered":"http:\/\/note.systw.net\/note\/?p=774"},"modified":"2023-11-05T11:53:26","modified_gmt":"2023-11-05T03:53:26","slug":"tcp%e9%81%8b%e4%bd%9c%e6%a9%9f%e5%88%b6","status":"publish","type":"post","link":"https:\/\/systw.net\/note\/archives\/774","title":{"rendered":"TCP\u904b\u4f5c\u6a5f\u5236"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>TCP\u9023\u7dda\u7ba1\u7406<\/strong><\/h2>\n\n\n\n<p><strong>Three-way handshake<\/strong><br>TCP\u5efa\u7acb\u9023\u7d50\u7528\u7684\u65b9\u5f0f<br>\u70ba\u975e\u540c\u6b65\u6a5f\u5236,\u56e0\u70ba\u5e8f\u865f\u672a\u8207\u7db2\u8def\u7684\u6574\u9ad4\u6642\u8108\u540c\u6b65<br>\u9023\u7d50\u6b65\u9a5f:<br>\u30001,a\u8981\u6c42\u9023\u7dda\u9001syn<br>\u30002,b\u6536\u5230\u5f8c\u56deack\u53casyn<br>\u30003,a\u5728\u56deack \u9023\u7dda\u6210\u529f<br>ps:<br>\u82e5\u9001\u51fasyn\u5230\u5c0d\u65b9\u7279\u5b9aport,\u4f46\u5c0d\u65b9\u4e3b\u6a5f\u662f\u56de\u8986rst,\u8868\u793a\u4e3b\u6a5f\u7684\u9019\u500bport\u4e0d\u662flisten\u72c0\u614b<br>\u82e5\u9001\u51fasyn\u5230\u5c0d\u65b9\u7279\u5b9aport,\u4f46\u5b8c\u5168\u6c92\u6709\u56de\u61c9,\u53ef\u80fd\u662f\u88ab\u9632\u706b\u7246\u64cb\u4f4f<\/p>\n\n\n\n<p><br><strong>Four-way handshake<\/strong><br>TCP\u91cb\u653e\u9023\u7d50\u6b65\u9a5f<br>\u30001.a\u9001\u51fafin<br>\u30002.b\u6536\u5230\u5f8c\u56deack<br>\u30003.b\u5728\u56defin<br>\u30004.a\u6536\u5230\u5f8c\u56deack<\/p>\n\n\n\n<p><br><strong>Client\u901a\u5e38\u6703\u7d93\u6b77\u7684\u72c0\u614b<\/strong><br>SYN_SENT: client\u9001\u51fasyn\u4e4b\u5f8c\u7684\u72c0\u614b<br>ESTABLISHED: client\u6536\u5230syn ack\u4e26\u9001\u51faack\u5f8c\u7684\u72c0\u614b<br>FIN_WAIT1: client\u5728ESTABLISHED\u6642,\u9001\u51fafin\u4e4b\u5f8c\u7684\u72c0\u614b, \u6b64\u72c0\u614b\u5728\u7b49\u5f85server\u56de\u8986ack<br>FIN_WAIT2: client\u5728FIN_WAIT1\u6642,\u6536\u5230ack\u5f8c\u7684\u72c0\u614b, \u6b64\u72c0\u614b\u5728\u7b49\u5f85server\u56de\u8986fin<br>TIME_WAIT: client\u5728FIN_WAIT2\u6642,\u6536\u5230fin\u4e26\u9001\u51faack\u7684\u72c0\u614b,\u5728\u7b49\u5f8530\u79d2\u5f8c\u6703\u8b8a\u6210CLOSED\u72c0\u614b<\/p>\n\n\n\n<p><strong>Server\u901a\u5e38\u6703\u7d93\u6b77\u7684\u72c0\u614b<\/strong><br>Listen: server\u5efa\u7acbsocket\u5f8c\u7684\u72c0\u614b<br>SYN_RCVD: server\u6536\u5230syn,\u4e26\u9001\u51fasyn ack\u5f8c\u7684\u72c0\u614b<br>ESTABLISHED: Sserver\u6536\u5230ack\u5f8c\u7684\u72c0\u614b<br>CLOSE_WAIT: server\u5728ESTABLISHED\u6642,\u6536\u5230fin\u4e26\u9001\u51faack\u5f8c\u7684\u72c0\u614b<br>LAST_ACK: server\u5728CLOSE_WAIT\u6642,\u9001\u51fafin\u5f8c\u7684\u72c0\u614b, \u6b64\u72c0\u614b\u5728\u7b49\u5f85ack\u5f8c\u5c31\u6703\u8b8a\u6210CLOSED\u72c0\u614b<\/p>\n\n\n\n<p>&#8230;<\/p>\n\n\n\n<p><strong>TCP\u9001\u8cc7\u6599\u904e\u7a0b<\/strong><br>\u8a2dwindow size\u70ba3,\u50b3\u9001\u7aef\u90013\u500b\u5c01\u5305,\u5206\u5225\u70ba\u5e8f\u865f0,1,2\u5230\u63a5\u6536\u7aef<br>\u82e5\u63a5\u6536\u7aef\u6536\u52303\u500b\u5c01\u5305\u5247\uff1a<br>\u30001\u63a5\u6536\u7aef\u50b3\u56deack\u8a0a\u865f\u8868\u793a\u5df1\u63a5\u6536,ack\u8a0a\u865f\u6703\u6307\u5b9a\u50b3\u9001\u7aef\u4e0b\u4e00\u500b\u50b3\u9001\u4f86\u7684\u5e8f\u865f\u70ba3<br>\u30002\u50b3\u9001\u7aef\u6536\u5230ack\u5f8c,\u50b3\u9001\u5e8f\u865f3,4,5\u7684\u5c01\u5305\u7d66\u63a5\u6536\u7aef<br>\u82e5\u63a5\u6536\u7aef\u672a\u6536\u5230\u5247\uff1a<br>\u30001\u63a5\u6536\u7aef\u7121\u56de\u61c9<br>\u30002\u50b3\u9001\u7aef\u672a\u6536\u5230ack\u5247\u903e\u6642,\u91cd\u9001\u5e8f\u865f0,1,2\u7684\u5c01\u5305\u7d66\u63a5\u6536\u7aef<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\u50b3\u9001\u7aef&nbsp;<\/td><td>&nbsp;\u63a5\u6536\u7aef&nbsp;<\/td><\/tr><tr><td>\u50b3\u9001\u524d\u5148\u5efa\u7acbthree-way handshakeflag=syn<br>seq=17700000 ,ack=0 ,len=0<\/td><td>&nbsp;<\/td><\/tr><tr><td>&nbsp;<\/td><td>flag=syn,ack<br>seq=82900000 ,ack=17700001 ,len=0&nbsp;&nbsp;<\/td><\/tr><tr><td>flag=ack<br>seq=17700001 ,ack=82900001 ,len=0<br>ps:<br>\u7d50\u675fthree-way handshake\u5f8c,\u958b\u59cb\u9001\u8cc7\u6599 &nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>seq=17700001 ,ack=82900001 ,len=72byte<\/td><td>&nbsp;<\/td><\/tr><tr><td>&nbsp;<\/td><td>seq=82900001 ,ack=17700073 ,len=60<br>ps:ack=\u4e0a\u4e00\u7b46\u50b3\u9001\u7aefseq+\u50b3\u9001\u7aeflen&nbsp;<\/td><\/tr><tr><td>seq=17700073 ,ack=82900061 ,len=50byte<br>ps:seq=\u4e0a\u4e00\u7b46\u50b3\u9001\u7aefack<\/td><td>&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>ps:<br>\u6b64\u6a5f\u5236\u4e5f\u7a31\u70bapiggybacking(\u642d\u9806\u98a8\u8eca)<br>\u56de\u61c9\u662f\u85c9\u53cd\u5411\u6d41\u91cf\u9001\u56de\u50b3\u9001\u7aef,\u53ef\u6e1b\u8f15\u4ea4\u901a\u91cf&nbsp;<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u63a7\u5236\u8cc7\u6599\u50b3\u8f38<\/strong><\/h2>\n\n\n\n<p><strong>Sliding window<\/strong><br>TCP\u63a7\u5236\u8cc7\u6599\u50b3\u8f38\u7528\u7684\u6a5f\u5236<br>window size(sliding windows\u7684\u5927\u5c0f)\u5728\u9023\u7dda\u671f\u9593\u6703\u4e0d\u65b7\u6539\u8b8a,\u8d8a\u5927\u8868\u793a\u4e00\u6b21\u9001\u51fa\u7684\u8cc7\u6599\u8d8a\u591a<br>window size=min(cwnd,rwnd) ,\u8cc7\u6599\u50b3\u9001\u6642\u4e0d\u6703\u8d85\u904e,\u64c1\u585e\u63a7\u5236\u7528\u7684cwnd\u548c\u6d41\u91cf\u63a7\u5236\u7528\u7684rwnd<br>ps:<br>\u4e00\u822c\u60c5\u6cc1\u4e0bcwnd\u6703\u5c0f\u65bcrwnd,\u6240\u4ee5\u901a\u5e38cwnd=windows size<\/p>\n\n\n\n<p>&#8230;<\/p>\n\n\n\n<p><strong>\u6d41\u91cf\u63a7\u5236<\/strong><br>\u76ee\u7684:\u907f\u514d\u50b3\u9001\u592a\u591a\u8cc7\u6599\u7d66\u63a5\u6536\u7aef,\u9020\u6210\u63a5\u6536\u7aef\u7de9\u885d\u5340\u8cc7\u6599\u6ea2\u4f4d<br>\u5728TCP\u4e2d,\u7531\u63a5\u6536\u7aef\u505a\u6d41\u91cf\u63a7\u5236<\/p>\n\n\n\n<p><strong>rwnd(receive window,\u63a5\u6536\u7a97\u683c)<\/strong>:<br>\u63a5\u6536\u7aef\u53ef\u7528\u7684\u7a7a\u9593<br>\u63a5\u6536\u7aef\u5728\u56de\u8986\u50b3\u9001\u7aef\u6642,\u6703\u5c07rwnd\u653e\u5165tcp header\u5167\u7684receive windows\u6b04\u4f4d,\u4ee5\u544a\u77e5\u50b3\u9001\u7aef\u53ef\u50b3\u9001\u7684\u4e0a\u9650<\/p>\n\n\n\n<p><br>&#8230;<\/p>\n\n\n\n<p><strong>\u64c1\u585e\u63a7\u5236<\/strong><br>\u76ee\u7684:\u907f\u514d\u7db2\u8def\u64c1\u585e\u6642\u9084\u7e7c\u7e8c\u50b3\u9001\u8cc7\u6599<br>\u5728TCP\u4e2d,\u7531\u50b3\u9001\u7aef\u505a\u64c1\u585e\u63a7\u5236<br>ps:<br>\u4ee5\u4e0b\u4f7f\u7528TCP Reno\u7248\u672c\u70ba\u4e3b<\/p>\n\n\n\n<p>ps:<br>\u64c1\u585e\u539f\u56e0<br>1\u96fb\u8166\u7522\u751f\u7684\u8cc7\u6599\u91cf\u6bd4\u7db2\u8def\u80fd\u5920\u50b3\u8f38\u7684\u8cc7\u6599\u91cf\u5927<br>2\u591a\u96fb\u8166\u540c\u6642\u50b3\u9001\u8cc7\u6599\u5230\u76f8\u540c\u76ee\u7684\u5730\u6642,\u76ee\u7684\u5730\u53ef\u80fd\u767c\u751f\u64c1\u585e<\/p>\n\n\n\n<p><strong>AIMD(additive-increase,multiplicative-decrease,\u7d2f\u9032\u905e\u589e,\u500d\u6578\u524a\u6e1b)<\/strong><br>TCP\u64c1\u585e\u63a7\u5236\u7684\u539f\u5247<br>cwnd\u6703\u6839\u64da\u6b64\u539f\u5247\u8abf\u6574<\/p>\n\n\n\n<p><strong>cwnd(congestion windows,\u64c1\u585e\u7a97\u683c)<\/strong><br>\u50b3\u9001\u7aef\u7528\u4f86\u63a7\u5236\u64c1\u585e\u7684\u8b8a\u6578<br>\u7531\u4e09\u5927\u72c0\u614b\u6c7a\u5b9a\u8b8a\u6578\u503c<\/p>\n\n\n\n<p><strong>\u4e09\u5927\u72c0\u614b<\/strong><br>slow-start(\u7de9\u555f\u52d5):rwnd\u4e00\u958b\u59cb\u70ba1MSS,\u6bcf\u7d93\u904e\u4e00\u6b21RTT\u5c31\u4ee5\u6307\u6578\u65b9\u5f0f\u589e\u52a0\u4e00\u6b21, \u4f8b\u5982,1,2,4,8,..\u6210\u9577,<br>congestion avoid(\u64c1\u585e\u8ff4\u907f):\u6bcf\u7d93\u904e\u4e00\u6b21RTT\u5c31\u4ee5\u7dda\u6027\u65b9\u5f0f\u589e\u52a0\u4e00\u6b21,\u4f8b\u59829,10,11,..\u6210\u9577<br>fast recovery(\u5feb\u901f\u5fa9\u539f):\u6536\u5230\u591a\u5c11\u91cd\u8986ack,cwnd\u5c31\u52a0\u591a\u5c11<\/p>\n\n\n\n<p><strong>\u72c0\u614b\u9593\u8f49\u79fb<\/strong><br>\u50b3\u9001\u7aef\u767c\u73fecwnd\u8d85\u904essthresh\u5f8c<br>\u3000\u9032\u5165congestion avoid\u72c0\u614b<br>\u50b3\u9001\u7aef\u82e5\u767c\u73fetimeout,<br>\u3000ssthresh\u6703\u8a2d\u70balast rwnd*0.5,<br>\u3000cwnd\u6703\u8a2d\u70ba1MSS,<br>\u3000\u9032\u5165slow-start\u72c0\u614b<br>\u50b3\u9001\u7aef\u82e5\u767c\u73feDuplicated Ack(\u91cd\u89863\u6b21ack),<br>\u3000ssthresh\u6703\u8a2d\u70balast rwnd*0.5,<br>\u3000cwnd\u6703\u8a2d\u70balast rwnd*0.5+3MSS,<br>\u3000\u9032\u5165fast recovery\u72c0\u614b<br>ps:<br>ssthresh(slow start threshold,\u7de9\u555f\u52d5\u9580\u6abb):\u555f\u59cb64kb<br>ps:<br>TCP Tahoe\u7248,\u4e0d\u8ad6\u662ftimeout\u6216\u91cd\u89863\u6b21ack,rwnd\u90fd\u6703\u8a2d\u70ba1<br>fast recovery\u662f\u5728TCP reno\u7248\u52a0\u5165<\/p>\n\n\n\n<p>ps:<br>\u5047\u8a2d 1MSS=4kbit (500byte) ; RTT=0.2sec (200ms)<br>\u5247\u6bcf\u79d2\u7d0420kbps<\/p>\n\n\n\n<p>ps:<br>\u64c1\u585e\u63a7\u5236\u4e09\u5927\u8b70\u984c<br>\u9650\u901f:How does a TCP sender reduces its send rate<br>\u64c1\u585e\u5224\u65b7:How does a TCP sender perceive that there is congestion<br>\u52d5\u614b\u8abf\u6574\u901f\u7387:What algorithm should the sender use to change its send rate as a function of perceived end-to-end congestion<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u932f\u8aa4\u56de\u5fa9\u6a5f\u5236<\/strong><\/h2>\n\n\n\n<p>TCP\u4e5f\u7a31selective acknowledgement(\u9078\u64c7\u6027\u78ba\u8a8d)\u6a5f\u5236<br>\u4f7f\u7528GBN\u548cSR\u5354\u5b9a\u7684\u6df7\u5408<\/p>\n\n\n\n<p><br><strong>\u5e38\u898b\u7684pipelining(\u7ba1\u7dda\u5316)\u932f\u8aa4\u56de\u5fa9\u65b9\u6cd5<\/strong><br>GBN(go back n):\u91cd\u9001\u63a5\u6536\u7aef\u672a\u6536\u5230\u8207\u5df1\u6536\u5230\u7684\u6240\u6709segment<br>SR(select repeat,\u9078\u64c7\u6027\u91cd\u8907):\u53ea\u91cd\u9001\u63a5\u6536\u7aef\u672a\u6536\u5230\u7684segment<br>refer<br>https:\/\/blog.json.tw\/introduction-to-computer-network-gbn-sr-tcp-compare<\/p>\n\n\n\n<p><strong>Go-back N<\/strong><br>\u50b3\u9001\u7aef\u9023\u7e8c\u9001N\u500bframe\u7d66\u63a5\u6536\u7aef<br>\u82e5\u6210\u529f\u5247\u7e7c\u7e8c\u9001\uff0c\u82e5\u63a5\u6536\u7aef\u767c\u751f\u5931\u6557\u5247\u8981\u6c42\u50b3\u9001\u7aef\u91cd\u50b3\u5168\u90e8frame<br>\u512a\u9ede\uff1a\u6bd4stop-and-wait\u5feb<\/p>\n\n\n\n<p><strong>Select Repeat \u3000<\/strong><br>\u50b3\u9001\u7aef\u9023\u7e8c\u50b3\u591a\u500bframe\u7d66\u63a5\u6536\u7aef\uff0c<br>\u82e5\u6210\u529f\u5247\u7e7c\u7e8c\u9001,\u82e5\u63a5\u6536\u7aef\u767c\u751f\u5931\u6557\u5247\u8981\u6c42\u50b3\u9001\u7aef\u91cd\u50b3\u6709\u932f\u8aa4\u7684frame<br>\u512a\u9ede\uff1a\u6bd4stop-and-wait\u5feb<br>\u7f3a\u9ede\uff1a\u5169\u7aef\u9808\u5927\u91cfbuffer\u5132\u5b58\u50b3\u9001\u5f8c\u548c\u672a\u50b3\u9001\u8cc7\u6599<\/p>\n\n\n\n<p>ps:<br>stop-and-wait<br>\u50b3\u9001\u7aef\u6bcf\u9001\u51fa1\u500bframe\u5f8c,\u9808\u7b49\u5f85\u63a5\u6536\u7aef\u662f\u5426\u6709\u6210\u529f\u63a5\u6536<br>\u82e5\u6210\u529f\u5247\u7e7c\u7e8c\u9001,\u82e5\u63a5\u6536\u7aef\u767c\u751f\u5931\u6557\u5247\u8981\u6c42\u50b3\u9001\u7aef\u91cd\u50b3\u8a72frame<br>\u7f3a\u9ede\uff1a\u50b3\u9001\u7aef\u8207\u63a5\u6536\u7aef\u7b49\u5f85\u6642\u9593\u8f03\u9577<br>\u512a\u9ede\uff1a\u8655\u7406\u7c21\u55ae\uff0c\u4e0d\u9700\u8981\u5927\u91cfbuffers<br>\u61c9\u7528\uff1a\u9069\u5408\u534a\u96d9\u5de5,\u50b3\u64ad\u5ef6\u9072\u6642\u9593\u8f03\u5c0f\u7b49\u8fd1\u8ddd\u96e2\u901a\u8a0a<\/p>\n\n\n\n<p>&#8230;&nbsp;<\/p>\n\n\n\n<p><strong>4\u7a2e\u5e38\u898b\u932f\u8aa4\u60c5\u6cc1<\/strong><br><strong>1.ack\u903e\u6642<\/strong><br>\u50b3\u9001\u7aef\u9001\u51fasegment\u5f8c<br>\u5728timeout interval\u672a\u6536\u5230\u5c0d\u65b9ack<br>\u52d5\u4f5c:\u50b3\u9001\u7aef\u5728\u9001\u4e00\u6b21\u76f8\u540csegment<br><strong>2.\u6536\u5230\u4e0d\u540c\u6642\u9593\u56de\u4f86\u7684ack<\/strong><br>\u50b3\u9001\u7aef\u9001\u51fasegment\u5f8c,\u6536\u5230\u4ee5\u4e0b2\u7a2eack<br>\u5728\u7b2c2\u6b21timeout interval\u5167,\u6536\u5230\u7b2c\u4e00\u6b21\u9001\u51fasegment\u6240\u56de\u8986\u7684ack,<br>\u548c\u7b2c2\u6b21timeout interval\u5f8c,\u6536\u5230\u7b2c\u4e8c\u6b21\u91cd\u9001segment\u6240\u6536\u5230\u7684ack,(\u56e0\u7b2c\u4e00\u6b21\u903e\u6642\u6703\u91cd\u9001)<br>\u52d5\u4f5c:\u50b3\u9001\u7aef\u5728\u7b2c2\u6b21timeout interval\u5167\u6536\u5230ack,\u5c31\u4e0d\u6703\u8655\u7406\u4e4b\u5f8c\u7684ack<br><strong>3.\u53ea\u6536\u5230\u6700\u5f8c\u4e00\u500back<\/strong><br>\u50b3\u9001\u7aef\u9001\u51fa2\u500bsegment<br>\u5728timeout interval\u5167\u53ea\u6536\u5230\u6700\u5f8c\u4e00\u500bsegment\u56de\u8986\u7684ack<br>\u52d5\u4f5c: cumulative acknowledgement\u6a5f\u5236<br><strong>4,\u6536\u5230duplicate ack&nbsp;<\/strong><br>\u50b3\u9001\u7aef\u767c\u51fasegment, seq1~5<br>\u63a5\u6536\u7aef\u53ea\u6709seq2\u6c92\u6536\u5230,\u5075\u6e2c\u5230\u7e2b\u9699,\u63a5\u6536\u7aef\u56de\u8986duplicate ack<br>\u52d5\u4f5c: \u4f7f\u7528fast retransmit\u6a5f\u5236<\/p>\n\n\n\n<p><br><strong>cumulative acknowledgement(\u7d2f\u7a4d\u5f0f\u78ba\u8a8d)<\/strong><br>\u63a5\u6536\u7aef\u53ea\u6703\u8a18\u9304\u9023\u7e8c\u63a5\u6536\u60c5\u6cc1\u7684\u6700\u5f8c\u4e00\u500back;\u63a5\u6536\u7aef\u4e00\u6b21\u56de\u8986\u6700\u591a\u53ea\u80fd\u78ba\u8a8d\u4e32\u6d41\u4e2d\u7b2c\u4e00\u500b\u907a\u5931\u7684\u4f4d\u5143\u7d44<br>ex:<br>\u50b3\u9001\u7aef\u9001\u51faseq20(2byte),seq22(2byte)\u7684segment,<br>\u82e5\u63a5\u6536\u7aef\u53ea\u6536\u5230seq20,<br>\u3000\u8a18\u9304ack22,\u4e26\u50b3\u56deack22<br>\u82e5\u63a5\u6536\u7aef\u6536\u5230seq22,<br>\u3000\u8a18\u9304ack24,\u50b3\u56deack24<br>\u3000\u904e\u4e00\u9663\u5b50\u53c8\u6536\u5230seq20,\u5c0f\u65bc\u8a18\u9304ack24,\u50b3\u56deack24&nbsp;<br>\u6b64\u6a5f\u5236\u53ef\u907f\u514d\u50b3\u9001\u7aef\u5c07\u4e4b\u524d\u7684segment\u91cd\u9001:&nbsp;<br>\u3000\u63a5\u6536\u7aef\u6536\u5230\u591a\u500bsegment\u6642\u6703\u56de\u8986\u591a\u500back<br>\u3000\u50b3\u9001\u7aef\u5728timeout interval\u6536\u5230\u591a\u500back\u4e2d, \u6700\u5927\u7684ack\u7de8\u865f\u4ee3\u8868\u6b64\u7de8\u865f\u4e4b\u524d\u7684segment\u90fd\u5df1\u5230\u63a5\u6536\u7aef<\/p>\n\n\n\n<p><strong>duplicate ack(\u91cd\u8986ack)<\/strong><br>\u63a5\u6536\u7aef\u5075\u6e2c\u5230\u7e2b\u9699\u6642,\u6703\u767c\u51fa3\u6b21\u4e00\u6a23\u7684ack<br>ack\u6703\u8981\u6c42\u91cd\u9001\u672a\u5230\u9054\u7684segment<\/p>\n\n\n\n<p><strong>fast retransmit(\u5feb\u901f\u91cd\u9001)<\/strong><br>\u50b3\u9001\u7aef\u6536\u5230duplicate ack\u7684\u56de\u61c9\u52d5\u4f5c<br>\u6b64\u52d5\u4f5c\u6703\u5728\u5340\u6bb5\u7684timeout\u524d\u7acb\u523b\u91cd\u9001duplicate ack\u8981\u6c42\u7684segment<\/p>\n\n\n\n<p><strong>\u767c\u751ftimeout<\/strong><br>\u91cd\u9001\u64c1\u6709\u6700\u5c0f\u5e8f\u865f\u7684\u672a\u7d93\u78ba\u8a8d\u5340\u6bb5<br>\u5c07timeoutinterval\u8a2d\u70ba2\u500d\u9577<br>ps:<br>\u82e5\u4e4b\u5f8c\u6536\u5230ack, timeoutinterval\u9084\u539f\u9810\u8a2d\u503c<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>TCP\u8a08\u6642\u5668<\/strong><\/h2>\n\n\n\n<p><strong>retransmission timer(\u91cd\u50b3\u8a08\u6642\u5668)<\/strong>:\u5927\u90e8\u4efdTCP\u5be6\u505a,\u7528\u4f86\u78ba\u8a8d\u5c0d\u65b9\u63a5\u6536\u7121\u8aa4,\u82e5\u8d85\u904eTimeoutInterval,\u6703\u91cd\u8a2d\u8a08\u6642\u5668\u4e26\u91cd\u9001segment<br><strong>persistence timer(\u6301\u7e8c\u8a08\u6642\u5668)<\/strong>:\u8a08\u6642\u7d50\u675f\u6703\u9001\u63a2\u6e2c\u5c01\u5305\u7d66\u63a5\u6536\u7aef\u53d6\u8996\u7a97\u5927\u5c0f,\u56de\u7b49\u5f85\u8a0a\u606f\u5247\u52a0\u500d\u8a08\u6642,\u76f4\u5230\u8996\u7a97\u91cd\u958b,\u8a08\u7b97ack\u7528<br><strong>kepalive timer(\u4fdd\u6301\u6d3b\u8457\u8a08\u6642\u5668)<\/strong>:\u4e00\u6bb5\u6642\u9593\u9592\u7f6e\u7d50\u675f\u5f8c\u6aa2\u67e5\u53e6\u4e00\u7aef\u662f\u5426\u9084\u6d3b\u52d5,\u6bcf75\u79d2\u4e00\u6b21,\u517110\u6b21,\u7121\u56de\u61c9\u5247\u65b7\u7dda<br><strong>2MSL\/timewait timer(\u6642\u9593\u7b49\u5f85\u8a08\u6642\u5668)<\/strong>:\u95dc\u9589\u9023\u7d50\u6642\u7684time wait\u72c0\u614b,\u4e1f\u68c4\u91cd\u8907\u4e4bFIN segment.\u6642\u9593\u7d04\u70ba\u5c01\u5305\u5b58\u6d3b\u671f\u5169\u500d<\/p>\n\n\n\n<p>ps:<br>RTT(Round Trip Time):\u5c01\u5305\u5f9e\u4f86\u6e90\u7aef\u9001\u9054\u76ee\u7684\u7aef\uff0c\u518d\u7531\u76ee\u7684\u7aef\u56de\u61c9\u56de\u4f86\u7684\u9019\u6bb5\u5ef6\u9072\u6642\u9593<\/p>\n\n\n\n<p><strong>TimeoutInterval(\u91cd\u9001\u903e\u6642\u9593\u9694)<\/strong><br>\u516c\u5f0f: timeoutinterval=estimatedRTT+4*devRTT<br>timeoutinterval\u521d\u59cb\u503c\u5efa\u8b70\u8a2d\u70ba1<br>\u7576\u6709\u65b0\u7684estimatedRTT\u7522\u751f\u6642,timeoutinterval\u8981\u5728\u91cd\u7b97\u4e00\u6b21<\/p>\n\n\n\n<p><strong>estimatedRTT<\/strong><br>\u53d6\u5f97\u65b0\u7684sampleRTT\u5f8c\u6703\u66f4\u65b0<br>\u4f7f\u7528EWMA(exponential weighted moving average,\u6307\u6578\u52a0\u6b0a\u79fb\u52d5\u5e73\u5747)<br>\u516c\u5f0f:estimatedRTT=(1-a)*estimatedRTT+(a)*sampleRTT, \u800ca\u7684\u5efa\u8b70\u503c\u70ba0.125<br>ps:<br>sampleRTT\u7684\u8b8a\u52d5\u6703\u88abestimatedRTT\u5e73\u6ed1\u5316<\/p>\n\n\n\n<p><strong>sampleRTT<\/strong><br>TCP\u5728\u6240\u6709\u9001\u51fa\u4f46\u672a\u7d93\u78ba\u8a8d\u7684segment\u4e2d,\u62bd\u6a23\u5176\u4e2d\u4e00\u500bsegment\u7684RTT<br>ps:\u4e0d\u5305\u542b\u91cd\u9001\u7684segment<\/p>\n\n\n\n<p><strong>devRTT<\/strong><br>\u4f30\u8a08sampleRTT\u548cestimatedRTT\u504f\u5dee\u591a\u5c11<br>\u516c\u5f0f:devRTT=(1-b)*devRTT+b*|sampleRTT-estimatedRTT| ,\u800cb\u7684\u5efa\u8b70\u503c\u70ba0.25<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TCP\u9023\u7dda\u7ba1\u7406 Three-way handshakeTCP &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[25],"tags":[],"class_list":["post-774","post","type-post","status-publish","format-standard","hentry","category-osi-layer3"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/774","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/comments?post=774"}],"version-history":[{"count":0,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/774\/revisions"}],"wp:attachment":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/media?parent=774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/categories?post=774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/tags?post=774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}