MPTCP #とは
- 通常、TCP通信は1IPと1IP同士で対向して1本のコネクションを張る
- MPTCPは対向する別のIP同士がある場合にサブフローを生成し、2つ目の経路(帯域)も使って帯域を束ねる技術、みたいなもの
- 対向する経路の数だけ帯域は増えるが、単純な追加した帯域分だけリニアに帯域が太くなるわけではない
前提
発端
- 上掲記事に於いて、mptcpizeしたSoftEther VPNを走らせることによって、MPTCPにより帯域を増やした実績がある
Now, 2 WANs Available
- 上掲のリンク先での初期検証では楽天モバイルの5Gで検証したが、安定しなかった(主にサブ回線である楽天モバイルの5Gルーターが、デフォルトゲートウェイになるリンクローカルアドレスが再起動の度に変わるため)
- その後、
色々あってひかり電話用にVDSL回線「も」我が家に敷設し、WANを2回線としてMPTCPのトラフィックをVultrのVMとの間に流していた(帯域が増えた)
観察
- MPTCPのトラフィック観察していたところ、「FTTH(JPNE系) 1Gbpsベストエフォート(平均して最大230Mbps)」+「VDSL(ドコモ光/OCN) 100Mbpsベストエフォート(平均して80Mbps)」なので計330Mbpsぐらい出てほしいところ、150Mbpsぐらいしか発揮されなかった
- どうやら「MPTCPの各回線の速度は一番遅い回線の最大速度(帯域)に律速」され、「一番遅い回線の最大速度(帯域)×回線本数」が総帯域になるようだった
仮説
- FTTH(JPNE)の方が100Mbpsぐらい余裕があるのでは?
- つまりFTTH(JPNE)側にコネクションをもう1本通せば200Mbpsぐらい発揮するのでは???
- -> 実験のお時間です!
設定
エンドポイント側
- SoftEther VPNの仮想HUBを新しく作ります
- 新しく作った仮想HUBに接続するユーザーアカウントを作ります
- TAPデバイスを1つ、新たに作った仮想HUBへ割り当てます
- Netplanで新しいTAPデバイスにIPアドレスを割り当てます
- UFWを適切に設定します(要するに新しいTAPデバイスと対向することになるIPアドレスからの通信を受け容れる設定をする)
Sudoer@VultrFroneEnd:~$ sudo ip mptcp limits set subflows (総トンネル数+1) add_addr_accepted (総トンネル数+1)
Sudoer@VultrFroneEnd:~$ suod ip mptcp endpoint add (追加したIPアドレス) dev (追加したTAPデバイスの名前) subflow
- ↑のコマンドを起動時と定期的に実行するようなスクリプトを書いておく
ローカル側
- SoftEther VPNの仮想HUBを新しく作ります
- TAPデバイスを1つ、新たに作った仮想HUBへ割り当てます
- Netplanで新しいTAPデバイスにIPアドレスを割り当てます
- UFWを適切に設定します(要するに新しいTAPデバイスと対向することになるIPアドレスからの通信を受け容れる設定をする)
Sudoer@LocalRouter:~$ sudo ip mptcp limits set subflows (総トンネル数+1) add_addr_accepted (総トンネル数+1)
Sudoer@LocalRouter:~$ suod ip mptcp endpoint add (追加したIPアドレス) dev (追加したTAPデバイスの名前) subflow
- ↑のコマンドを起動時と定期的に実行するようなスクリプトを書いておく
- SoftEther VPNの新しく作った仮想HUBをVultrへカスケード接続します
確認ポイント
- MPTCPを通す用のSoftEther VPNトンネルはUDP高速化機能の有効/無効を全トンネルでどちらかに統一します
- MPTCPで通信してほしいSoftEther VPNトンネルはUDP高速化機能を無効にします
設定が完了したら
- エンドポイントとローカルとを同時に再起動します
検証方法
- 定番のiperf3を、エンドポイントとローカルの間に張られたVPN(主回線1本+従回線1本 から 主回線2本+従回線1本に変更)の中を通っているMPTCP化されたSoftEther VPNトンネルの中で対向しているIP同士で行います
検証結果
sudo iperf3 -c (エンドポイント側IP) -p 5201
- 90Mbps -> 120Mbps
sudo iperf3 -c (エンドポイント側IP) -p 5201 -R
- 30Mbps -> 55Mbps
sudo iperf3 -c (エンドポイント側IP) -p 5201 -u -b 1G
- 130Mbps -> 179Mbps
sudo iperf3 -c (エンドポイント側IP) -p 5201 -u -b 1G -R
- 100Mbps -> 149Mbps
結論
- VPNの本数を増やしたからと言って単純に速度/帯域が余っている側を単純に倍で使い切れるわけではないが、帯域が余っている側の回線にVPNをもう1本通してMPTCPのサブフローが成立するパスを追加することで、MPTCPの帯域を増加させる効果があることが確認できた
- よって速度差(帯域差)がある回線同士を束ねてMPTCPを行う時、MPTCPのパスを速度(帯域)が余っている回線に追加して適切な設定をしてやることで、MPTCPの速度(帯域)が増加する効果を見込める
- MPTCP化して速度(帯域)が増えたとは言っているが、MPTCPはサブフローのコネクションが成立しないと帯域が増えないので、短時間の通信で済む通信では通信速度は明確な差異を感じることが出来ないし、速度(帯域)も低速に甘んじている
- 逆に長時間の通信になるに従ってMPTCPのサブフローコネクションが増加するため、長時間・大容量のトラフィックが発生した場合には連続的に290Mbpsに到達する場面もあった(※トップスピードに到達するまで時間がかかったので、その通信の平均では200Mbps程度の速度(帯域)になった)
- MPTCPは初速が必要な用途には向かないかもしれないが、連続的な通信(大容量ファイルのアップロード/ダウンロードやストリーミング)には強い可能性がある
- もっとMPTCPの知見が増えてほしい