概要
転送に使われるデータリンクのMTUはその種類によって大きさが異なる。そのため、経路のMTUより大きなパケットを受信した際には分割処理を行いMTU以下になるまでパケットを分割する必要があります。そうして分割されたパケットは目的の端末で再構築処理を行いデータ通信が実現されます。
ルーターで分割処理を行う場合
分割処理はホストで実行される場合と途中のルーターで行われる場合があります。ここでは途中で実施する方法について解説します。
例としてルーターに約9000オクテットのデータを受信した場合、MTUが1500であることから分割処理が必要となります。下図では6つに分割して送信処理を行い、受信ホストでIPヘッダーを参照して1つに再構築し上位層で使用します。
複数のルーターを経過する場合でも再構築処理は最後の受信ホストで実施されます。その理由を下記にあげます。
- 送信中のデータが同じ経路を通って届く保証がない
- 分割された断片が途中で消失する可能性がある
- 以降のルートで再度分割が必要になるかもしれない
ホストで分割処理を行う場合
前述の経路途中で分割処理を行う場合ルーターに負荷をかけることになります。昨今では高速通信が望まれているが分割処理のほかにもセキュリティのためのフィルタリング処理など高速通信実現の障害になります。その為、経路MTU探索という方法が検討されました。
経路MTU探索は送信ホストから受信ホストまでの経路上で最小のMTUを予め検索しそのサイズに送信ホストで分割し送信する事で経路上での分割処理を必要としない通信方式です。
処理は次のように実行されます。
- 送信ホストでIPヘッダー中の分割禁止フラグを「1」に設定し送信する。
- MTUを超えるパケットを受信すればそのパケットを廃棄し、ICMP到達不能メッセージを使ってMTUの値を送信ホストへ通知する。
- ICMPのMTU値になるように分割処理を行い再送する。
- 上記を繰り返し受信ホストまで送信する。
- ICMPを受信してから10分間はそのMTUを使用し続ける。
TCPの場合経路MTUの情報をもとに最大セグメント長(MSS)を再計算され、それをもとにパケット送信を行います。この処理はネットワーク層ではなくトランスポート層で処理されます。
コメント