我一直在阅读关于MAC地址和IP地址之间的差异,以及为什么我们需要它们两者的原因。
总而言之,MAC地址是每个设备的物理不可更改的唯一ID,而IP地址是已分配,可更改和虚拟的。类似地,MAC地址就像具有永久名称的人一样,而IP地址是他们当前居住的地方。
在现实世界中,我们借助电话簿链接地址和名称。哪种机制将IP地址链接到MAC地址,该机制在网络中的何处?
我一直在阅读关于MAC地址和IP地址之间的差异,以及为什么我们需要它们两者的原因。
总而言之,MAC地址是每个设备的物理不可更改的唯一ID,而IP地址是已分配,可更改和虚拟的。类似地,MAC地址就像具有永久名称的人一样,而IP地址是他们当前居住的地方。
在现实世界中,我们借助电话簿链接地址和名称。哪种机制将IP地址链接到MAC地址,该机制在网络中的何处?
Answers:
该机制称为地址解析协议(ARP)。每个以太网IPv4设备ARP解析目标IP的以太网mac地址。IP到mac的映射存储在每个设备的ARP表(比喻为电话簿)中。
为简化起见:在大多数情况下,要解析与IP地址关联的MAC地址,可以发送广播ARP数据包(至网络中的所有设备),询问谁拥有该IP地址。具有该IP地址的设备会回复ARP(及其MAC地址)。
由于该问题是用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不是答案。
最佳答案是好的。如果有帮助,这里以电话簿类比为例进行描述。括号中的实际网络术语。
根据他们的名字(IP地址),您知道他们居住在您的邻居(广播域)中。首先,您在电话簿(ARP缓存)中查找是否已经知道其地址(MAC地址)。如果他们不在电话簿中,则您到外面喊(广播),“史蒂夫住在哪里?” 足够大,每个人都可以听到(ARP请求)。假设史蒂夫确实确实住在那儿并且他醒了,他只对您回答,不大喊:“这是我的地址”(ARP回复)。您将其记录在电话簿中,以备将来参考(ARP缓存)。
MAC地址可以更改。在Linux上,对于大多数Windows,请使用ip或ifconfig查看网络接口的驱动程序设置。
你什么都不转换。MAC地址在OSI模型的第2层上,IP在第3层上。对于IPv4,使用ARP找出哪个MAC(第2层)地址属于某个IP(第3层)地址。对于IPv6,使用ICMPv6(邻居发现)。
网络堆栈首先在路由表中查找目标IP,由此确定两件事。
请注意,下一跳IP地址是纯粹的本地概念,它永远不会成为网络上发送的数据包的一部分。
如果要在多点链路层(例如以太网等)上发送数据包,则操作系统会在其arp(ipv4)或邻居发现(ipv6)表中查找下一跳。如果找到非陈旧条目,则它具有所需的MAC地址并可以发送数据包。
如果没有可用的条目,则将发往该下一跳的数据包置于保留状态,并发出请求以查找MAC地址。此处的机制在v4和v6之间略有不同。
在v4中,将发送arp请求。这通常是广播,但是在某些情况下,如果主机具有陈旧的条目,则它可能会首先尝试单播请求,并且只有在失败时才回退广播。回复通常是单播的。
在v6中,向邻居请求请求被发送到从下一跳地址生成的多播地址。目标回复单播邻居通告。主机还可以将邻居通告发送到“所有节点多播”(也称为有效广播)组,以刷新其对等邻居发现缓存中的条目。