14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SORACOMのMTU変更設定を使ってみる

Posted at

はじめに

SORACOMから「SORACOM ユーザーコンソールで SIM グループごとに MTU 値を設定できるようになりました」というお知らせが出ていました。

普段なかなかこのようなネットワーク設定を気にする機会はありませんが、せっかくなのでこの設定を確かめたり、実際にどのような違いが出てくるのか確かめようかなと思いました。

MTUとは?

ざっくりいうとIPパケットの最大サイズがMTU(Maximum Transmission Unit)です。MTUは送信サイズで厳密に言えばMRU(Maximum Receive Unit)もあるみたいですが、こちらはあまり意識することはありませんね。

IPパケットの中には、実際にやり取りされるデータ(ペイロード)の他に、IPアドレスやポート番号などの情報が入っているIPヘッダーもあり、ヘッダーも含めたサイズの最大値がMTUになります。このMTUはネットワークごとに決まっている大きさです。「ネットワーク」というのは、IPでいえばルーターを介さずに到達できる範囲といういことになります。

MTUは単一のネットワークだとあまり問題にはなりませんが、インターネットでは送信元から送信先に届くまでにさまざまなネットワークを経由しています。そのネットワークはEthernet、携帯回線のような物理的なネットワークもあり、IPSecやWireguardのような論理的なネットワークもあり、それぞれで一度に運べるサイズが決まっています。自分のネットワークに大きなMTUが設定されているとサイズの大きなパケットで送られますが、送信先のネットワークはそのサイズでは受けられなくてパケットが分割されたり、最悪破棄されてしまうということがあります。逆に小さすぎると通信効率が悪くなります。経路の全てのネットワークの中で一番小さい値が理想ですが、特にインターネットだとどのネットワークを通るかはわからないことが多いので、大きすぎず、小さすぎずを狙って設定することが必要になります。

MTUはネットワークごとに勝手に決めて良いのでEthernetだと1500とされていることが多いのですが、これだと分割せずに通せないネットワークもあるため、ちょっと小さい値にされていることもありますね。

そのMTUがSORACOMの回線では今まで設定できていなかったのが、設定できるようになった、というのがこのアップデートになります。IoTだと用途が限られているため、比較的最適なMTUを設定するこが可能と考えられますね。

SORACOMでの設定

設定方法は以下のページで確認できます。
https://users.soracom.io/ja-jp/docs/air/configure-ip-link-mtu/

具体的にはグループ設定のSORACOM Air for セルラーの設定の中ですね。

image.png

一番下の設定にある「IP Link MTU設定を有効化」をONにすればよいです。
image.png

試しに設定してみましょう。

Raspberry Pi 4 Model Bにて、Soracom Onyx – LTE™ USB ドングル (SC-QGLC4-C1)を繋いでみます。接続の仕方はSoracom Onyx - LTE™ USB ドングルをセットアップするを参照しました。

まず設定を有効にしていない状態で確認すると以下のように、MTUは1430となりました。

