IP地址如何映射到MAC地址?


14

我一直在阅读关于MAC地址和IP地址之间的差异,以及为什么我们需要它们两者的原因。

总而言之,MAC地址是每个设备的物理不可更改的唯一ID,而IP地址是已分配,可更改和虚拟的。类似地,MAC地址就像具有永久名称的人一样,而IP地址是他们当前居住的地方。

在现实世界中,我们借助电话簿链接地址和名称。哪种机制将IP地址链接到MAC地址,该机制在网络中的何处?


5
复习您的问题后,我认为您会从一本好书中受益。考虑按照《TCP / IP插图说明》第一卷进行研究。1:史蒂文斯的协议(FYI,1993年版通常被认为比2011年重新发行要好,尽管1993年版仅涵盖IPv4的深度)。
Mike Pennington 2014年

“插图网络:TCP / IP如何在现代网络中工作”和/或“ TCP / IP指南:全面的插图Internet协议参考”也可能值得一看。
Jens Link

4
@MikePennington谢谢,与“ RTFM”和-1相比,这是一种很好的表达方式。我现在正在网上阅读它:)
CodyBugstein 2014年


1
实际上,MAC地址既不是物理的,也不是不变的,也不是唯一的。我已经看到设备在每次重新启动时都会随机分配其MAC。对于几乎任何平台,几乎都可以使用实用程序来临时或永久更改几乎每个接口的MAC。iOS 8甚至会随机分配wifi MAC来扫描网络。
MacLemon

Answers:


19

该机制称为地址解析协议(ARP)。每个以太网IPv4设备ARP解析目标IP的以太网mac地址。IP到mac的映射存储在每个设备的ARP表(比喻为电话簿)中。

为简化起见:在大多数情况下,要解析与IP地址关联的MAC地址,可以发送广播ARP数据包(至网络中的所有设备),询问谁拥有该IP地址。具有该IP地址的设备会回复ARP(及其MAC地址)。


在大多数情况下,它只是从本地arp表中查找。它只是第一次进行广播
Cruncher 2014年

^是的,当然,在找到设备MAC之后,它会在ARP表中存储一段时间(几分钟),因此不必为每个数据包重复ARP查询过程。
mulaz 2014年

哦,我没意识到几分钟后便掉了桌子。我以为它举行了一段时间。这对ARP毒害意味着您需要准频繁发送ARP响应吗?
Cruncher 2014年

是的,“真实”主机不得将任何数据包发送到中毒的计算机,否则该计算机将存储“真实” MAC。
mulaz 2014年

1
取决于您要实现的目标。
mulaz 2014年

13

由于该问题是用IPv6标记的,因此我将回答这个问题,因为IPv6与IPv4完全不同。

首先,没有ARPv6之类的东西。第2层和IPv6地址之间的映射是通过NCMP(邻居发现协议)完成的,该协议是通过ICMPv6发送的。因此,您不能像遗留IP的习惯那样忽略ICMPv6并将其过滤掉。NDP提供了此处感兴趣的两种消息类型:“邻居请求”和“邻居广告”。想要学习特定IP地址的链路层地址的节点将邻居请求发送到相应的链路本地被请求节点多播地址-IPv6不再广播。

例如,如果所讨论的地址为2001:db8::0011:2233:4455:6677,则相应的被请求节点多播地址为ff02::1:ff55:6677,而相应的以太网多播地址为33:33:ff:55:66:77。地址结尾处的所有节点都*55:6677属于该多播组,并且将侦听该多播组-这很可能只是目标系统本身。邻居请求还包含请求系统的单播IPv6地址和MAC地址。

目标节点收到消息后,会对其邻居广告进行应答,该消息将被发送到请求节点的单播地址(链路层和IPv6)。因此,请求节点学习目标节点的MAC地址。

是的,NDP欺骗的工作原理类似于ARP欺骗。不,IPsec不是答案。


ARP本身不能使用,因为它是为4字节网络层地址(即IPv4)制作的。 ”这不是事实。ARP使用地址长度字段来指定第2层和第3层地址的地址长度(最多255个八位字节)(请参阅RFC 826)。ARP无法与IPv6一起使用的原因是因为IPv6没有广播。
罗恩·莫平

