【问题标题】:Ethernet Neighbor Discovery?以太网邻居发现?
【发布时间】:2015-05-19 09:20:17
【问题描述】:
我目前正在尝试熟悉以太网网络协议。然而,在查看标准时,以太网帧需要一个目标 MAC 地址,而源地址 MAC 通常被编程到设备上。我的问题是设备如何获得初始目标地址。例如,当您第一次将计算机插入网络时,它如何发现它的邻居 MAC 地址。就像您需要与默认网关交谈以获取 IP 地址以将数据发送到网络之外。我已尝试查看标准,但不确定是否准确搜索。
我找到了这篇 wiki 文章 Link Layer Discovery Protocol,但它看起来在 2005 年已经标准化,而以太网比这更早。那么在这之前做了什么?它似乎也不仅仅是提供 MAC 地址。
【问题讨论】:
标签:
networking
protocols
network-protocols
ethernet
mac-address
【解决方案1】:
首先,在IP中,当一个节点想要发现具有某个IP地址的设备的以太网地址时,它使用地址解析协议(ARP)。它向以太网广播地址 FF:FF:FF:FF:FF:FF 发送 ARP 消息,询问“谁有地址 x.x.x.x?”。 LAN 中的每个节点都接收广播并将其传递给 ARP 实现。如果接收节点没有该 IP 地址,它只会丢弃 ARP 消息。如果它有它,它会响应告诉它是该 IP 地址的所有者。如果这是您正在寻找的内容,请阅读http://en.wikipedia.org/wiki/Address_Resolution_Protocol。通过这种方式,源节点可以获知目标节点的硬件地址(具有预期的 IP 地址)并将映射 IP-以太网存储在其 ARP 缓存中。目标节点和所有其他节点学习源节点的映射。您也可以去预订 Comer 的“Internetworking with TCP/IP”。
这是使用 Wireshark 读取的 ARP 消息示例:
No. Time Source Destination Protocol Length Info
11 0.620140000 CameoCom_e9:0b:a5 Broadcast ARP 42 Who has 192.168.2.104? Tell 192.168.2.1
Frame 11: 42 bytes on wire (336 bits), 42 bytes captured (336 bits) on interface 0
Interface id: 0 (\Device\NPF_{7E4440AD-DCD2-4498-BC69-E8DF0CEB48AB})
Encapsulation type: Ethernet (1)
Arrival Time: Dec 20, 2012 01:10:07.389971000 Argentina Standard Time
[Time shift for this packet: 0.000000000 seconds]
Epoch Time: 1355976607.389971000 seconds
[Time delta from previous captured frame: 0.117128000 seconds]
[Time delta from previous displayed frame: 0.117128000 seconds]
[Time since reference or first frame: 0.620140000 seconds]
Frame Number: 11
Frame Length: 42 bytes (336 bits)
Capture Length: 42 bytes (336 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:ethertype:arp]
[Coloring Rule Name: ARP]
[Coloring Rule String: arp]
Ethernet II, Src: CameoCom_e9:0b:a5 (00:18:e7:e9:0b:a5), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Destination: Broadcast (ff:ff:ff:ff:ff:ff)
Address: Broadcast (ff:ff:ff:ff:ff:ff)
.... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
.... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
Source: CameoCom_e9:0b:a5 (00:18:e7:e9:0b:a5)
Address: CameoCom_e9:0b:a5 (00:18:e7:e9:0b:a5)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Type: ARP (0x0806)
Address Resolution Protocol (request)
Hardware type: Ethernet (1)
Protocol type: IP (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (1)
Sender MAC address: CameoCom_e9:0b:a5 (00:18:e7:e9:0b:a5)
Sender IP address: 192.168.2.1 (192.168.2.1)
Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
Target IP address: 192.168.2.104 (192.168.2.104)
如果您不使用 IP,您仍然可以使用此技术。如果您实现自己的第 2 层或第 3 层协议,节点可以向以太网广播发送消息以了解邻居的地址(您可以使用 ARP 或您自己的实现)。
节点还可以嗅探 LAN 流量,了解所有发送消息的邻居的硬件地址。
我认为有了这些信息,您可以根据自己的需要弄清楚如何去做。