同一局域网中的主机是否知道它们的 MAC 地址?
网络工程
MAC地址
ARP
2022-02-07 01:12:25
3个回答
简短的回答:在 ARP 完成之前没有发送第一个数据包。为了发送数据包,发送方(通常是操作系统)需要填写其 IP 和以太网报头。因此它不能在 P3 的 MAC 已知(即 ARP 完成)之前发送数据包。
长答案:
主机上发生的事情的想法如下。
- 应用程序 (ping) 获取地址(这可以是 IP 地址或主机名,在后一种情况下有更多步骤)
- 应用程序使用目标 IP 创建一个 ICMP 回显请求数据包(我不太确定,但根据这里应用程序只创建一个没有 IP 标头的 ICMP)
- 应用程序调用相应的操作系统系统调用将数据包发送到提供的 IP 地址
- 操作系统获取数据包并提供 IP 地址,操作系统调用其路由功能来确定下一跳
- 操作系统确定从哪个接口发送数据包(接口也可以作为 ping 的选项提供,至少对于 ping6)
- 操作系统为具有相应源和目标的数据包构造IP头
- 操作系统确定下一跳。由于目标 IP 在同一个子网中,路由功能确定下一跳与目标 IP 相同(如果不是,操作系统会从路由表中确定下一跳)
- next OS 为“下一跳”(此处下一跳也是目标 IP)调用其第 2 层(以太网)处理功能。
- 它检查 ARP 表以获取下一跳的第 2 层地址。如果没有条目,则启动 ARP 解析。请注意,数据包尚未发送。它无法发送,因为操作系统不可能在 dst mac 中放置任何有意义的东西。
- 操作系统等待 ARP 解析。如果成功,则将该条目插入 ARP 表中。操作系统为数据包构造第 2 层标头。现在可以发送数据包了。
- 如果 ARP 解析失败,操作系统将通知应用程序并且 ping 将显示相应的错误消息。
每个主机都维护一个 ARP 缓存,它在其中存储预定义的时间(相当大)此信息。
因此,如果两个主机之间最近发生了通信,则该地址已经在缓存中。
此外,一些主机(取决于它们的操作系统)在它们的接口启动时会发出一个免费的 arp。IE 他们向整个 LAN 通告他们的 IP 地址和 MAC 地址给其他主机,正是为了允许将信息放入缓存中。
不过,我不知道数据包跟踪器是否会生成免费的 arp。
当我尝试从 PC1 ping PC3 时,我预计第一个数据包会超时
尝试使用 PC3 的地址作为目标会触发 ARP 请求。ping 的ICMP 回显请求只能在 ARP 成功后发送。在知道目的地的 MAC 地址之前,甚至没有任何东西可以发送回显请求。
在不知道 PC3 的 MAC 地址的情况下,数据包是如何到达的?
MAC在发送第一个 ping 之前是已知的。由于 ping 尝试使用目标地址,IP 堆栈会在发送第一个回显请求数据包之前解析该地址。
如果 ARP 请求失败(对于未使用的地址),ping 不会因为缺少回复而超时,而是因为缺少地址解析。
其它你可能感兴趣的问题

