{"id":79546,"date":"2026-03-02T13:17:30","date_gmt":"2026-03-02T05:17:30","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/79546.html"},"modified":"2026-03-02T13:17:30","modified_gmt":"2026-03-02T05:17:30","slug":"%e3%80%90p2p%e9%9f%b3%e8%a7%86%e9%a2%91%e9%80%9a%e4%bf%a1%e7%b3%bb%e7%bb%9f%e3%80%91%e4%bf%a1%e4%bb%a4%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b9%8btcp%e4%b8%8equic%e9%80%89%e5%9e%8b%e5%af%b9%e6%af%94","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/79546.html","title":{"rendered":"\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4"},"content":{"rendered":"<h3>\u7cfb\u5217\u6587\u7ae0&#xff1a;<\/h3>\n<p>\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u9879\u76ee\u5b9e\u73b0\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u547c\u53eb\u5b8c\u6574\u65f6\u5e8f\u56fe \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4bSTUN\u670d\u52a1\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4bTURN \u670d\u52a1\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC \u4e4b SDP \u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC \u4e4b ICE \u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC ICE \u5019\u9009\u7c7b\u578b\u8be6\u89e3&#xff1a;\u5bf9\u7b49\u53cd\u5c04\u5019\u9009\u8005&#xff08;Peer Reflexive Candidate&#xff09; \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u4fe1\u4ee4\u670d\u52a1\u5668\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b WebRTC Android\u5e73\u53f0 aar \u4e0b\u8f7d<\/p>\n<h3>\u4e00\u3001\u4ec0\u4e48\u662fQUIC&#xff1f;<\/h3>\n<p>QUIC&#xff08;Quick UDP Internet Connections&#xff0c;\u5feb\u901fUDP\u4e92\u8054\u7f51\u8fde\u63a5&#xff09;\u662fGoogle\u57282012\u5e74\u5f00\u53d1\u7684\u4e00\u79cd\u4f20\u8f93\u5c42\u534f\u8bae&#xff0c;\u540e\u6765\u88abIETF\u6807\u51c6\u5316\u4e3aHTTP\/3\u7684\u57fa\u7840\u4f20\u8f93\u534f\u8bae\u3002<\/p>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u534f\u8bae\u6808\u5bf9\u6bd4                                \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502   \u4f20\u7edf\u65b9\u6848&#xff1a;                                                 \u2502<br \/>\n\u2502   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                                               \u2502<br \/>\n\u2502   \u2502 HTTP\/2  \u2502                                               \u2502<br \/>\n\u2502   \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524                                               \u2502<br \/>\n\u2502   \u2502  TLS    \u2502  \u2190 \u52a0\u5bc6\u5c42                                     \u2502<br \/>\n\u2502   \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524                                               \u2502<br \/>\n\u2502   \u2502  TCP    \u2502  \u2190 \u4f20\u8f93\u5c42                                     \u2502<br \/>\n\u2502   \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524                                               \u2502<br \/>\n\u2502   \u2502   IP    \u2502                                               \u2502<br \/>\n\u2502   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                                               \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502   QUIC\u65b9\u6848&#xff1a;                                                 \u2502<br \/>\n\u2502   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                                               \u2502<br \/>\n\u2502   \u2502 HTTP\/3  \u2502                                               \u2502<br \/>\n\u2502   \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524                                               \u2502<br \/>\n\u2502   \u2502  QUIC   \u2502  \u2190 \u96c6\u6210\u4e86TLS 1.3 &#043; \u53ef\u9760\u4f20\u8f93                   \u2502<br \/>\n\u2502   \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524                                               \u2502<br \/>\n\u2502   \u2502   UDP   \u2502  \u2190 \u4ec5\u4f5c\u4e3a\u4f20\u8f93\u8f7d\u4f53                              \u2502<br \/>\n\u2502   \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524                                               \u2502<br \/>\n\u2502   \u2502   IP    \u2502                                               \u2502<br \/>\n\u2502   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                                               \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<h4>\u901a\u4fd7\u7406\u89e3<\/h4>\n<p>\u628aQUIC\u60f3\u8c61\u6210&#034;\u7a7f\u7740UDP\u5916\u8863\u7684\u8d85\u7ea7TCP&#034;&#xff1a;<\/p>\n<ul>\n<li>TCP \u50cf\u662f\u4e00\u6761\u5355\u8f66\u9053\u516c\u8def&#xff0c;\u6240\u6709\u8f66\u90fd\u8981\u6392\u961f&#xff0c;\u524d\u9762\u51fa\u4e8b\u6545\u540e\u9762\u5168\u5835<\/li>\n<li>QUIC \u50cf\u662f\u591a\u8f66\u9053\u9ad8\u901f\u516c\u8def&#xff0c;\u6bcf\u6761\u8f66\u9053\u72ec\u7acb&#xff0c;\u4e00\u6761\u5835\u4e86\u4e0d\u5f71\u54cd\u5176\u4ed6\u8f66\u9053<\/li>\n<li>UDP \u53ea\u662fQUIC\u7528\u6765&#034;\u4e0a\u8def&#034;\u7684\u5de5\u5177&#xff0c;\u771f\u6b63\u7684\u667a\u80fd\u63a7\u5236\u90fd\u5728QUIC\u81ea\u5df1\u624b\u91cc<\/li>\n<\/ul>\n<hr \/>\n<h3>\u4e8c\u3001\u4e3a\u4ec0\u4e48\u9700\u8981QUIC&#xff1f;<\/h3>\n<h4>2.1 TCP\u7684\u95ee\u9898<\/h4>\n<h5>\u95ee\u98981&#xff1a;\u961f\u5934\u963b\u585e&#xff08;Head-of-Line Blocking&#xff09;<\/h5>\n<p>TCP\u662f\u5355\u6d41\u4f20\u8f93&#xff0c;\u4e00\u4e2a\u4e22\u5305\u4f1a\u963b\u585e\u6240\u6709\u540e\u7eed\u6570\u636e<\/p>\n<p>\u250c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 1  \u2502 2  \u2502 3  \u2502 4  \u2502 5  \u2502 6  \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2518<br \/>\n              \u2191<br \/>\n           \u4e22\u5305&#xff01;<\/p>\n<p>\u5373\u4f7f4\u30015\u30016\u5df2\u7ecf\u5230\u8fbe&#xff0c;\u4e5f\u8981\u7b493\u91cd\u4f20\u540e\u624d\u80fd\u5904\u7406<br \/>\n\u6574\u4e2a\u8fde\u63a5\u88ab\u963b\u585e&#xff01;<\/p>\n<p>\u751f\u6d3b\u7c7b\u6bd4&#xff1a; \u5c31\u50cf\u8d85\u5e02\u6392\u961f\u7ed3\u8d26&#xff0c;\u524d\u9762\u4e00\u4e2a\u4eba\u4ed8\u6b3e\u51fa\u95ee\u9898&#xff0c;\u540e\u9762\u6240\u6709\u4eba\u90fd\u5f97\u7b49\u7740\u3002<\/p>\n<h5>\u95ee\u98982&#xff1a;\u8fde\u63a5\u5efa\u7acb\u6162<\/h5>\n<p>TCP\u4e09\u6b21\u63e1\u624b &#043; TLS\u63e1\u624b &#061; 2-3\u4e2aRTT<\/p>\n<p>\u5ba2\u6237\u7aef                    \u670d\u52a1\u7aef<br \/>\n   \u2502                        \u2502<br \/>\n   \u2502\u2500\u2500\u2500\u2500\u2500\u2500 SYN \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192\u2502  RTT 1<br \/>\n   \u2502\u2190\u2500\u2500\u2500\u2500\u2500 SYN&#043;ACK \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502<br \/>\n   \u2502\u2500\u2500\u2500\u2500\u2500\u2500 ACK \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192\u2502  RTT 2 (TCP\u5efa\u7acb\u5b8c\u6210)<br \/>\n   \u2502\u2500\u2500\u2500\u2500\u2500\u2500 ClientHello \u2500\u2500\u2500\u2500\u2192\u2502<br \/>\n   \u2502\u2190\u2500\u2500\u2500\u2500\u2500 ServerHello \u2500\u2500\u2500\u2500\u2500\u2502  RTT 3 (TLS\u63e1\u624b)<br \/>\n   \u2502\u2500\u2500\u2500\u2500\u2500\u2500 Finished \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192\u2502<br \/>\n   \u2502                        \u2502<br \/>\n   \u2502   \u7ec8\u4e8e\u53ef\u4ee5\u53d1\u6570\u636e\u4e86&#xff01;     \u2502<\/p>\n<p>\u751f\u6d3b\u7c7b\u6bd4&#xff1a; \u5c31\u50cf\u6253\u7535\u8bdd&#xff0c;\u5148\u62e8\u53f7&#xff08;TCP\u63e1\u624b&#xff09;&#xff0c;\u518d\u9a8c\u8bc1\u8eab\u4efd&#xff08;TLS\u63e1\u624b&#xff09;&#xff0c;\u624d\u80fd\u5f00\u59cb\u8bf4\u8bdd\u3002<\/p>\n<h5>\u95ee\u98983&#xff1a;\u7f51\u7edc\u5207\u6362\u65ad\u8fde<\/h5>\n<p>TCP\u8fde\u63a5\u7531\u56db\u5143\u7ec4\u6807\u8bc6&#xff1a;(\u6e90IP, \u6e90\u7aef\u53e3, \u76ee\u7684IP, \u76ee\u7684\u7aef\u53e3)<\/p>\n<p>WiFi \u2192 4G\u5207\u6362\u65f6&#xff0c;IP\u53d8\u5316 \u2192 TCP\u8fde\u63a5\u65ad\u5f00 \u2192 \u9700\u8981\u91cd\u65b0\u5efa\u7acb\u8fde\u63a5<\/p>\n<p>\u751f\u6d3b\u7c7b\u6bd4&#xff1a; \u5c31\u50cf\u4f60\u642c\u5bb6\u4e86&#xff0c;\u539f\u6765\u7684\u7535\u8bdd\u53f7\u7801\u5c31\u6253\u4e0d\u901a\u4e86&#xff0c;\u9700\u8981\u91cd\u65b0\u529e\u7406\u65b0\u53f7\u7801\u3002<\/p>\n<h4>2.2 QUIC\u5982\u4f55\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    QUIC \u6838\u5fc3\u4f18\u52bf                             \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u2705 \u89e3\u51b3\u961f\u5934\u963b\u585e&#xff1a;\u591a\u8def\u590d\u7528                                   \u2502<br \/>\n\u2502     \u250c\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2510                                \u2502<br \/>\n\u2502     \u2502Stream\u2502 \u2502Stream\u2502 \u2502Stream\u2502  \u72ec\u7acb\u6d41&#xff0c;\u4e92\u4e0d\u963b\u585e            \u2502<br \/>\n\u2502     \u2502  1  \u2502 \u2502  2  \u2502 \u2502  3  \u2502                                \u2502<br \/>\n\u2502     \u2514\u2500\u2500\u252c\u2500\u2500\u2518 \u2514\u2500\u2500\u252c\u2500\u2500\u2518 \u2514\u2500\u2500\u252c\u2500\u2500\u2518                                \u2502<br \/>\n\u2502        \u2502       \u2502       \u2502                                    \u2502<br \/>\n\u2502        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                                    \u2502<br \/>\n\u2502                \u2502                                            \u2502<br \/>\n\u2502         \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2510                                     \u2502<br \/>\n\u2502         \u2502  UDP Socket \u2502                                     \u2502<br \/>\n\u2502         \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                                     \u2502<br \/>\n\u2502     Stream 2\u4e22\u5305\u4e0d\u5f71\u54cdStream 1\u548c3                           \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u2705 \u5feb\u901f\u8fde\u63a5&#xff1a;0-RTT                                         \u2502<br \/>\n\u2502     \u9996\u6b21\u8fde\u63a5&#xff1a;1-RTT                                         \u2502<br \/>\n\u2502     \u540e\u7eed\u8fde\u63a5&#xff1a;0-RTT&#xff08;\u76f4\u63a5\u53d1\u6570\u636e&#xff09;                            \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u2705 \u8fde\u63a5\u8fc1\u79fb&#xff1a;Connection ID                                 \u2502<br \/>\n\u2502     \u8fde\u63a5\u753164\u4f4dID\u6807\u8bc6&#xff0c;\u4e0d\u4f9d\u8d56IP\/\u7aef\u53e3                          \u2502<br \/>\n\u2502     WiFi \u2192 4G\u5207\u6362&#xff0c;\u8fde\u63a5\u4e0d\u65ad                                 \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<hr \/>\n<h3>\u4e09\u3001QUIC\u534f\u8bae\u7ed3\u6784<\/h3>\n<h4>3.1 \u6570\u636e\u5305\u683c\u5f0f<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    QUIC \u6570\u636e\u5305\u7ed3\u6784                           \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502<br \/>\n\u2502  \u2502                    UDP Header (8\u5b57\u8282)                  \u2502  \u2502<br \/>\n\u2502  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u2502<br \/>\n\u2502  \u2502 \u6e90\u7aef\u53e3 (2) \u2502 \u76ee\u7684\u7aef\u53e3 (2) \u2502 \u957f\u5ea6 (2) \u2502 \u6821\u9a8c\u548c (2)      \u2502  \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502<br \/>\n\u2502  \u2502                    QUIC Header                        \u2502  \u2502<br \/>\n\u2502  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u2502<br \/>\n\u2502  \u2502 Form (1bit) \u2502 \u56fa\u5b9a\u4f4d \u2502 \u7248\u672c \u2502 DCID\u957f\u5ea6 \u2502 DCID        \u2502  \u2502<br \/>\n\u2502  \u2502   \u957f\u8fde\u63a5ID  \u2502        \u2502      \u2502         \u2502 \u76ee\u7684\u8fde\u63a5ID   \u2502  \u2502<br \/>\n\u2502  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u2502<br \/>\n\u2502  \u2502 SCID\u957f\u5ea6 \u2502 SCID \u2502 \u5305\u53f7 \u2502 &#8230;                         \u2502  \u2502<br \/>\n\u2502  \u2502          \u2502\u6e90\u8fde\u63a5ID\u2502      \u2502                            \u2502  \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502<br \/>\n\u2502  \u2502                    QUIC Payload                       \u2502  \u2502<br \/>\n\u2502  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u2502<br \/>\n\u2502  \u2502  Frame 1  \u2502  Frame 2  \u2502  Frame 3  \u2502  &#8230;             \u2502  \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<h4>3.2 \u5e27\u7c7b\u578b<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    QUIC Frame \u7c7b\u578b                           \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 Frame\u7c7b\u578b        \u2502 \u8bf4\u660e                                     \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 STREAM           \u2502 \u4f20\u8f93\u5e94\u7528\u6570\u636e                             \u2502<br \/>\n\u2502 ACK              \u2502 \u786e\u8ba4\u6536\u5230\u6570\u636e                             \u2502<br \/>\n\u2502 CRYPTO           \u2502 \u52a0\u5bc6\u63e1\u624b\u6570\u636e                             \u2502<br \/>\n\u2502 PING             \u2502 \u4fdd\u6301\u6d3b\u8dc3\u63a2\u6d4b                             \u2502<br \/>\n\u2502 PADDING          \u2502 \u586b\u5145&#xff0c;\u9632\u6b62\u6d41\u91cf\u5206\u6790                       \u2502<br \/>\n\u2502 CONNECTION_CLOSE \u2502 \u5173\u95ed\u8fde\u63a5                                 \u2502<br \/>\n\u2502 MAX_DATA         \u2502 \u6d41\u91cf\u63a7\u5236&#xff1a;\u603b\u6570\u636e\u91cf\u9650\u5236                   \u2502<br \/>\n\u2502 MAX_STREAM_DATA  \u2502 \u6d41\u91cf\u63a7\u5236&#xff1a;\u5355\u6d41\u6570\u636e\u91cf\u9650\u5236                 \u2502<br \/>\n\u2502 NEW_CONNECTION_ID\u2502 \u65b0\u8fde\u63a5ID&#xff08;\u7528\u4e8e\u8fc1\u79fb&#xff09;                     \u2502<br \/>\n\u2502 RETIRE_CONNECTION_ID\u2502 \u5e9f\u5f03\u65e7\u8fde\u63a5ID                         \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<hr \/>\n<h3>\u56db\u3001QUIC\u6838\u5fc3\u673a\u5236<\/h3>\n<h4>4.1 \u8fde\u63a5\u5efa\u7acb<\/h4>\n<h5>\u9996\u6b21\u8fde\u63a5 (1-RTT)<\/h5>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u9996\u6b21\u8fde\u63a5 (1-RTT)                          \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u5ba2\u6237\u7aef                              \u670d\u52a1\u7aef                 \u2502<br \/>\n\u2502    \u2502                                   \u2502                    \u2502<br \/>\n\u2502    \u2502\u2500\u2500\u2500\u2500 Initial (ClientHello) \u2500\u2500\u2500\u2500\u2500\u2500\u2192\u2502                    \u2502<br \/>\n\u2502    \u2502     \u5305\u542b&#xff1a;QUIC\u7248\u672c\u3001\u8fde\u63a5ID        \u2502                    \u2502<br \/>\n\u2502    \u2502                                   \u2502                    \u2502<br \/>\n\u2502    \u2502\u2190\u2500\u2500\u2500 Initial &#043; Handshake \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502                    \u2502<br \/>\n\u2502    \u2502     \u5305\u542b&#xff1a;ServerHello\u3001\u8bc1\u4e66       \u2502                    \u2502<br \/>\n\u2502    \u2502                                   \u2502                    \u2502<br \/>\n\u2502    \u2502\u2500\u2500\u2500\u2500 Handshake (Finished) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192\u2502                    \u2502<br \/>\n\u2502    \u2502                                   \u2502                    \u2502<br \/>\n\u2502    \u2502\u2190\u2500\u2500\u2500 1-RTT Packet \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502                    \u2502<br \/>\n\u2502    \u2502                                   \u2502                    \u2502<br \/>\n\u2502    \u2502         \u8fde\u63a5\u5efa\u7acb\u5b8c\u6210&#xff01;            \u2502                    \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<h5>\u540e\u7eed\u8fde\u63a5 (0-RTT)<\/h5>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u540e\u7eed\u8fde\u63a5 (0-RTT)                          \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u5ba2\u6237\u7aef                              \u670d\u52a1\u7aef                 \u2502<br \/>\n\u2502    \u2502                                   \u2502                    \u2502<br \/>\n\u2502    \u2502\u2500\u2500\u2500\u2500 0-RTT Packet \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192\u2502                    \u2502<br \/>\n\u2502    \u2502     \u76f4\u63a5\u53d1\u9001\u5e94\u7528\u6570\u636e&#xff01;            \u2502                    \u2502<br \/>\n\u2502    \u2502     (\u4f7f\u7528\u4e4b\u524d\u534f\u5546\u7684\u5bc6\u94a5)          \u2502                    \u2502<br \/>\n\u2502    \u2502                                   \u2502                    \u2502<br \/>\n\u2502    \u2502         \u65e0\u9700\u7b49\u5f85&#xff0c;\u7acb\u5373\u4f20\u8f93        \u2502                    \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<p>\u901a\u4fd7\u7406\u89e3&#xff1a;<\/p>\n<ul>\n<li>\u9996\u6b21\u8fde\u63a5\u5c31\u50cf\u7b2c\u4e00\u6b21\u53bb\u94f6\u884c\u529e\u4e1a\u52a1&#xff0c;\u9700\u8981\u51fa\u793a\u8eab\u4efd\u8bc1\u3001\u586b\u8868\u683c<\/li>\n<li>\u540e\u7eed\u8fde\u63a5\u5c31\u50cf\u8001\u5ba2\u6237&#xff0c;\u76f4\u63a5\u529e\u4e1a\u52a1&#xff0c;\u4e0d\u7528\u518d\u9a8c\u8bc1\u8eab\u4efd<\/li>\n<\/ul>\n<h4>4.2 \u591a\u8def\u590d\u7528<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    QUIC \u591a\u6d41\u4f20\u8f93                             \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u5e94\u7528\u5c42                                                      \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                    \u2502<br \/>\n\u2502  \u2502 \u8bf7\u6c42 A   \u2502 \u2502 \u8bf7\u6c42 B   \u2502 \u2502 \u8bf7\u6c42 C   \u2502                    \u2502<br \/>\n\u2502  \u2502 (\u89c6\u9891)   \u2502 \u2502 (\u97f3\u9891)   \u2502 \u2502 (\u6570\u636e)   \u2502                    \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518                    \u2502<br \/>\n\u2502       \u2502            \u2502            \u2502                           \u2502<br \/>\n\u2502       \u25bc            \u25bc            \u25bc                           \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                    \u2502<br \/>\n\u2502  \u2502           QUIC Streams              \u2502                    \u2502<br \/>\n\u2502  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524                    \u2502<br \/>\n\u2502  \u2502 Stream 1: [Frame][Frame][Frame]    \u2502 \u2190 \u89c6\u9891\u6d41           \u2502<br \/>\n\u2502  \u2502 Stream 3: [Frame][Frame]           \u2502 \u2190 \u97f3\u9891\u6d41           \u2502<br \/>\n\u2502  \u2502 Stream 5: [Frame]                  \u2502 \u2190 \u6570\u636e\u6d41           \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                    \u2502<br \/>\n\u2502                      \u2502                                      \u2502<br \/>\n\u2502                      \u25bc                                      \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                    \u2502<br \/>\n\u2502  \u2502        UDP Packet (\u52a0\u5bc6)            \u2502                    \u2502<br \/>\n\u2502  \u2502  \u5305\u542b&#xff1a;Stream1\u5e27 &#043; Stream3\u5e27        \u2502                    \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                    \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u7279\u70b9&#xff1a;                                                     \u2502<br \/>\n\u2502  \u2022 \u6bcf\u4e2aStream\u72ec\u7acb\u4f20\u8f93&#xff0c;\u4e92\u4e0d\u963b\u585e                             \u2502<br \/>\n\u2502  \u2022 Stream 1\u4e22\u5305\u4e0d\u5f71\u54cdStream 3\u548c5                           \u2502<br \/>\n\u2502  \u2022 \u5355\u4e2aUDP\u8fde\u63a5\u627f\u8f7d\u6240\u6709\u6d41                                    \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<p>\u751f\u6d3b\u7c7b\u6bd4&#xff1a; \u5c31\u50cf\u591a\u8f66\u9053\u9ad8\u901f\u516c\u8def&#xff0c;\u4e00\u6761\u8f66\u9053\u5835\u8f66\u4e0d\u5f71\u54cd\u5176\u4ed6\u8f66\u9053\u3002<\/p>\n<h4>4.3 \u8fde\u63a5\u8fc1\u79fb<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u8fde\u63a5\u8fc1\u79fb\u793a\u4f8b                              \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  TCP\u8fde\u63a5\u6807\u8bc6&#xff1a;                                               \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510               \u2502<br \/>\n\u2502  \u2502 (192.168.1.100:12345, 10.0.0.1:443)    \u2502               \u2502<br \/>\n\u2502  \u2502        \u2191 IP\u53d8\u5316 &#061; \u8fde\u63a5\u65ad\u5f00              \u2502               \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518               \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  QUIC\u8fde\u63a5\u6807\u8bc6&#xff1a;                                              \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510               \u2502<br \/>\n\u2502  \u2502 Connection ID: 0x8a7b6c5d4e3f2a1b       \u2502               \u2502<br \/>\n\u2502  \u2502        \u2191 \u4e0eIP\/\u7aef\u53e3\u65e0\u5173                  \u2502               \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518               \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u573a\u666f&#xff1a;\u624b\u673a\u4eceWiFi\u5207\u6362\u52304G                                    \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  WiFi\u72b6\u6001:                                                  \u2502<br \/>\n\u2502  \u5ba2\u6237\u7aef (192.168.1.100:12345)                               \u2502<br \/>\n\u2502      \u2502                                                      \u2502<br \/>\n\u2502      \u2502 UDP\u5305 &#043; Connection ID                                \u2502<br \/>\n\u2502      \u2502                                                      \u2502<br \/>\n\u2502  \u670d\u52a1\u7aef (10.0.0.1:443)                                      \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502      \u2193 \u5207\u6362\u7f51\u7edc                                             \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  4G\u72b6\u6001:                                                    \u2502<br \/>\n\u2502  \u5ba2\u6237\u7aef (100.64.5.200:54321)  \u2190 IP\u548c\u7aef\u53e3\u90fd\u53d8\u4e86              \u2502<br \/>\n\u2502      \u2502                                                      \u2502<br \/>\n\u2502      \u2502 UDP\u5305 &#043; \u76f8\u540cConnection ID                            \u2502<br \/>\n\u2502      \u2502                                                      \u2502<br \/>\n\u2502  \u670d\u52a1\u7aef (10.0.0.1:443)                                      \u2502<br \/>\n\u2502      \u2502                                                      \u2502<br \/>\n\u2502      \u2502 \u8bc6\u522bConnection ID \u2192 \u7ee7\u7eed\u539f\u6709\u8fde\u63a5                     \u2502<br \/>\n\u2502      \u2502                                                      \u2502<br \/>\n\u2502  \u2705 \u8fde\u63a5\u4e0d\u65ad&#xff0c;\u4e1a\u52a1\u65e0\u611f\u77e5                                     \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<p>\u751f\u6d3b\u7c7b\u6bd4&#xff1a;<\/p>\n<ul>\n<li>TCP\u5c31\u50cf\u7535\u8bdd\u53f7\u7801&#xff0c;\u4f60\u6362\u53f7\u4e86\u522b\u4eba\u5c31\u627e\u4e0d\u5230\u4f60\u4e86<\/li>\n<li>QUIC\u5c31\u50cf\u8eab\u4efd\u8bc1\u53f7&#xff0c;\u4e0d\u7ba1\u4f60\u642c\u5230\u54ea\u91cc&#xff0c;\u8eab\u4efd\u8bc1\u53f7\u4e0d\u53d8<\/li>\n<\/ul>\n<h4>4.4 \u53ef\u9760\u4f20\u8f93\u673a\u5236<\/h4>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    QUIC \u53ef\u9760\u4f20\u8f93                             \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  ACK\u673a\u5236 (\u7c7b\u4f3cTCP&#xff0c;\u4f46\u66f4\u9ad8\u6548)                                 \u2502<br \/>\n\u2502  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u53d1\u9001\u65b9:                                                    \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2510                                \u2502<br \/>\n\u2502  \u2502 1  \u2502 2  \u2502 3  \u2502 4  \u2502 5  \u2502  \u5305\u53f7                          \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2518                                \u2502<br \/>\n\u2502    \u2502    \u2502    \u2502    \u2502    \u2502                                    \u2502<br \/>\n\u2502    \u2502    \u2502    \u2502    \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192                     \u2502<br \/>\n\u2502    \u2502    \u2502    \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192                          \u2502<br \/>\n\u2502    \u2502    \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192     \u4e22\u5305!                     \u2502<br \/>\n\u2502    \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192                                    \u2502<br \/>\n\u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192                                         \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u63a5\u6536\u65b9:                                                    \u2502<br \/>\n\u2502  \u6536\u5230: 1, 2, 4, 5 (\u7f3a\u5c113)                                   \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  ACK Frame:                                                 \u2502<br \/>\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                \u2502<br \/>\n\u2502  \u2502 ACK Range: [1-2], [4-5]               \u2502                \u2502<br \/>\n\u2502  \u2502 \u7f3a\u5931: 3                                \u2502                \u2502<br \/>\n\u2502  \u2502 ACK Delay: 5ms                         \u2502                \u2502<br \/>\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u53d1\u9001\u65b9\u6536\u5230ACK\u540e\u91cd\u4f20\u53053                                      \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502  \u62e5\u585e\u63a7\u5236 (\u53ef\u63d2\u62d4\u7b97\u6cd5)                                       \u2502<br \/>\n\u2502  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u652f\u6301\u7684\u7b97\u6cd5&#xff1a;                                                \u2502<br \/>\n\u2502  \u2022 Cubic (\u9ed8\u8ba4&#xff0c;\u4e0eTCP\u7c7b\u4f3c)                                  \u2502<br \/>\n\u2502  \u2022 BBR (Google\u5f00\u53d1&#xff0c;\u66f4\u6fc0\u8fdb)                                 \u2502<br \/>\n\u2502  \u2022 Reno (\u7ecf\u5178\u7b97\u6cd5)                                          \u2502<br \/>\n\u2502  \u2022 \u53ef\u81ea\u5b9a\u4e49\u7b97\u6cd5                                              \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u4f18\u52bf&#xff1a;                                                     \u2502<br \/>\n\u2502  \u2022 \u7528\u6237\u6001\u5b9e\u73b0&#xff0c;\u6613\u4e8e\u5347\u7ea7                                      \u2502<br \/>\n\u2502  \u2022 TCP\u5728\u5185\u6838\u6001&#xff0c;\u5347\u7ea7\u56f0\u96be                                     \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<hr \/>\n<h3>\u4e94\u3001QUIC vs TCP \u8be6\u7ec6\u5bf9\u6bd4<\/h3>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    QUIC vs TCP \u5168\u9762\u5bf9\u6bd4                      \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u7279\u6027            \u2502 TCP               \u2502 QUIC                  \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u4f20\u8f93\u5c42          \u2502 \u539f\u751f\u4f20\u8f93\u5c42        \u2502 \u57fa\u4e8eUDP\u5b9e\u73b0           \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u8fde\u63a5\u5efa\u7acb        \u2502 1-3 RTT           \u2502 0-1 RTT               \u2502<br \/>\n\u2502 (\u542bTLS)         \u2502                   \u2502                       \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u961f\u5934\u963b\u585e        \u2502 \u5b58\u5728              \u2502 \u4e0d\u5b58\u5728(\u591a\u6d41)          \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u8fde\u63a5\u8fc1\u79fb        \u2502 \u4e0d\u652f\u6301            \u2502 \u652f\u6301(Connection ID)   \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u52a0\u5bc6            \u2502 \u53ef\u9009(TLS)         \u2502 \u5f3a\u5236(TLS 1.3)         \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u62e5\u585e\u63a7\u5236        \u2502 \u5185\u6838\u6001            \u2502 \u7528\u6237\u6001(\u53ef\u63d2\u62d4)        \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u6d41\u91cf\u63a7\u5236        \u2502 \u6ed1\u52a8\u7a97\u53e3          \u2502 \u6ed1\u52a8\u7a97\u53e3&#043;\u6d41\u7ea7\u522b       \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u5934\u90e8\u5f00\u9500        \u2502 20\u5b57\u8282            \u2502 \u7ea620-40\u5b57\u8282           \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 NAT\u7a7f\u900f         \u2502 \u5bb9\u6613              \u2502 \u8f83\u96be(UDP\u9650\u5236)         \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u5b9e\u73b0\u4f4d\u7f6e        \u2502 \u64cd\u4f5c\u7cfb\u7edf\u5185\u6838      \u2502 \u5e94\u7528\u5c42\u5e93              \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u8c03\u8bd5\u96be\u5ea6        \u2502 \u8f83\u96be(\u5185\u6838)        \u2502 \u8f83\u6613(\u7528\u6237\u6001)          \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u517c\u5bb9\u6027          \u2502 \u6781\u597d              \u2502 \u4e00\u822c(\u90e8\u5206\u7f51\u7edc\u5c01\u9501)    \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 \u6210\u719f\u5ea6          \u2502 \u975e\u5e38\u6210\u719f          \u2502 \u8f83\u65b0(2012\u5e74\u8d77\u6b65)      \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<hr \/>\n<h3>\u516d\u3001Go\u8bed\u8a00\u5b9e\u73b0QUIC<\/h3>\n<h4>6.1 \u670d\u52a1\u7aef\u793a\u4f8b<\/h4>\n<p><span class=\"token keyword\">package<\/span> main<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n    <span class=\"token string\">&#034;context&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;crypto\/tls&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;fmt&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;io&#034;<\/span><\/p>\n<p>    <span class=\"token string\">&#034;github.com\/quic-go\/quic-go&#034;<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ TLS\u914d\u7f6e (QUIC\u5f3a\u5236\u8981\u6c42TLS 1.3)<\/span><br \/>\n    cert<span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">_<\/span> <span class=\"token operator\">:&#061;<\/span> tls<span class=\"token punctuation\">.<\/span><span class=\"token function\">LoadX509KeyPair<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;server.crt&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;server.key&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    tlsConfig <span class=\"token operator\">:&#061;<\/span> <span class=\"token operator\">&amp;<\/span>tls<span class=\"token punctuation\">.<\/span>Config<span class=\"token punctuation\">{<\/span><br \/>\n        Certificates<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>tls<span class=\"token punctuation\">.<\/span>Certificate<span class=\"token punctuation\">{<\/span>cert<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        NextProtos<span class=\"token punctuation\">:<\/span>   <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token builtin\">string<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;quic-signaling&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/\/ ALPN\u534f\u8bae<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u521b\u5efaQUIC\u76d1\u542c\u5668<\/span><br \/>\n    listener<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> quic<span class=\"token punctuation\">.<\/span><span class=\"token function\">ListenAddr<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;:3480&#034;<\/span><span class=\"token punctuation\">,<\/span> tlsConfig<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>quic<span class=\"token punctuation\">.<\/span>Config<span class=\"token punctuation\">{<\/span><br \/>\n        MaxIncomingStreams<span class=\"token punctuation\">:<\/span>    <span class=\"token number\">1000<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token comment\">\/\/ \u6700\u5927\u5e76\u53d1\u6d41<\/span><br \/>\n        MaxIncomingUniStreams<span class=\"token punctuation\">:<\/span> <span class=\"token number\">1000<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">panic<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">defer<\/span> listener<span class=\"token punctuation\">.<\/span><span class=\"token function\">Close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;QUIC\u670d\u52a1\u5668\u542f\u52a8&#xff0c;\u76d1\u542c :3480&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u63a5\u53d7\u65b0\u8fde\u63a5<\/span><br \/>\n        conn<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> listener<span class=\"token punctuation\">.<\/span><span class=\"token function\">Accept<\/span><span class=\"token punctuation\">(<\/span>context<span class=\"token punctuation\">.<\/span><span class=\"token function\">Background<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u63a5\u53d7\u8fde\u63a5\u5931\u8d25:&#034;<\/span><span class=\"token punctuation\">,<\/span> err<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">continue<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u65b0\u8fde\u63a5: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> conn<span class=\"token punctuation\">.<\/span><span class=\"token function\">RemoteAddr<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u5904\u7406\u8fde\u63a5<\/span><br \/>\n        <span class=\"token keyword\">go<\/span> <span class=\"token function\">handleQUICConnection<\/span><span class=\"token punctuation\">(<\/span>conn<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token function\">handleQUICConnection<\/span><span class=\"token punctuation\">(<\/span>conn quic<span class=\"token punctuation\">.<\/span>Connection<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">defer<\/span> conn<span class=\"token punctuation\">.<\/span><span class=\"token function\">Close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u8fde\u63a5\u5173\u95ed&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u63a5\u53d7\u65b0\u6d41 (\u7c7b\u4f3cTCP\u8fde\u63a5)<\/span><br \/>\n        stream<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> conn<span class=\"token punctuation\">.<\/span><span class=\"token function\">AcceptStream<\/span><span class=\"token punctuation\">(<\/span>context<span class=\"token punctuation\">.<\/span><span class=\"token function\">Background<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u63a5\u53d7\u6d41\u5931\u8d25:&#034;<\/span><span class=\"token punctuation\">,<\/span> err<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u65b0\u6d41: Stream ID %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> stream<span class=\"token punctuation\">.<\/span><span class=\"token function\">StreamID<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u5904\u7406\u6d41<\/span><br \/>\n        <span class=\"token keyword\">go<\/span> <span class=\"token function\">handleQUICStream<\/span><span class=\"token punctuation\">(<\/span>stream<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token function\">handleQUICStream<\/span><span class=\"token punctuation\">(<\/span>stream quic<span class=\"token punctuation\">.<\/span>Stream<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">defer<\/span> stream<span class=\"token punctuation\">.<\/span><span class=\"token function\">Close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8bfb\u53d6\u6570\u636e<\/span><br \/>\n    buf <span class=\"token operator\">:&#061;<\/span> <span class=\"token function\">make<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token builtin\">byte<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1024<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    n<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> stream<span class=\"token punctuation\">.<\/span><span class=\"token function\">Read<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token operator\">&amp;&amp;<\/span> err <span class=\"token operator\">!&#061;<\/span> io<span class=\"token punctuation\">.<\/span>EOF <span class=\"token punctuation\">{<\/span><br \/>\n        fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8bfb\u53d6\u5931\u8d25:&#034;<\/span><span class=\"token punctuation\">,<\/span> err<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6536\u5230\u6570\u636e: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u53d1\u9001\u54cd\u5e94<\/span><br \/>\n    response <span class=\"token operator\">:&#061;<\/span> <span class=\"token string\">&#034;Hello from QUIC server!&#034;<\/span><br \/>\n    stream<span class=\"token punctuation\">.<\/span><span class=\"token function\">Write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token function\">byte<\/span><span class=\"token punctuation\">(<\/span>response<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>6.2 \u5ba2\u6237\u7aef\u793a\u4f8b<\/h4>\n<p><span class=\"token keyword\">package<\/span> main<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n    <span class=\"token string\">&#034;context&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;crypto\/tls&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;fmt&#034;<\/span><\/p>\n<p>    <span class=\"token string\">&#034;github.com\/quic-go\/quic-go&#034;<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ TLS\u914d\u7f6e<\/span><br \/>\n    tlsConfig <span class=\"token operator\">:&#061;<\/span> <span class=\"token operator\">&amp;<\/span>tls<span class=\"token punctuation\">.<\/span>Config<span class=\"token punctuation\">{<\/span><br \/>\n        InsecureSkipVerify<span class=\"token punctuation\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/\/ \u6d4b\u8bd5\u73af\u5883\u8df3\u8fc7\u9a8c\u8bc1<\/span><br \/>\n        NextProtos<span class=\"token punctuation\">:<\/span>         <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token builtin\">string<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;quic-signaling&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8fde\u63a5\u670d\u52a1\u5668<\/span><br \/>\n    conn<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> quic<span class=\"token punctuation\">.<\/span><span class=\"token function\">DialAddr<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        context<span class=\"token punctuation\">.<\/span><span class=\"token function\">Background<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;localhost:3480&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        tlsConfig<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token operator\">&amp;<\/span>quic<span class=\"token punctuation\">.<\/span>Config<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">panic<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">defer<\/span> conn<span class=\"token punctuation\">.<\/span><span class=\"token function\">Close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u5ba2\u6237\u7aef\u5173\u95ed&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5df2\u8fde\u63a5\u5230QUIC\u670d\u52a1\u5668&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6253\u5f00\u65b0\u6d41<\/span><br \/>\n    stream<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> conn<span class=\"token punctuation\">.<\/span><span class=\"token function\">OpenStreamSync<\/span><span class=\"token punctuation\">(<\/span>context<span class=\"token punctuation\">.<\/span><span class=\"token function\">Background<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">panic<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">defer<\/span> stream<span class=\"token punctuation\">.<\/span><span class=\"token function\">Close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u53d1\u9001\u6570\u636e<\/span><br \/>\n    message <span class=\"token operator\">:&#061;<\/span> <span class=\"token string\">&#034;Hello from QUIC client!&#034;<\/span><br \/>\n    <span class=\"token boolean\">_<\/span><span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">&#061;<\/span> stream<span class=\"token punctuation\">.<\/span><span class=\"token function\">Write<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token function\">byte<\/span><span class=\"token punctuation\">(<\/span>message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">panic<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5df2\u53d1\u9001:&#034;<\/span><span class=\"token punctuation\">,<\/span> message<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u63a5\u6536\u54cd\u5e94<\/span><br \/>\n    buf <span class=\"token operator\">:&#061;<\/span> <span class=\"token function\">make<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token builtin\">byte<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1024<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    n<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> stream<span class=\"token punctuation\">.<\/span><span class=\"token function\">Read<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">panic<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Println<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6536\u5230\u54cd\u5e94:&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span>buf<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span>n<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>6.3 \u5b9e\u73b0\u4fe1\u4ee4\u670d\u52a1\u5668<\/h4>\n<p><span class=\"token keyword\">package<\/span> main<\/p>\n<p><span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n    <span class=\"token string\">&#034;context&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;crypto\/tls&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;encoding\/json&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;fmt&#034;<\/span><br \/>\n    <span class=\"token string\">&#034;sync&#034;<\/span><\/p>\n<p>    <span class=\"token string\">&#034;github.com\/quic-go\/quic-go&#034;<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">type<\/span> Message <span class=\"token keyword\">struct<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    Type       <span class=\"token builtin\">string<\/span> <span class=\"token string\">&#096;json:&#034;type&#034;&#096;<\/span><br \/>\n    SenderID   <span class=\"token builtin\">string<\/span> <span class=\"token string\">&#096;json:&#034;sender_id&#034;&#096;<\/span><br \/>\n    ReceiverID <span class=\"token builtin\">string<\/span> <span class=\"token string\">&#096;json:&#034;receiver_id&#034;&#096;<\/span><br \/>\n    Data       <span class=\"token builtin\">string<\/span> <span class=\"token string\">&#096;json:&#034;data&#034;&#096;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">type<\/span> Client <span class=\"token keyword\">struct<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    ID     <span class=\"token builtin\">string<\/span><br \/>\n    Stream quic<span class=\"token punctuation\">.<\/span>Stream<br \/>\n    Conn   quic<span class=\"token punctuation\">.<\/span>Connection<br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">type<\/span> SignalingServer <span class=\"token keyword\">struct<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    clients sync<span class=\"token punctuation\">.<\/span>Map <span class=\"token comment\">\/\/ map[string]*Client<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token function\">NewSignalingServer<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span>SignalingServer <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token operator\">&amp;<\/span>SignalingServer<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">*<\/span>SignalingServer<span class=\"token punctuation\">)<\/span> <span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span>addr <span class=\"token builtin\">string<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin\">error<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cert<span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">_<\/span> <span class=\"token operator\">:&#061;<\/span> tls<span class=\"token punctuation\">.<\/span><span class=\"token function\">LoadX509KeyPair<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;server.crt&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;server.key&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    tlsConfig <span class=\"token operator\">:&#061;<\/span> <span class=\"token operator\">&amp;<\/span>tls<span class=\"token punctuation\">.<\/span>Config<span class=\"token punctuation\">{<\/span><br \/>\n        Certificates<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>tls<span class=\"token punctuation\">.<\/span>Certificate<span class=\"token punctuation\">{<\/span>cert<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        NextProtos<span class=\"token punctuation\">:<\/span>   <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token builtin\">string<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;quic-signaling&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    listener<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> quic<span class=\"token punctuation\">.<\/span><span class=\"token function\">ListenAddr<\/span><span class=\"token punctuation\">(<\/span>addr<span class=\"token punctuation\">,<\/span> tlsConfig<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>quic<span class=\"token punctuation\">.<\/span>Config<span class=\"token punctuation\">{<\/span><br \/>\n        MaxIncomingStreams<span class=\"token punctuation\">:<\/span>    <span class=\"token number\">10000<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        MaxIncomingUniStreams<span class=\"token punctuation\">:<\/span> <span class=\"token number\">10000<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> err<br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">defer<\/span> listener<span class=\"token punctuation\">.<\/span><span class=\"token function\">Close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    fmt<span class=\"token punctuation\">.<\/span><span class=\"token function\">Printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;QUIC\u4fe1\u4ee4\u670d\u52a1\u5668\u542f\u52a8: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        conn<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> listener<span class=\"token punctuation\">.<\/span><span class=\"token function\">Accept<\/span><span class=\"token punctuation\">(<\/span>context<span class=\"token punctuation\">.<\/span><span class=\"token function\">Background<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">continue<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token keyword\">go<\/span> s<span class=\"token punctuation\">.<\/span><span class=\"token function\">handleConnection<\/span><span class=\"token punctuation\">(<\/span>conn<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">*<\/span>SignalingServer<span class=\"token punctuation\">)<\/span> <span class=\"token function\">handleConnection<\/span><span class=\"token punctuation\">(<\/span>conn quic<span class=\"token punctuation\">.<\/span>Connection<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        stream<span class=\"token punctuation\">,<\/span> err <span class=\"token operator\">:&#061;<\/span> conn<span class=\"token punctuation\">.<\/span><span class=\"token function\">AcceptStream<\/span><span class=\"token punctuation\">(<\/span>context<span class=\"token punctuation\">.<\/span><span class=\"token function\">Background<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">return<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token keyword\">go<\/span> s<span class=\"token punctuation\">.<\/span><span class=\"token function\">handleStream<\/span><span class=\"token punctuation\">(<\/span>conn<span class=\"token punctuation\">,<\/span> stream<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">*<\/span>SignalingServer<span class=\"token punctuation\">)<\/span> <span class=\"token function\">handleStream<\/span><span class=\"token punctuation\">(<\/span>conn quic<span class=\"token punctuation\">.<\/span>Connection<span class=\"token punctuation\">,<\/span> stream quic<span class=\"token punctuation\">.<\/span>Stream<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">defer<\/span> stream<span class=\"token punctuation\">.<\/span><span class=\"token function\">Close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    decoder <span class=\"token operator\">:&#061;<\/span> json<span class=\"token punctuation\">.<\/span><span class=\"token function\">NewDecoder<\/span><span class=\"token punctuation\">(<\/span>stream<span class=\"token punctuation\">)<\/span><br \/>\n    encoder <span class=\"token operator\">:&#061;<\/span> json<span class=\"token punctuation\">.<\/span><span class=\"token function\">NewEncoder<\/span><span class=\"token punctuation\">(<\/span>stream<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">var<\/span> msg Message<br \/>\n    <span class=\"token keyword\">if<\/span> err <span class=\"token operator\">:&#061;<\/span> decoder<span class=\"token punctuation\">.<\/span><span class=\"token function\">Decode<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>msg<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> err <span class=\"token operator\">!&#061;<\/span> <span class=\"token boolean\">nil<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">switch<\/span> msg<span class=\"token punctuation\">.<\/span>Type <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;register&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        client <span class=\"token operator\">:&#061;<\/span> <span class=\"token operator\">&amp;<\/span>Client<span class=\"token punctuation\">{<\/span><br \/>\n            ID<span class=\"token punctuation\">:<\/span>     msg<span class=\"token punctuation\">.<\/span>SenderID<span class=\"token punctuation\">,<\/span><br \/>\n            Stream<span class=\"token punctuation\">:<\/span> stream<span class=\"token punctuation\">,<\/span><br \/>\n            Conn<span class=\"token punctuation\">:<\/span>   conn<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        s<span class=\"token punctuation\">.<\/span>clients<span class=\"token punctuation\">.<\/span><span class=\"token function\">Store<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">.<\/span>SenderID<span class=\"token punctuation\">,<\/span> client<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u53d1\u9001\u6ce8\u518c\u6210\u529f\u54cd\u5e94<\/span><br \/>\n        encoder<span class=\"token punctuation\">.<\/span><span class=\"token function\">Encode<\/span><span class=\"token punctuation\">(<\/span>Message<span class=\"token punctuation\">{<\/span><br \/>\n            Type<span class=\"token punctuation\">:<\/span>     <span class=\"token string\">&#034;register_response&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            Data<span class=\"token punctuation\">:<\/span>     <span class=\"token string\">&#034;success&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;offer&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;answer&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;ice_candidate&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u8f6c\u53d1\u6d88\u606f<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> receiver<span class=\"token punctuation\">,<\/span> ok <span class=\"token operator\">:&#061;<\/span> s<span class=\"token punctuation\">.<\/span>clients<span class=\"token punctuation\">.<\/span><span class=\"token function\">Load<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">.<\/span>ReceiverID<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> ok <span class=\"token punctuation\">{<\/span><br \/>\n            r <span class=\"token operator\">:&#061;<\/span> receiver<span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span>Client<span class=\"token punctuation\">)<\/span><br \/>\n            encoder <span class=\"token operator\">:&#061;<\/span> json<span class=\"token punctuation\">.<\/span><span class=\"token function\">NewEncoder<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>Stream<span class=\"token punctuation\">)<\/span><br \/>\n            encoder<span class=\"token punctuation\">.<\/span><span class=\"token function\">Encode<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">func<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    server <span class=\"token operator\">:&#061;<\/span> <span class=\"token function\">NewSignalingServer<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    server<span class=\"token punctuation\">.<\/span><span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;:3480&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<hr \/>\n<h3>\u4e03\u3001QUIC\u7684\u6311\u6218\u4e0e\u9650\u5236<\/h3>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    QUIC \u7684\u6311\u6218                               \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  1. UDP\u88ab\u9650\u5236                                                \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u90e8\u5206\u7f51\u7edc\u73af\u5883\u5c01\u9501UDP                                    \u2502<br \/>\n\u2502     \u2022 \u4f01\u4e1a\u9632\u706b\u5899\u53ef\u80fd\u53ea\u5141\u8bb8TCP                                \u2502<br \/>\n\u2502     \u2022 \u89e3\u51b3\u65b9\u6848&#xff1a;HTTP\/3\u6709UDP\u5931\u8d25\u964d\u7ea7\u5230HTTP\/2\u673a\u5236              \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  2. NAT\u7a7f\u900f\u96be\u5ea6                                              \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 UDP NAT\u6620\u5c04\u8d85\u65f6\u66f4\u77ed                                    \u2502<br \/>\n\u2502     \u2022 \u9700\u8981\u66f4\u9891\u7e41\u7684\u4fdd\u6d3b                                       \u2502<br \/>\n\u2502     \u2022 \u89e3\u51b3\u65b9\u6848&#xff1a;\u589e\u52a0PING\u5e27\u9891\u7387                               \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  3. CPU\u5f00\u9500\u66f4\u9ad8                                              \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u7528\u6237\u6001\u52a0\u5bc6\u548c\u53ef\u9760\u4f20\u8f93                                   \u2502<br \/>\n\u2502     \u2022 TCP\u5728\u5185\u6838\u6001\u4f18\u5316\u66f4\u597d                                    \u2502<br \/>\n\u2502     \u2022 \u89e3\u51b3\u65b9\u6848&#xff1a;\u786c\u4ef6\u52a0\u901f\u3001\u4f18\u5316\u5b9e\u73b0                           \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  4. \u8c03\u8bd5\u56f0\u96be                                                 \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u52a0\u5bc6&#043;\u4e8c\u8fdb\u5236\u534f\u8bae                                        \u2502<br \/>\n\u2502     \u2022 \u4f20\u7edf\u5de5\u5177\u65e0\u6cd5\u89e3\u6790                                       \u2502<br \/>\n\u2502     \u2022 \u89e3\u51b3\u65b9\u6848&#xff1a;qlog\u65e5\u5fd7\u683c\u5f0f\u3001\u4e13\u7528\u5de5\u5177                       \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  5. \u4e2d\u95f4\u8bbe\u5907\u517c\u5bb9                                             \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u8d1f\u8f7d\u5747\u8861\u5668\u9700\u8981\u5347\u7ea7                                     \u2502<br \/>\n\u2502     \u2022 QoS\u8bbe\u5907\u53ef\u80fd\u4e0d\u8bc6\u522b                                      \u2502<br \/>\n\u2502     \u2022 \u89e3\u51b3\u65b9\u6848&#xff1a;\u8bbe\u5907\u5347\u7ea7\u3001\u534f\u8bae\u534f\u5546                           \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<hr \/>\n<h3>\u516b\u3001\u9002\u7528\u573a\u666f<\/h3>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    QUIC \u9002\u7528\u573a\u666f                             \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u2705 \u975e\u5e38\u9002\u5408&#xff1a;                                               \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 HTTP\/3 Web\u5e94\u7528                                        \u2502<br \/>\n\u2502     \u2022 \u5b9e\u65f6\u97f3\u89c6\u9891\u901a\u4fe1&#xff08;\u914d\u5408WebRTC&#xff09;                           \u2502<br \/>\n\u2502     \u2022 \u79fb\u52a8\u7aef\u5e94\u7528&#xff08;\u9700\u8981\u8fde\u63a5\u8fc1\u79fb&#xff09;                             \u2502<br \/>\n\u2502     \u2022 \u4f4e\u5ef6\u8fdf\u8981\u6c42\u7684API\u670d\u52a1                                    \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u26a0\ufe0f \u9700\u8981\u8bc4\u4f30&#xff1a;                                               \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u4f01\u4e1a\u5185\u7f51\u5e94\u7528&#xff08;UDP\u53ef\u80fd\u53d7\u9650&#xff09;                            \u2502<br \/>\n\u2502     \u2022 \u9ad8\u5e76\u53d1\u670d\u52a1\u5668&#xff08;CPU\u5f00\u9500&#xff09;                                \u2502<br \/>\n\u2502     \u2022 \u9700\u8981\u5e7f\u6cdb\u517c\u5bb9\u7684\u516c\u5171\u670d\u52a1                                 \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  \u274c \u4e0d\u592a\u9002\u5408&#xff1a;                                               \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u6587\u4ef6\u4f20\u8f93&#xff08;\u5927\u6587\u4ef6&#xff0c;TCP\u66f4\u7a33\u5b9a&#xff09;                          \u2502<br \/>\n\u2502     \u2022 \u9057\u7559\u7cfb\u7edf&#xff08;\u65e0\u6cd5\u5347\u7ea7&#xff09;                                   \u2502<br \/>\n\u2502     \u2022 \u53d7\u9650\u7f51\u7edc\u73af\u5883&#xff08;\u53ea\u80fdTCP&#xff09;                                \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<hr \/>\n<h3>\u4e5d\u3001\u672c\u9879\u76ee\u9009\u578b\u5efa\u8bae<\/h3>\n<h4>9.1 \u5f53\u524dTCP\u65b9\u6848\u7684\u4f18\u52bf<\/h4>\n<table>\n<tr>\u65b9\u9762\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>\u6210\u719f\u7a33\u5b9a<\/td>\n<td>TCP\u7ecf\u8fc7\u51e0\u5341\u5e74\u9a8c\u8bc1&#xff0c;bug\u6781\u5c11<\/td>\n<\/tr>\n<tr>\n<td>\u517c\u5bb9\u6027\u597d<\/td>\n<td>\u6240\u6709\u7f51\u7edc\u73af\u5883\u90fd\u652f\u6301TCP<\/td>\n<\/tr>\n<tr>\n<td>\u8c03\u8bd5\u65b9\u4fbf<\/td>\n<td>\u5de5\u5177\u94fe\u5b8c\u5584&#xff0c;\u95ee\u9898\u5bb9\u6613\u5b9a\u4f4d<\/td>\n<\/tr>\n<tr>\n<td>\u4fe1\u4ee4\u573a\u666f\u9002\u5408<\/td>\n<td>\u6d88\u606f\u91cf\u5c0f&#xff0c;TCP\u5f00\u9500\u53ef\u5ffd\u7565<\/td>\n<\/tr>\n<tr>\n<td>\u957f\u8fde\u63a5\u573a\u666f<\/td>\n<td>\u8fde\u63a5\u5efa\u7acb\u5f00\u9500\u53ea\u53d1\u751f\u4e00\u6b21<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>9.2 \u4f18\u5316\u5efa\u8bae<\/h4>\n<p>\u5982\u679c\u9700\u8981\u8fdb\u4e00\u6b65\u4f18\u5316&#xff0c;\u5efa\u8bae\u6309\u4ee5\u4e0b\u987a\u5e8f&#xff1a;<\/p>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502                    \u4f18\u5316\u4f18\u5148\u7ea7                                \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  1\ufe0f\u20e3 \u5e94\u7528\u5c42\u4f18\u5316&#xff08;\u6210\u672c\u6700\u4f4e&#xff0c;\u6548\u679c\u660e\u663e&#xff09;                         \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u542f\u7528TCP_NODELAY&#xff08;\u7981\u7528Nagle\u7b97\u6cd5&#xff09;                       \u2502<br \/>\n\u2502     \u2022 \u6d88\u606f\u5408\u5e76\u53d1\u9001                                           \u2502<br \/>\n\u2502     \u2022 \u4f7f\u7528Protobuf\u66ff\u4ee3JSON                                   \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  2\ufe0f\u20e3 \u534f\u8bae\u5c42\u4f18\u5316                                              \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u8003\u8651WebSocket&#xff08;\u5982\u9700\u6d4f\u89c8\u5668\u652f\u6301&#xff09;                        \u2502<br \/>\n\u2502     \u2022 \u5b9e\u73b0\u81ea\u5b9a\u4e49\u4e8c\u8fdb\u5236\u534f\u8bae                                   \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2502  3\ufe0f\u20e3 \u4f20\u8f93\u5c42\u4f18\u5316&#xff08;\u6210\u672c\u8f83\u9ad8&#xff09;                                   \u2502<br \/>\n\u2502     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                   \u2502<br \/>\n\u2502     \u2022 \u8bc4\u4f30QUIC&#xff08;\u5982\u679c\u7f51\u7edc\u73af\u5883\u652f\u6301&#xff09;                           \u2502<br \/>\n\u2502     \u2022 \u9700\u8981\u5904\u7406UDP\u88ab\u5c01\u9501\u7684\u964d\u7ea7\u65b9\u6848                            \u2502<br \/>\n\u2502                                                             \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<h4>9.3 \u7ed3\u8bba<\/h4>\n<p>\u5bf9\u4e8e\u672c\u9879\u76ee&#xff08;\u4fe1\u4ee4\u670d\u52a1\u5668&#xff09;&#xff0c;TCP\u662f\u5408\u7406\u7684\u9009\u62e9&#xff1a;<\/p>\n<li>\u4fe1\u4ee4\u6d88\u606f\u91cf\u5c0f&#xff08;\u901a\u5e38&lt;10KB&#xff09;&#xff0c;TCP\u7684\u989d\u5916\u5f00\u9500\u53ef\u5ffd\u7565<\/li>\n<li>\u957f\u8fde\u63a5\u573a\u666f&#xff0c;\u8fde\u63a5\u5efa\u7acb\u5f00\u9500\u53ea\u53d1\u751f\u4e00\u6b21<\/li>\n<li>TCP\u66f4\u6210\u719f\u7a33\u5b9a&#xff0c;\u517c\u5bb9\u6027\u66f4\u597d<\/li>\n<li>\u8c03\u8bd5\u548c\u7ef4\u62a4\u6210\u672c\u4f4e<\/li>\n<p>\u5982\u679c\u672a\u6765\u9700\u8981\u4f18\u5316&#xff0c;\u5efa\u8bae&#xff1a;<\/p>\n<li>\u5148\u4f18\u5316\u5e94\u7528\u5c42&#xff08;\u6d88\u606f\u5408\u5e76\u3001\u4e8c\u8fdb\u5236\u534f\u8bae&#xff09;<\/li>\n<li>\u518d\u8003\u8651QUIC&#xff08;\u5982\u679c\u7f51\u7edc\u73af\u5883\u652f\u6301UDP&#xff09;<\/li>\n<hr \/>\n<h3>\u5341\u3001\u53c2\u8003\u8d44\u6599<\/h3>\n<ul>\n<li>QUIC\u5b98\u65b9\u6587\u6863<\/li>\n<li>HTTP\/3\u8be6\u89e3<\/li>\n<li>quic-go\u5e93\u6587\u6863<\/li>\n<li>WebRTC\u4e0eQUIC<\/li>\n<\/ul>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>\u7cfb\u5217\u6587\u7ae0&#xff1a;<br \/>\n\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u9879\u76ee\u5b9e\u73b0\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u547c\u53eb\u5b8c\u6574\u65f6\u5e8f\u56fe \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4bSTUN\u670d\u52a1\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4bTURN \u670d\u52a1\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC \u4e4b SDP \u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC \u4e4b ICE \u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC ICE \u5019\u9009\u7c7b\u578b\u8be6\u89e3&#xff1a;\u5bf9\u7b49\u53cd\u5c04\u5019\u9009\u8005&#xff08;Peer Reflexive Candidate&#xff09;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1249,43,214],"topic":[],"class_list":["post-79546","post","type-post","status-publish","format-standard","hentry","category-server","tag-p2p","tag-43","tag-214"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/79546.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u7cfb\u5217\u6587\u7ae0&#xff1a; \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u9879\u76ee\u5b9e\u73b0\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u547c\u53eb\u5b8c\u6574\u65f6\u5e8f\u56fe \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4bSTUN\u670d\u52a1\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4bTURN \u670d\u52a1\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC \u4e4b SDP \u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC \u4e4b ICE \u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC ICE \u5019\u9009\u7c7b\u578b\u8be6\u89e3&#xff1a;\u5bf9\u7b49\u53cd\u5c04\u5019\u9009\u8005&#xff08;Peer Reflexive Candidate&#xff09;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/79546.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-02T05:17:30+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/79546.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/79546.html\",\"name\":\"\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-03-02T05:17:30+00:00\",\"dateModified\":\"2026-03-02T05:17:30+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/79546.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/79546.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/79546.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/79546.html","og_locale":"zh_CN","og_type":"article","og_title":"\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u7cfb\u5217\u6587\u7ae0&#xff1a; \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u9879\u76ee\u5b9e\u73b0\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4b\u547c\u53eb\u5b8c\u6574\u65f6\u5e8f\u56fe \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4bSTUN\u670d\u52a1\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4e4bTURN \u670d\u52a1\u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC \u4e4b SDP \u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC \u4e4b ICE \u8be6\u89e3 \u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011WebRTC ICE \u5019\u9009\u7c7b\u578b\u8be6\u89e3&#xff1a;\u5bf9\u7b49\u53cd\u5c04\u5019\u9009\u8005&#xff08;Peer Reflexive Candidate&#xff09;","og_url":"https:\/\/www.wsisp.com\/helps\/79546.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-03-02T05:17:30+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/79546.html","url":"https:\/\/www.wsisp.com\/helps\/79546.html","name":"\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-03-02T05:17:30+00:00","dateModified":"2026-03-02T05:17:30+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/79546.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/79546.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/79546.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u3010P2P\u97f3\u89c6\u9891\u901a\u4fe1\u7cfb\u7edf\u3011\u4fe1\u4ee4\u670d\u52a1\u5668\u4e4bTCP\u4e0eQUIC\u9009\u578b\u5bf9\u6bd4"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/79546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=79546"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/79546\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=79546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=79546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=79546"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=79546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}