root@rasp:~# ifconfig wwan0
wwan0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1430
        inet 10.198.251.254  netmask 255.255.255.252  destination 10.198.251.254
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 3  bytes 4290 (4.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3  bytes 4290 (4.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pingで試してみると、確かに1430を境にメッセージが送信できなくなります。(メッセージサイズにIPヘッダ20バイトとICMPヘッダーの8バイトを加算して計算するため1402を指定した時が1430バイトになる。-M doオプションにより分割を禁止すると、送信できない、というエラーメッセージが返される)

root@rasp:~# ping -c 4 -I wwan0 -s 1402 -M do 1.1.1.1
PING 1.1.1.1 (1.1.1.1) from 10.198.251.254 wwan0: 1402(1430) bytes of data.
1410 bytes from 1.1.1.1: icmp_seq=1 ttl=58 time=128 ms
1410 bytes from 1.1.1.1: icmp_seq=2 ttl=58 time=55.8 ms
1410 bytes from 1.1.1.1: icmp_seq=3 ttl=58 time=53.8 ms
1410 bytes from 1.1.1.1: icmp_seq=4 ttl=58 time=51.5 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 51.541/72.274/127.925/32.165 ms
root@rasp:~# ping -c 4 -I wwan0 -s 1403 -M do 1.1.1.1
PING 1.1.1.1 (1.1.1.1) from 10.198.251.254 wwan0: 1403(1431) bytes of data.
ping: sendmsg: Message too long
ping: sendmsg: Message too long
ping: sendmsg: Message too long
ping: sendmsg: Message too long

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3066ms

それではMTUを設定してみましょう。設定した場合のデフォルト値は1500のようです。設定は接続時に反映されるため、一度切断して再接続する必要があります。
image.png

確かに1500になりました。

root@rasp:~# ifconfig wwan0
wwan0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.198.251.254  netmask 255.255.255.252  destination 10.198.251.254
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 2  bytes 2862 (2.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2  bytes 2862 (2.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pingでの確認も想定通り、1472(1500)まではOKで、1473(1501)ではダメになります。

root@rasp:~# ping -c 4 -I wwan0 -s 1472 -M do 1.1.1.1
PING 1.1.1.1 (1.1.1.1) from 10.198.251.254 wwan0: 1472(1500) bytes of data.
1480 bytes from 1.1.1.1: icmp_seq=1 ttl=58 time=58.7 ms
1480 bytes from 1.1.1.1: icmp_seq=2 ttl=58 time=57.7 ms
1480 bytes from 1.1.1.1: icmp_seq=3 ttl=58 time=63.0 ms
1480 bytes from 1.1.1.1: icmp_seq=4 ttl=58 time=62.8 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 57.684/60.536/62.962/2.375 ms
root@rasp:~# ping -c 4 -I wwan0 -s 1473 -M do 1.1.1.1
PING 1.1.1.1 (1.1.1.1) from 10.198.251.254 wwan0: 1473(1501) bytes of data.
ping: sendmsg: Message too long
ping: sendmsg: Message too long
ping: sendmsg: Message too long
ping: sendmsg: Message too long

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3061ms

設定値の最小は576、最大値は9216のようです。かなり大きい値でも受けられるみたいですね。いろんなネットワークを経由するなら1500や1430が無難でしょうが、SORACOMとだけ通信するなら9216でも良いのかも?

ただデバイス、もしくはOSによる限界があるのか、576にした際には1280になりましたし、9216にした場合はそもそも接続できず、2000が限界でした。

性能確認

値を色々変更しても性能に影響がないんだったらやる必要ないですよね。わかりやすいところでファイルのアップロード/ダウンロード速度が変わるかどうか確認してみましょう。ファイルの置き場所としてSORACOM内のHarvest FilesとSORACOM外のS3とし、対象は10MBのファイル、MTUは設定なしの1430、最小の1280、最大の2000のそれぞれについて試してみます。

MTU1430

S3 Download S3 Upload Harvest Download Harvest Upload
1 10.61 10.362 10.743 10.347
2 11.438 10.661 11.026 10.519
3 10.54 10.542 10.613 10.516
Average 10.863 10.522 10.794 10.461

MTU1280

S3 Download S3 Upload Harvest Download Harvest Upload
1 11.131 11.033 14.182 10.896
2 11.746 10.615 14.429 10.538
3 11.155 10.423 14.648 10.467
Average 11.344 10.690 14.420 10.634
1430と比較 +4.43% +1.60% +33.59% +1.65%

MTU 2000

S3 Download S3 Upload Harvest Download Harvest Upload
1 10.443 10.802 10.988 10.526
2 10.990 10.277 10.657 11.063
3 10.918 10.582 10.553 10.429
Average 10.784 10.554 10.733 10.673
1430と比較 -0.73% 0.30% -0.57% 2.03%

MTU 1280の時のHarvest Filesからのダウンロードはなぜかかなり悪い、という結果になりました。通信先に応じて最適なMTUがありそうですが、デフォルトから大きく改善するということもないようなので、大きめのファイルをやり取りしている分にはさほど関係なさそうです。

パケットの様子はどうでしょうか。IPパケットの部分のみキャプチャしてみました。

MTU 1430 Harvest Files Download 11986パケット
image.png

MTU 1430 Harvest Files Upload 12289パケット
image.png

MTU 1280 Harvest Files Download 13019パケット
image.png

MTU 1280 Harvest Files Upload 13129パケット
image.png

MTU 2000 Harvest Files Download 12107パケット
image.png

MTU 2000 Harvest Files Upload 12113パケット
image.png

何の制約かはわかりませんが、1430や2000としていてもパケットの最大サイズは1378となりました。OSやアプリケーションで制限されていると思われますが、これではあまり変わりませんね。残念。1280にした場合はちゃんと1280になりました。その分少しパケット数が増え、その分通信時間が伸びているものと思われます。

最後にSORACOMのサービスがMTUの設定により大きなサイズで受け付けられるようになったかを確認します。たとえばHarvest DataのUDPデータは1パケットにまとめる必要があるので、最大の長さはMTU - 28です。(IPヘッダ20バイト、UDPヘッダ8バイト)

そのため、MTU1430のネットワークだと1402バイトまでしか送れませんでした。それ以上の長さで送ろうとすると、パケットが分割されて2つのメッセージとして受け取られてしまいます。MTU 2000だと1972まで送れるようになったでしょうか?

image.png

残念ながらなっていませんでした。MTUの設定によらず、Harvest Dataが受けられるデータ長は最大1472のようです。それ以上長くなると応答しなくなります。データも届いていないようです。サーバー側のネットワークのMTUにより制限されているのではないかと思いますが、やや残念ですね。

まとめ

MTUの変更を試してみました。携帯回線ネットワークの設定を変更する、というのは普通なかなかできないものですが、それができるのはSORACOMの面白いところですね。通信はSORACOMのネットワークだけの問題ではないのでうまくいかないところもありましたが、うまくすると転送速度や一度に送れるデータの上限を上げるといったことができそうです。何かの機会に活かせればよいですね。

14
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?