2019-10-07

ネットワーク物理層における1500バイトの謎

TCP/IPの勉強をしようと思って『TCP/IP Illustrated, Volume 1』を買いました(古本ですが)。最初から順番に読んでいて、「2 Link Layer」を読み始めました。ここには「Figure 2.1 IEEE 802.2/802.3 encapsulation (RFC 1042) and Ethernet encapsulation (RFC 894)」が掲載されています。この図を見ると、IEEE構造では2バイトのlengthがあり、Ethernet構造には2バイトのtypeがあります。ここについて、本文では次のように書かれています。
Fortunately none of the valid 802 length values is the same as the Ethernet type values, making the two frame formats distinguishable.
これは要するに、Ethernetであればtypeに0x0800(IP datagramの場合)が入りますが、IEEEではlengthとして扱われるものの、0x0800を10進数に換算すると2,048になり最大長の1,500バイトを超えているので、現実的にはあり得ないという事だと思います。従ってtypeとlengthは異なる扱いをするフィールドでありながら、混同されることは無いという、よく考えると不思議な構造になっています。

混同されることがないのは「lengthで表されるデータ部の最大長が1,500である」という事実にかかっています。しかし最大長が1,500になっているのは「決め事」ではないのでしょう。どのような経緯で1,500になっているのか、気になるところです。

0 件のコメント:

コメントを投稿