ネットワークを学習していると、IPアドレスからMACアドレス、そしてパケット、フレームの中身など、どんどん奥深い知識エリアに入り込んでいきますよね。
その中で、ネットワークの中のデータのサイズの話が出てきます。どんなに大きなサイズのファイルも必ず一定のデータ長に分割(フラグメント)された上でネットワークの中を流れ、機器(ホスト)間で受け渡しがされますね。
今回はこの一定のデータサイズを示すMTUやMSSの意味と違いに関して調べてみました!
データは分割して送られる!
先ずデータは小さな単位に分割して送られます。
TCP/IPのデータ通信において、データは通信元で「パケット」と呼ばれる小さな単位に分割されます。
パケットはLANやWAN、プロバイダなど、様々なルートを通って、通信先に届きます。
このパケットを受け取った通信先ではパケットを結合(組み立て)してデータを元の形に戻します。
以下にパケットが分割されて流れるイメージを載せておきます。

データを分割するのはなぜ?
そもそも何故データをパケットに分割して、パケット単位でネットワークに流す必要があるのでしょうか?データを分割して送るためには分割したデータ毎にヘッダー情報が必要になりますよね。ヘッダー情報もそれなりのサイズなので、余分なデータを送ることになります。
しかし、大きな二つのメリットがあるのです
- 一つの回線を複数のコンピュータ間で共有して、通信を行うことが可能
- 通信が上手くいかなかった際のリカバリが効率的に行える
上記内容を次に詳しく説明します。
通信を共有できる
電話は1対1の通話をしますが、その際に回線は占有していますね。これと同じでデータをパケットに分割しない場合、データを送り終わるまでは回線を占有してしまうことになり、他の人たちは回線が空くのを待っている状態になります。
パケットに分割することで、複数の人たちが回線を同時に使うことができますので、回線の利用効率が上がることが大きなメリットとなります。
通信のリカバリがやり易い
データをパケットに分割することで、通信中にデータの一部が欠損してしまったとしても、大きなデータを最初から全て送り直すのではなく、エラーとなったパケットだけを送り直す(再送)ことで問題を解決できます。
通信中に回線が不安定になったりすることで、データが欠損することは十分あり得ることですので、この点も非常に大きなポイントと言えるでしょう。
データのサイズを取り決めることは重要!
通信元と通信先の間には様々なネットワーク機器があり、ネットワーク機器でヘッダー情報が書き換わったりします。
コンピュータの世界では届いたデータは「0 or 1」となっていますが、そのデータの何バイト目から何バイトがヘッダー部分で何バイト目から実際のデータ(ペイロード)なのかを取り決めておかないと、一体どこからが意味のあるデータなのか分からなくなってしまいますよね。
「100バイトのデータ(パケット)を送るから100バイトで受け取ってね」といったことを送受信の双方、途中のネットワーク機器で取り決めておくことで正しいデータ通信ができることを覚えておきましょう!
MTUとは?
パケットに分割する理由は分かったところで、パケットのサイズに関するMTUの説明をします!
MTUは「Maximum Transmission Unit」の略で、ネットワークにおいて1回の転送(1フレーム)で送受信できるデータの最大値のことです。
簡単に言うとイーサネットフレームのデータ部分のサイズとなります。
イーサネットフレームの最大サイズは規格で「1518バイト」と決まっています。
イーサネットフレームは以下の図のように、「イーサネットヘッダー (14バイト)+ データ + FCS(4バイト)」で構成されています。このデータ部分の「1500バイト」がMTUの値となります。

1500バイトはあくまでも基本的なサイズなので、ヘッダー部分に情報が追加される、例えば PPPoE用のヘッダーや IPsecのヘッダ ーなどがあると、MTUサイズは1500バイトより小さく(1492や1454など)なります。
通信経路(ATMやイーサネット、FDDIなど)においてMTUサイズが違う場合、大きいMTUサイズを小さなMTUサイズに分割することを「フラグメンテーション」と言います。フラグメンテーションによって分割されたパケットはパケットを受け取った先で結合されて上位層に渡すようになってます。
MSSとは?
続いてMSSですが、これは「Maximum Segment Size」の略で、TCPにおける1セグメントで送受信可能なデータの最大長のことです。
簡単に言うと、MTUからIPヘッダーとTCPヘッダーを抜いた、実データ(ペイロード)になりますね。
MTUは以下の図のように「IPヘッダー(20バイト)+TCPヘッダー(20バイト)+データ」で構成されるので、MTUが1500バイトの場合、このデータ部分の「1460バイト」がMSSの値となります。

MTUとMSSの使い分けは?
MTUとMSSの違い、それは「サイズとレイヤー(イーサネットやIP、TCP)の違い」と表現するのが良いのですが、もう少し具体的に説明すると、以下のようになります。
例外的にNW機器でMSSを変換することもあるのですが、MSSはTCPレベルなので、端末同士で決めています。
ジャンボフレームとは?
これまでデータを細かく分割することで、伝送効率を上げることができると話をしてきましたが、最近の高速化された10Gbpsなどの規格では短時間に小さなフレームが大量にやり取りされることになり、通信機器に負荷が掛かりすぎてしまう恐れが出てきます。
そこで、フレームのサイズの制限を外して、一つのフレームサイズを大きくして、高速な回線でも通信効率を向上させための仕組みとしてジャンボフレームが出てきました。フレームサイズは機器により様々なんですが、8,000~16,000バイト程度に設定されることが多いとされているようです。
ただし、 ジャンボフレームに対応していない機器では1,500バイト目以降のデータが受信できず捨てられてしまい通信が成立しないので、ネットワークに参加する機器のすべてが対応している必要があります!
新規にネットワークを構築するときは良いですが、既存ネットワークで実現するときは難易度高いかもしれませんね。
まとめ
今回はパケットを分割する理由や分割したパケットのサイズとしてMTUやMSS、更にはジャンボフレームなどに関して調べてみました。
データを分割したパケットのサイズをきちんと決めておかないと、通信が上手く成立しないので、非常に重要なことなんですね。
それにしても、こんなに沢山の大きなデータを1500バイトに分割して、ネットワークの長い道のりをあっという間に通り抜けていくって、改めてコンピュータの世界の凄さを感じますね。
以上です!
参考URL)