{"id":4348,"date":"2017-05-08T10:37:40","date_gmt":"2017-05-08T01:37:40","guid":{"rendered":"http:\/\/blog.bitmeister.jp\/?p=4348"},"modified":"2017-04-28T11:30:24","modified_gmt":"2017-04-28T02:30:24","slug":"mptcp%e3%81%ae%e3%83%91%e3%82%b1%e3%83%83%e3%83%88%e3%82%92%e7%9c%ba%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b%e3%81%9d%e3%81%ae1","status":"publish","type":"post","link":"https:\/\/blog.bitmeister.jp\/?p=4348","title":{"rendered":"MPTCP\u306e\u30d1\u30b1\u30c3\u30c8\u3092\u773a\u3081\u3066\u307f\u308b(\u305d\u306e1)"},"content":{"rendered":"<p>\u524d\u56de\u306f\u3001<a href=\"https:\/\/tools.ietf.org\/html\/rfc6824\" target=\"_blank\">RFC 6824<\/a>\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308bMPTCP\u306b\u3064\u3044\u3066\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002<br \/>\n\u4eca\u56de\u306f\u3001TCP\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u9818\u57df\u3067\u3084\u308a\u53d6\u308a\u3055\u308c\u308bMPTCP\u306e\u30b7\u30b0\u30ca\u30ea\u30f3\u30b0\u30d1\u30b1\u30c3\u30c8\u3092\u7c21\u5358\u306b\u8aac\u660e\u3057\u3001RFC\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068MPTCP\u306eMP_CAPABLE\u304c\u4ed8\u3044\u305f\u5b9f\u969b\u306e\u30d1\u30b1\u30c3\u30c8\u3092\u898b\u6bd4\u3079\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p><!--more--><\/p>\n<h3>TCP\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u7a2e\u5225<\/h3>\n<p><a href=\"https:\/\/www.iana.org\/assignments\/tcp-parameters\/tcp-parameters.xhtml\" target=\"_blank\">IANA<\/a>\u306b\u3088\u3063\u3066\u5272\u308a\u5f53\u3066\u3089\u308c\u305fTCP\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u7a2e\u5225\u306e\u756a\u53f7\u306f\u300130(0x1e)\u3067\u3059\u3002RFC 6824\u306b\u3082\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\r\n+------+--------+-----------------------+-----------+\r\n| Kind | Length |        Meaning        | Reference |\r\n+------+--------+-----------------------+-----------+\r\n|  30  |    N   | Multipath TCP (MPTCP) |  RFC 6824 |\r\n+------+--------+-----------------------+-----------+\r\n\t\tTable 1: TCP Option Kind Numbers\r\n<\/pre>\n<p>TCP\u30d8\u30c3\u30c0\u306b\u542b\u307e\u308c\u308b\u30c7\u30fc\u30bf\u30aa\u30d5\u30bb\u30c3\u30c8\u306f4\u30d3\u30c3\u30c8\u306e\u9818\u57df\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u3001TCP\u30d8\u30c3\u30c0\u306e\u6700\u5927\u9577\u306f60\u30d0\u30a4\u30c8(15(0xf) * 4byte)\u306b\u306a\u308a\u307e\u3059\u3002TCP\u30d8\u30c3\u30c0\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u9818\u57df\u3092\u9664\u304f\u9577\u3055\u306f20\u30d0\u30a4\u30c8\u306a\u306e\u3067\u300140\u30d0\u30a4\u30c8\u306e\u9818\u57df\u304c\u4f7f\u7528\u53ef\u80fd\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u308c\u306b\u306fMPTCP\u4ee5\u5916\u306e\u30aa\u30d7\u30b7\u30e7\u30f3(\u4f8b\u3048\u3070\u3001SACK\u306a\u3069)\u3082\u542b\u307e\u308c\u308b\u306e\u3067\u3001\u5b9f\u969b\u306b\u306f\u3082\u3063\u3068\u5c11\u306a\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<h3>MPTCP\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/h3>\n<p>MPTCP\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\r\n 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\r\n+---------------+---------------+-------+-----------------------+\r\n|     Kind      |    Length     |Subtype|                       |\r\n+---------------+---------------+-------+                       |\r\n|                     Subtype-specific data                     |\r\n|                       (variable length)                       |\r\n+---------------------------------------------------------------+\r\n\t\tFigure 3: MPTCP Option Format\r\n<\/pre>\n<p>1\u30d0\u30a4\u30c8\u306e\u7a2e\u5225\u30011\u30d0\u30a4\u30c8\u306e\u9577\u3055\u30014\u30d3\u30c3\u30c8\u306e\u30b5\u30d6\u30bf\u30a4\u30d7\u3001\u30b5\u30d6\u30bf\u30a4\u30d7\u3054\u3068\u306e\u53ef\u5909\u9577\u306e\u30c7\u30fc\u30bf\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3>\u30b5\u30d6\u30bf\u30a4\u30d7<\/h3>\n<p>MPTCP\u306e\u30b5\u30d6\u30bf\u30a4\u30d7\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\r\n+-------+--------------+----------------------------+---------------+\r\n| Value |    Symbol    |            Name            |   Reference   |\r\n+-------+--------------+----------------------------+---------------+\r\n|  0x0  |  MP_CAPABLE  |      Multipath Capable     |  Section 3.1  |\r\n|  0x1  |    MP_JOIN   |       Join Connection      |  Section 3.2  |\r\n|  0x2  |      DSS     | Data Sequence Signal (Data |  Section 3.3  |\r\n|       |              |    ACK and data sequence   |               |\r\n|       |              |          mapping)          |               |\r\n|  0x3  |   ADD_ADDR   |         Add Address        | Section 3.4.1 |\r\n|  0x4  |  REMOVE_ADDR |       Remove Address       | Section 3.4.2 |\r\n|  0x5  |    MP_PRIO   |   Change Subflow Priority  | Section 3.3.8 |\r\n|  0x6  |    MP_FAIL   |          Fallback          |  Section 3.6  |\r\n|  0x7  | MP_FASTCLOSE |         Fast Close         |  Section 3.5  |\r\n+-------+--------------+----------------------------+---------------+\r\n\t\t\tTable 2: MPTCP Option Subtypes\r\n<\/pre>\n<p>\u4eca\u306e\u3068\u3053\u308d\u30018\u3064\u306e\u30b5\u30d6\u30bf\u30a4\u30d7\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3>MP_CAPABLE<\/h3>\n<p>1\u672c\u76ee\u306eTCP\u306e\u7d4c\u8def\u3092\u78ba\u7acb\u3059\u308b\u969b\u306b\u9001\u53d7\u4fe1\u3055\u308c\u308bSYN\u3001SYN+ACK\u3001ACK\u306b\u306fMP_CAPABLE\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u4ed8\u304d\u307e\u3059\u3002<\/p>\n<h4>\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/h4>\n<p>MP_CAPABLE\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\r\n                     1                   2                   3\r\n 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\r\n+---------------+---------------+-------+-------+---------------+\r\n|     Kind      |    Length     |Subtype|Version|A|B|C|D|E|F|G|H|\r\n+---------------+---------------+-------+-------+---------------+\r\n|                   Option Sender's Key (64 bits)               |\r\n|                                                               |\r\n|                                                               |\r\n+---------------------------------------------------------------+\r\n|                  Option Receiver's Key (64 bits)              |\r\n|                     (if option Length == 20)                  |\r\n|                                                               |\r\n+---------------------------------------------------------------+\r\n        Figure 4: Multipath Capable (MP_CAPABLE) Option\r\n<\/pre>\n<h4>SYN+MP_CAPABLE\u30d1\u30b1\u30c3\u30c8<\/h4>\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\r\n16:02:40.938112 IP (tos 0x0, ttl 64, id 23372, offset 0, flags &#x5B;DF], proto TCP (6), length 72)\r\n    192.168.101.2.51080 &gt; 192.168.109.2.5001: Flags &#x5B;S], cksum 0x5390 (incorrect -&gt; 0xbf55), seq 801567604, win 29200, options &#x5B;mss 1460,sackOK,TS val 1091640 ecr 0,nop,wscale 7,mptcp capable csum {0x2bbab124627e8eb8}], length 0\r\n0x0000:  0004 0001 0006 a036 9fa1 459f 0000 0800\r\n0x0010:  4500 0048 5b4c 4000 4006 8c0e c0a8 6502\r\n0x0020:  c0a8 6d02 c788 1389 2fc6 f374 0000 0000\r\n0x0030:  d002 7210 5390 0000 0204 05b4 0402 080a\r\n0x0040:  0010 a838 0000 0000 0103 0307 1e0c 0081\r\n0x0050:  2bba b124 627e 8eb8\r\n<\/pre>\n<p>TCP\u30d8\u30c3\u30c0\u306e\u30c7\u30fc\u30bf\u30aa\u30d5\u30bb\u30c3\u30c8\u304c0xd\u306a\u306e\u3067\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u9818\u57df\u3092\u542b\u3080TCP\u30d8\u30c3\u30c0\u306e\u9577\u3055\u306f\u300152\u30d0\u30a4\u30c8\u3067\u3059\u3002<br \/>\n\u6700\u5f8c\u306e12\u30d0\u30a4\u30c8\u304cMP_CAPABLE\u306e\u9818\u57df\u3067\u3059\u3002<br \/>\n0x1e\u304cMPTCP\u30aa\u30d7\u30b7\u30e7\u30f3\u30010x0c\u304c\u9577\u3055\u306712\u30d0\u30a4\u30c8\u3001Subtype\u304c0\u3001Version\u304c0\u3001A\u30d5\u30e9\u30b0\u3068H\u30d5\u30e9\u30b0\u304c\u30bb\u30c3\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002A\u30d5\u30e9\u30b0\u3067\u30c1\u30a7\u30c3\u30af\u30b5\u30e0\u304c\u5fc5\u8981\u3001H\u30d5\u30e9\u30b0\u3067HMAC-SHA1\u3092\u4f7f\u3046\u3053\u3068\u304c\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n\u6b8b\u308b8\u30d0\u30a4\u30c8(&#8220;2bba b124 627e 8eb8&#8221;)\u304c\u9001\u4fe1\u8005\u306e\u9375\u3067\u3059\u3002<\/p>\n<h4>SYN+ACK+MP_CAPABLE\u30d1\u30b1\u30c3\u30c8<\/h4>\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\r\n16:02:40.957722 IP (tos 0x0, ttl 62, id 0, offset 0, flags &#x5B;DF], proto TCP (6), length 72)\r\n    192.168.109.2.5001 &gt; 192.168.101.2.51080: Flags &#x5B;S.], cksum 0xfb5d (correct), seq 1342636158, ack 801567605, win 28560, options &#x5B;mss 1460,sackOK,TS val 1094284 ecr 1091640,nop,wscale 7,mptcp capable csum {0xfea9ec93d4d9d142}], length 0\r\n        0x0000:  0000 0001 0006 a036 9fa1 4733 0000 0800\r\n        0x0010:  4500 0048 0000 4000 3e06 e95a c0a8 6d02\r\n        0x0020:  c0a8 6502 1389 c788 5007 007e 2fc6 f375\r\n        0x0030:  d012 6f90 fb5d 0000 0204 05b4 0402 080a\r\n        0x0040:  0010 b28c 0010 a838 0103 0307 1e0c 0081\r\n        0x0050:  fea9 ec93 d4d9 d142\r\n<\/pre>\n<p>\u3053\u308c\u3082TCP\u30d8\u30c3\u30c0\u306e\u30c7\u30fc\u30bf\u30aa\u30d5\u30bb\u30c3\u30c8\u304c0xd\u306a\u306e\u3067\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u9818\u57df\u3092\u542b\u3080TCP\u30d8\u30c3\u30c0\u306e\u9577\u3055\u306f\u300152\u30d0\u30a4\u30c8\u3067\u3059\u3002<br \/>\n\u6700\u5f8c\u306e12\u30d0\u30a4\u30c8\u304cMP_CAPABLE\u306e\u9818\u57df\u3067\u3059\u3002<br \/>\n\u5148\u7a0b\u3068\u540c\u69d8\u3001A\u30d5\u30e9\u30b0\u3068H\u30d5\u30e9\u30b0\u304c\u8a2d\u5b9a\u3055\u308c\u3001\u6700\u5f8c\u306e8\u30d0\u30a4\u30c8(&#8220;fea9 ec93 d4d9 d142&#8221;)\u304c\u9001\u4fe1\u8005\u306e\u9375\u3067\u3059\u3002<\/p>\n<h4>ACK+MP_CAPABLE\u30d1\u30b1\u30c3\u30c8<\/h4>\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\r\n16:02:40.957855 IP (tos 0x0, ttl 64, id 23373, offset 0, flags &#x5B;DF], proto TCP (6), length 80)\r\n    192.168.101.2.51080 &gt; 192.168.109.2.5001: Flags &#x5B;.], cksum 0x5398 (incorrect -&gt; 0xffc8), seq 1, ack 1, win 229, options &#x5B;nop,nop,TS val 1091645 ecr 1094284,mptcp capable csum {0x2bbab124627e8eb8,0xfea9ec93d4d9d142},mptcp dss ack 3821824259], length 0\r\n        0x0000:  0004 0001 0006 a036 9fa1 459f 0000 0800\r\n        0x0010:  4500 0050 5b4d 4000 4006 8c05 c0a8 6502\r\n        0x0020:  c0a8 6d02 c788 1389 2fc6 f375 5007 007f\r\n        0x0030:  f010 00e5 5398 0000 0101 080a 0010 a83d\r\n        0x0040:  0010 b28c 1e14 0081 2bba b124 627e 8eb8\r\n        0x0050:  fea9 ec93 d4d9 d142 1e08 2001 e3cc 6903\r\n<\/pre>\n<p>TCP\u30d8\u30c3\u30c0\u306e\u30c7\u30fc\u30bf\u30aa\u30d5\u30bb\u30c3\u30c8\u304c0xf\u306a\u306e\u3067\u3001\u30aa\u30d7\u30b7\u30e7\u30f3\u9818\u57df\u3092\u542b\u3080TCP\u30d8\u30c3\u30c0\u306e\u9577\u3055\u306f\u3001\u6700\u5927\u306e60\u30d0\u30a4\u30c8\u3067\u3059\u3002<br \/>\n\u6700\u5f8c\u306e28\u30d0\u30a4\u30c8\u76ee\u304b\u3089\u306e20\u30d0\u30a4\u30c8\u304cMP_CAPABLE\u306e\u9818\u57df\u3067\u3059\u3002<br \/>\n\u9001\u4fe1\u8005\u3068\u53d7\u4fe1\u8005\u306e\u9375\u304c\u305d\u308c\u305e\u308c\u5165\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u3053\u307e\u3067\u306e\u30d1\u30b1\u30c3\u30c8\u306e\u3084\u308a\u53d6\u308a\u3067\u3001MPTCP\u3067\u4f7f\u7528\u3055\u308c\u308b1\u672c\u76ee\u306eTCP\u306e\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u304c\u78ba\u7acb\u3055\u308c\u307e\u3059\u3002MPTCP\u304cTCP\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u9818\u57df\u3092\u6700\u5927\u9650\u306b\u5229\u7528\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u898b\u3066\u53d6\u308c\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u5f8c\u3001\u4ed6\u306b\u4f7f\u7528\u53ef\u80fd\u306aIP\u30a2\u30c9\u30ec\u30b9\/\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304c\u3042\u308b\u5834\u5408\u3001ADD_ADDR\u30aa\u30d7\u30b7\u30e7\u30f3\u3084MP_JOIN\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u3088\u3063\u30662\u672c\u76ee\u4ee5\u964d\u306eTCP\u306e\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u304c\u78ba\u7acb\u3055\u308c\u307e\u3059\u304c\u3001\u305d\u308c\u3089\u306e\u5185\u5bb9\u306b\u3064\u3044\u3066\u306f\u3001\u6b21\u56de\u898b\u6bd4\u3079\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u56de\u306f\u3001RFC 6824\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308bMPTCP\u306b\u3064\u3044\u3066\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002 \u4eca\u56de\u306f\u3001TCP\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u9818\u57df\u3067\u3084\u308a\u53d6\u308a\u3055\u308c\u308bMPTCP\u306e\u30b7\u30b0\u30ca\u30ea\u30f3\u30b0\u30d1\u30b1\u30c3\u30c8\u3092\u7c21\u5358\u306b\u8aac\u660e\u3057\u3001RFC\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068MP [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[120,18,148],"class_list":["post-4348","post","type-post","status-publish","format-standard","hentry","category-tech","tag-kernel","tag-linux","tag-mptcp"],"_links":{"self":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/4348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4348"}],"version-history":[{"count":9,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/4348\/revisions"}],"predecessor-version":[{"id":4357,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=\/wp\/v2\/posts\/4348\/revisions\/4357"}],"wp:attachment":[{"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bitmeister.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}