1
出于安全性考虑,ARP在v6中被NDP取代(然后,像所有良好的v6-adjacent协议一样,经历了明显的功能蠕变),不是因为v6没有广播-ARP仅使用L2广播,并且很容易扩展为提供v6地址。
尼克·巴斯汀,2016年

2
我不知道首先出于安全原因是否替换了ARP。据我所知,ICMPv6希望涵盖所有控制协议。副作用是,可以通过IPsec保护ICMPv6。但是,IPsec需要密钥交换,而IKE在UDP上运行-UDP需要IP地址。NDP的一项任务是协商IP地址,并且手动密钥交换无法扩展,因此NDP + IPsec =安全NDP的想法无法通过这种方式工作。诸如SeND之类的替代产品尚未推出(可能永远不会)。最后,我看不出NDP相对于ARP的安全性优势。

4

最佳答案是好的。如果有帮助,这里以电话簿类比为例进行描述。括号中的实际网络术语。

根据他们的名字(IP地址),您知道他们居住在您的邻居(广播域)中。首先,您在电话簿(ARP缓存)中查找是否已经知道其地址(MAC地址)。如果他们不在电话簿中,则您到外面喊(广播),“史蒂夫住在哪里?” 足够大,每个人都可以听到(ARP请求)。假设史蒂夫确实确实住在那儿并且他醒了,他只对您回答,不大喊:“这是我的地址”(ARP回复)。您将其记录在电话簿中,以备将来参考(ARP缓存)。


当然。对我来说这是一个有趣的练习。诸如广播/单播之类的真实东西并不能完美地映射到类比(喊/说话/邮件?)上,所以要加些盐。
Jacktose

编辑:我后来在类比中使用了MAC地址。
Jacktose

2
  1. MAC地址可以更改。在Linux上,对于大多数Windows,请使用ip或ifconfig查看网络接口的驱动程序设置。

  2. 你什么都不转换。MAC地址在OSI模型的第2层上,IP在第3层上。对于IPv4,使用ARP找出哪个MAC(第2层)地址属于某个IP(第3层)地址。对于IPv6,使用ICMPv6(邻居发现)。


抱歉,我应该说“翻译”而不是“转换”
CodyBugstein 2014年

0

地址解析协议(ARP)

IP地址---> ARP ---> MAC地址

MAC地址---> RARP ---> IP地址

IP地址=逻辑地址[32位]

MAC地址=物理地址[48位]

网络层(IP)----> ARP --->数据链路层(MAC)

网络层中需要IP地址来标识源/目标主机。

数据链路层中需要MAC地址来标识源/目标主机。


您对RARP的看法是错误的(很多人有这个错误的想法)。这是一台主机过去用来确定其自己的IP地址而不是其他主机的IP地址的东西。不再使用。
罗恩·莫平

0

网络堆栈首先在路由表中查找目标IP,由此确定两件事。

  1. 数据包应通过哪个接口发送。
  2. 下一跳的IP地址是什么。如果在路由表中未指定下一跳,则将目标IP用作下一跳。

请注意,下一跳IP地址是纯粹的本地概念,它永远不会成为网络上发送的数据包的一部分。

如果要在多点链路层(例如以太网等)上发送数据包,则操作系统会在其arp(ipv4)或邻居发现(ipv6)表中查找下一跳。如果找到非陈旧条目,则它具有所需的MAC地址并可以发送数据包。

如果没有可用的条目,则将发往该下一跳的数据包置于保留状态,并发出请求以查找MAC地址。此处的机制在v4和v6之间略有不同。

在v4中,将发送arp请求。这通常是广播,但是在某些情况下,如果主机具有陈旧的条目,则它可能会首先尝试单播请求,并且只有在失败时才回退广播。回复通常是单播的。

在v6中,向邻居请求请求被发送到从下一跳地址生成的多播地址。目标回复单播邻居通告。主机还可以将邻居通告发送到“所有节点多播”(也称为有效广播)组,以刷新其对等邻居发现缓存中的条目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.