我一直以为IP数据包,到物理层发送这之间不再有什么操作性了。因为在平常的交流中谈协议,谈到IP这一层基本就止住了,仿佛IP打包后就可以直接发送了是的。然而当我读了《TCP/IP详解卷一:协议》后,我才发现其中并没有那么简单。也许是因为接近真实世界的原因,不同的网络连接方式最终封装的IP都不太一样。
以太网和IEEE 802
以太网和IEEE 802是最常见的两种协议,它们的数据报如下:
目的地址和原地址指的就是物理地址(MAC地址),它们是通过ARP协议获取的(下文会介绍)。
我们将目光放到封装的数据部分,可以看到封装的三种报文(IP、ARP、RARP)类型是一致的,但是后面的数据长度范围并不一致。IEEE802的最小值是36字节(PAD 代表填充字节的意思),而以太网的是46。
在观察除了数据以外的部分,会发现他们源地址、目的地址都在开头并占据相同长度,尾部都是4字节的CRC(检验码),不一样的是IEEE802比以太网多占用了8个字节(长度+几个不明就里的固定字段)。
在我看来以太网应该是IEEE 802的升级版(因为减少了一些不需要的固定字节的占用),然而以太网出现的时间比IEEE 802提前,也就是说IEEE 802才是升级版。更神奇的是RFC标准规定,以太网必须支持而IEEE选择支持。然而我查找了半天资料没有发现两个同时存在的原因,因此我能想到的IEEE 802存在的原因是历史商业竞争的产物了。
ARP:地址解析协议
ARP(Address Resolution Protocol)为协议地址(通常是IP,也就是说可以用在非IP协议上)到硬件地址之间提供一种映射。主要不是用于消息通信,而是为了消息通信而查出硬件地址。
用于以太网的ARP请求或应答报文如下: