我试图了解ARP的工作原理和ARP数据包的格式。请看下图中带圆圈的字段:
在此示例中,他们在两个字段中都给出了不同的MAC地址。我看不出有多可能?在这两种情况下会有什么不同?
如果没有,为什么我们在封装它时添加冗余信息呢?
虽然我确实认为,因为它们有不同的长度(一个是固定的6个字节,而另一个是变量的..为什么?)它们必须用于不同的地址。
答案 0 :(得分:1)
这可能是一个合法的错字。 ARP数据包中的地址长度是可变的,因为不同的第2层协议具有不同的地址长度。不要误以为只考虑以太网。
您应该学习RFC 826以了解ARP:
该协议最初是为DEC / Intel / Xerox 10Mbit设计的 以太网。它被推广为允许它用于其他 网络类型。大部分讨论将针对 10Mbit以太网。如果适用,概括将遵循 特定于以太网的讨论。
见强调文本:
为什么这样做?
绝对不希望定期广播。想象一下100 单个以太网上的工作站,每个广播地址 每10分钟一次的分辨率信息(作为一个可能的一组 参数)。这是每6秒一个数据包。这差不多了 合理,但它有什么用?工作站一般都不是 将要互相交谈(因此有100个没用 表中的条目);他们将主要与大型机,文件交谈 服务器或网桥,但仅限于少数其他工作站 (例如,用于交互式对话)。协议描述 在本文中,只需要一次分发信息 (可能)每次启动机器。
此格式不允许执行多个分辨率 相同的包。这是为了简单起见。如果事情是多路复用的 数据包格式将难以消化,而且大部分都是如此 这些信息可能是无偿的。想想一座会谈的桥梁 四个协议告诉工作站所有四个协议地址, 其中三个工作站可能永远不会使用。
此格式允许在回复时重用数据包缓冲区 生成的;回复与请求的长度相同,而且有几个 字段是一样的。
硬件字段(ar $ hrd)的值取自此列表 目的。目前唯一定义的值是10Mbit以太网 (ares_hrd $ Ethernet = 1)。一直有人谈论使用这个协议 对于分组无线电网络,这将需要另一个值 与希望使用该协议的其他未来硬件介质一样。
对于10Mbit以太网,协议字段(ar $ pro)中的值为 取自set ether_type $。这是一种自然的重复使用 分配的协议类型。将其与操作码(ar $ op)相结合即可 有效地减少了可以解决的协议数量 这个协议会使监视器/调试器更复杂(见 下面的网络监控和调试)。希望我们愿意 从未看过32768协议,但墨菲制定了一些不允许的法律 我们做出这个假设。
理论上,长度字段(ar $ hln和ar $ pln)是多余的,因为 协议地址的长度应由硬件决定 type(在ar $ hrd中找到)和协议类型(在ar $ pro中找到)。它是 包含用于可选的一致性检查和网络监控 和调试(见下文)。
操作码用于确定这是否是请求(可能导致请求) 回复)或回复上一个请求。这是16位 过度杀伤,但需要一个旗帜(场)。
发件人硬件地址和发件人协议地址是绝对必要的。这些领域被放入了 翻译表。
目标协议地址在请求表中是必需的 数据包使机器可以确定是否进入 发送者信息在表格中或发送回复。它不是 如果只是假设回复,则必须在回复表格中提供 由请求引起的。它包括完整性,网络 监控,并简化建议的处理算法 如上所述(直到放置之后才看操作码 表中的发件人信息。)
包含目标硬件地址,以实现完整性和网络性 监控。它在请求表中没有任何意义,因为它就是这样 机器正在请求的号码。它在回复表中的含义 是发出请求的机器的地址。在一些 实现(无法查看14.byte以太网 例如,这可能会节省一些寄存器改组或堆栈 通过将此字段作为硬件发送到硬件驱动程序来实现空间 数据包的目的地址。
地址之间没有填充字节。分组数据应该 被视为一个字节流,其中只定义了3个字节对 是最有意义的单词(ar $ hrd,ar $ pro和ar $ op) 字节优先(以太网/ PDP-10字节样式)。