我一直在阅读MAC和IP地址之间的差异,以及为什么我们都需要它们。

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

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

评论

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

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

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

相关:superuser.com/questions/623511/…

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

#1 楼

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

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

评论


我认为大多数时候它只是从本地arp表中查找。只是第一次广播

– Cruncher
2014年6月26日13:46

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

– mulaz
2014年6月26日14:03

哦,我没意识到几分钟后便掉了桌子。我以为它举行了一段时间。这是否对ARP毒药意味着您需要准经常发送ARP响应?

– Cruncher
2014年6月26日14:13



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

– mulaz
2014年6月26日14:17

取决于您要实现的目标。

– mulaz
2014年6月26日14:40

#2 楼

因为问题是用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没有广播。

–罗恩·莫潘♦
16-3-29在2:09



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

–尼克·巴斯汀(Nick Bastin)
16-3-29在3:47

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

–反模式
16 Mar 30 '16 at 6:38

#3 楼

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

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

评论


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

–夹克衫
16-3-29在20:26

编辑:我在类比中稍后将地址用于MAC。

–夹克衫
18/12/7在16:52

#4 楼


MAC地址可以更改。在Linux上,对于大多数Windows,请使用ip或ifconfig查看网络接口的驱动程序设置。
你什么都不转换。 MAC地址在OSI模型的第2层上,IP在第3层上。对于IPv4,使用ARP找出哪个MAC(第2层)地址属于某个IP(第3层)地址。对于IPv6,使用ICMPv6(邻居发现)。


评论


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

–科迪·布格斯坦(CodyBugstein)
2014年6月26日上午10:21

#5 楼

地址解析协议(ARP)

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

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

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

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

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

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

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

评论


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

–罗恩·莫潘♦
17年9月8日14:46在

#6 楼

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


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

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

如果要发送数据包然后在多点链路层(例如以太网等)上,操作系统在其arp(ipv4)或邻居发现(ipv6)表中查找下一跳。如果找到不陈旧的条目,则该条目具有所需的MAC地址并可以发送该数据包。保持并发出请求以查找MAC地址。这里的机制在v4和v6之间略有不同。

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

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