Linux 5.6から Multipath TCP(mptcp)が使えるようになった。複数インターフェースを使ってTCPコネクションをはり効率のよく通信を行う仕組みです。mptcp v0がRFC 6824で、mptcp v1がRFC 8684で標準化されています。
すでに、iOSでは利用が始まっています。
asnokaze.hatenablog.com
来月リリース予定である、Ubuntu 20.10 は Kernel 5.8 が入っており、mptcpが使えるのか試してみようと思いました。
有効になってることを確認
イメージを公式サイトから落としてきて起動します。
$ uname -a Linux y 5.8.0-19-generic #20-Ubuntu SMP Fri Sep 11 09:08:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux $ sysctl -a |grep mptcp net.ipv4.tcp_available_ulp = espintcp mptcp net.mptcp.enabled = 1
すでにmptcpが有効になっていることを確認できます。
試す
redhatさんの記事(URL)では、stapを用いて既存のアプリケーションを変更無くmptcp対応を行っていましたが、うまく行かなかったので自力でmptcp通信を行います。
とは言ってそんなに難しいことはなく、ソケットオプションにIPPROTO_MPTCPを指定するだけで
fd = socket(AF_INET, SOCK_STREAM, IPPROTO_MPTCP);
下記ページのコード参考にすれば、比較的容易にクライアントとサーバを用意できました。
www.toumasu-program.net
パケットキャプチャ
通信をキャプチャすると、mptcp v1 で通信が行えていることが確認できます。
残課題
ちゃんと複数インターフェースでザブフローしゃべるところまで確認したい