最小のMTUサイズとは?
RFC1812にIPv4の最小MTUが576と書いているって見たんだけれど、そうじゃないような。MTUを576にしてパケットフラグメントを防ぐテクニックがあるよ、とは書いているけれど、最小MTUサイズは576バイトと明示してはいないなぁ。
2011-05-26 17:51:14@SugenTeleVision IPv4の最小MTUは定義されていまでんが、そもそも、MTUの最小値を576以上にすることが、受信ではMUST、送信ではSHOULDですね(RFC1122)
2011-06-06 19:54:56@yogata それはパケットの送信ホストの制約で、リンクMTUの最小値の制限はないので、「最小MTU」が「フラグメントされない最大データグラムサイズ」とすると「IPv4では最小MTUの定義はない」ということかな、と私は解釈しています。
2011-06-06 20:08:42@SugenTeleVision 最小MTU値の制約は,ホストにはあるがリンクにはない,というのはそのとおりだと思います.パケットを送るホストに制約がある点を受けて,(ipv4を含む)最小MTU値がある,という意図です.
2011-06-06 20:23:45@SugenTeleVision すみません,私は発言はおかしいですね.最大MTUサイズがリンクにひもづいているのに,最小MTUサイズはホストにひもづいていると言っている.
2011-06-06 20:26:39@yogata ぐぅ、たびたび途中ですんません。IPv4のそれはあくまでEMTU_Sという最小MTUとよくにた違うものかなーと感じたり。
2011-06-06 20:29:37@SugenTeleVision ホストが送信するフレームサイズは,最大値がリンクによって制限され,最小値はEMTU_Sによって制限される,要は全く関連のない2つの値で制限される,と理解しました.
2011-06-06 20:33:39@SugenTeleVision 最小MTUサイズとホストが送る最小フレームサイズが混乱していました.最小MTUサイズはリンクMTUの最小値ですね.MTUサイズがとる範囲はリンクで決まる.一方で送信するフレームサイズの範囲はRFC1122の576バイトとリンクMTUで決まる.
2011-06-06 20:56:37@SugenTeleVision 例えばイーサネットだと最小MTUサイズは46ですが,RFC1122によるホスト側の制約により,実効的な最小MTUサイズは576バイトになる.
2011-06-06 20:58:08@yogata あれ? "the IP layer SHOULD use EMTU_S <= 576" なので、PMTUがわからない場合は576以下にしなさいと言っているだけで、576固定ではないですよね。
2011-06-06 21:11:41@yogata 接続リンクのMTUが1500でも、宛先ホストまでずっと1500以上であることがわかんないなら576にする。そして接続リンクMTUが46であればEMTU_Sも46になるのではないかと思ってました。
2011-06-06 21:13:18@SugenTeleVision 接続リンクMTUとは独立して576以下であれば何でもOKぐらいに思ってましたが,指摘の通りの方法で決めるほうが素直ですよね.
2011-06-06 21:15:12@yogata フラグメントはそもそも送信ホストでのフラグメント(RFCのlocal fragmentation)と中継ノードでのフラグメント(RFCのfragmentation in any gateway along the path)がありますが、(cont'd.)
2011-06-06 21:24:16@yogata 3.3.3の5,6段落を好意的に解釈するとローカルフラグメントを避けたければ、リンクMTU以下かつ576以下にすることになるんでしょうね。そうでなければ、リンクMTUが46でも576で出しても厳密には違反ではない気がします。パケット作った瞬間に分割されるだけで。
2011-06-06 21:31:21@SugenTeleVision 読みなおしてみて思ったのは,指摘のとおり「パケット作った瞬間に分割」ということだと思います.MTUがいくつだろうと,結局のところ,ホストに設定されているEMTU_Sの大きさへとパケットを作った瞬間に分割されてしまう,ということだと思います.
2011-06-06 21:36:48@yogata 逆では。EMTU_SはL3の話で、MTUはL2の話なので、EMTU_Sに従って作成したL3データグラムが、必要に応じてMTUに従って分割されてL2に出ていくんじゃないかと。
2011-06-06 21:39:25@yogata EMTU_S must be less than or equal to the MTU of the network interface corresponding to the source address of the datagram.を見落としてました。
2011-06-06 21:41:53@yogata つまり、特に好意的な解釈をしなくとも、(EMTU_S <= 576) && (EMTU_S <= MTU) ですね。
2011-06-06 21:48:32@yogata そしてローカルフラグメントを避ける話はL4以上の話で、ローカルフラグメントできないホストはちゃんと上位層がMSS_S読んでEMTU_S以下になるようにパケットつくれと。できるなら別にいいけど、(L4以上が)作ったそばから(L3で)EMTU_Sに分割されると。
2011-06-06 21:50:39