我知道IP地址是分层的,因此整个Internet上的路由器都知道转发数据包的方向。对于MAC地址,没有层次结构,因此无法进行数据包转发。因此,MAC地址不用于数据包传输。
我认为它没有理由坐在那里。所以我的问题是,在数据包传输期间,MAC地址究竟在哪里起作用?
我知道IP地址是分层的,因此整个Internet上的路由器都知道转发数据包的方向。对于MAC地址,没有层次结构,因此无法进行数据包转发。因此,MAC地址不用于数据包传输。
我认为它没有理由坐在那里。所以我的问题是,在数据包传输期间,MAC地址究竟在哪里起作用?
Answers:
TL; DR> MAC地址是以太网(和其他一些类似的标准,例如WiFi)的底层组件。它们使设备可以与本地物理网络(LAN)上的计算机进行通信,并且不能跨Internet路由-因为理论上物理硬件可以插入世界任何地方。
相比之下,IP地址覆盖了整个Internet,即使它们需要多个跃点才能到达目的地,路由器也使用它们来确定向何处发送数据-但是它们对与本地网络上的物理硬件没有帮助。
如果我们找到了比以太网更好的标准,它可能不会使用MAC地址,但是来自Internet的IP流量仍然可以通过它,即使Internet上的其他人从未听说过它。
如果我们找到了比IP更好的标准(例如,如果所有IPv4地址都用完了,例如IPv6),那么大多数以太网硬件都可以承载新的流量,而无需进行修改-只需进行简单的软件/固件更新就可以修复其余大部分流量。
MAC地址是实现本地以太网(或wifi)网络功能所必需的。即使共享物理连接,它们也可以使网络设备吸引单个直接连接设备的注意力。当在单个组织中将数千个设备连接在一起时,这可能很重要。它们在更广泛的Internet上不起作用。
要真正理解该问题的答案,您需要了解OSI(有时称为7层)模型。
为了在不具有直接物理连接的独立计算机上运行的2个应用程序之间进行通信,需要进行大量工作。
在过去,每个应用程序都会确切地知道需要运行哪些机器代码指令才能产生适当的信号,该信号将到达远端并可以被该应用程序解码。所有通信实际上都是点对点的,必须编写软件以适合要部署它的确切情况。显然,这是不可持续的。
取而代之的是,网络问题被分为几层,每一层都知道如何与远程计算机上的匹配层进行通信,以及如何与本地计算机上的该层下(有时是上一层)进行通信。它对其他任何地方一无所知-因此您的网络浏览器不需要关心它是否在使用令牌环,以太网或wifi网络的计算机上运行-绝对不需要知道什么硬件远程计算机使用。
为了使这项工作可行,7层模型使用了一个类似于嵌套信封的系统。应用程序将创建其数据并将其包装在信封中以供操作系统提供。操作系统将其包装在另一个信封中,并将其传递给网络驱动程序。网络驱动程序将其包裹在另一个信封中,然后放入物理电缆中。等等。
底层(第1层)是物理层。这是电线,晶体管和无线电波的层,在这一层上,通信主要只是一个无数的交流。数据到物理连接的任何地方。您使用CAT-5电缆将计算机的网络端口插入交换机。
第2层是数据链路层。这提供了一些结构,并提供了一些错误检测和纠正功能,以及有关应注意该消息的物理连接设备(此处的物理连接实际上可以通过wifi)的指示。这是MAC地址发挥作用的层,稍后我们将再次讨论。但是,MAC地址并不是这一层的唯一可能性。例如,令牌环网络需要不同的数据链路实现。
第三层是网络层。这是IP工作的层(尽管它也不是唯一的网络层协议),正是这一层使计算机能够发送一条消息,该消息可以到达“网络”上任何位置的任何计算机。所讨论的机器之间不需要直接连接。
第4-7层是更高级别的协议。它们与硬件的距离越来越远,与应用程序的距离也越来越近。例如,TCP位于IP之上,并提供了在消息丢失时自动重新发送消息的机制。
因此,MAC地址在第2层工作,并允许2个物理上相互连接的计算机发送消息,而这些消息将被共享相同物理连接的其他计算机忽略。
假设我有一个应用程序想要向IP地址为8.8.8.8的计算机发送一些数据
第3层将数据包装在包含IP地址8.8.8.8等内容的信封中,然后将其移交给第2层。
第2层查看此IP地址,并确定它直接连接到的计算机能够处理此消息。它将具有一个查找表,其中包含选择的直接连接IP地址以及该计算机中网卡的相应MAC地址。该查找表是使用称为ARP的协议构造的,该协议允许网卡询问其他直接连接的设备的问题。以太网保留一个特殊的MAC地址FF:FF:FF:FF:FF:FF,该地址使设备可以与所有物理连接的设备通信。
如果IP地址在表中(或可以通过ARP解析),它将把第3层信封包装在第2层信封中,并在新标头中添加MAC地址,然后将整个捆绑包传递给第1层的硬件具有匹配的MAC地址的网卡将接收该消息,并且网络驱动程序将打开第2层信封,并将内容传递到希望在特定IP地址接收消息的操作系统的任何部分。
或者,如果IP地址不在本地网络上,则新信封将为此网络接口配置默认网关(即路由器)的MAC地址,并且硬件会将数据包传输到路由器。
路由器会在第2层信封中注意到自己的MAC地址,并打开第2层数据包。它查看3级信封上的IP地址,并计算出下一步需要发送消息的地方,这很可能是您ISP的路由器。如果路由器使用NAT(或类似地址),它甚至可以在此时修改3级信封,以使内部IP地址保持私有。然后,它将把第3层信封包装在一个新的第2层信封中,该信封的地址是ISP路由器的MAC地址,并在此发送消息。
删除外部信封并将内容包装在新信封中的过程将继续进行,直到消息到达目标计算机为止。
然后,当邮件在各层中回送时,信封将继续被撕下,直到最终到达其预期的收件人为止,该收件人将是某个应用程序,希望该应用程序知道如何处理邮件,但不知道如何处理邮件。消息到达那里,甚至没有将响应返回到原始计算机所需的所有步骤。
但这一切都奏效,几乎就像魔术一样!
请注意,网络交换机可以使用MAC地址来优化网络流量。以太网集线器仅将所有传入流量转发到其所有端口,而相比之下,交换机只能将流量转发到数据包的目标MAC地址所连接到的单个端口。这增加了网络的有效带宽。通过针对特定端口,交换机避免了在网络不必要的网段上转发流量。交换机将使用ARP或数据包嗅探来识别哪些设备连接到了哪个端口。交换机完全忽略第二层数据包的内容。
MAC地址是使您的基于本地以太网的网络正常工作的基础知识。本地是指通过电缆或WiFi或通过网络集线器或网络交换机直接连接网络设备。
每个网卡都有一个唯一的MAC地址。在以太网上发送的数据包始终来自MAC地址,然后发送到MAC地址。如果网络适配器正在接收数据包,则它将数据包的目标MAC地址与适配器自己的MAC地址进行比较。如果地址匹配,则处理该包,否则将其丢弃。
有一些特殊的MAC地址,例如ff:ff:ff:ff:ff:ff:ff,这是广播地址,它寻址网络中的每个网络适配器。
IP是在以太网之上的一层上使用的协议。例如,另一个协议是IPX。IP允许连接不同的本地网络,从而形成公司网络或全球互联网。
当您的计算机希望将数据包发送到某个IP地址xxxx时,首先检查目标地址是否与计算机本身位于同一IP网络中。如果xxxx在同一网络中,则可以直接访问目标IP,否则需要将数据包发送到已配置的路由器。
到目前为止,情况似乎变得越来越糟,因为现在我们有两个IP地址:一个是原始IP数据包的目标地址,另一个是我们应该向其发送数据包的设备的IP(下一跳,或者是最后一个跃点)目的地或路由器)。
由于以太网使用MAC地址,因此发送方需要获取下一跳的MAC地址。为此使用了特殊的协议ARP(地址解析协议)。一旦发送者检索到下一跳的MAC地址,他就将该目标MAC地址写入数据包并发送该数据包。
ARP本身是以太网之上的协议,例如IP或IPX。当设备想知道给定IP地址的MAC地址时,它会向广播MAC地址发送一个数据包,询问“谁拥有IP地址yyyy?”。所有设备都接收到该数据包,但是只有IP地址为yyyy的设备才会响应一个数据包“是我”。询问设备接收到答案,现在知道ARP数据包的源MAC地址是要使用的正确MAC地址。当然,结果将被缓存,因此设备无需每次都解析MAC地址。
我几乎忘了提:没有基于MAC地址的路由。低级以太网和MAC地址只能到达同一网络(电缆或无线)上的每个设备。如果您有两个网络,并且它们之间有路由器,则网络A中不能有设备将数据包发送到网络B中设备的MAC地址。网络A中没有设备具有网络B中设备的MAC地址,因此a到此MAC地址的数据包将被网络A中的所有设备(也包括路由器)丢弃。
路由在IP级别完成。可以简单地看到路由器正在执行我在上面的“ IP地址和MAC地址如何一起工作?”部分中描述的操作。路由器将接收其自己的MAC地址但其他IP地址的数据包。然后,他将检查他是否可以直接到达目标IP地址。如果是这样,他将数据包发送到目标。否则,路由器本身也会配置一个上游路由器,并将数据包发送到该路由器。
当然,您可以配置多个路由器。您的家庭路由器将只配置一个上游路由器,但是在Internet骨干网中,大型路由器具有大型路由表,因此他们知道所有数据包的最佳方法。
网络交换机存储在每个端口上看到的MAC地址列表,并且仅将数据包转发到需要查看数据包的端口。
无线访问点通常使用MAC地址进行访问控制。它们仅允许使用正确的密码访问已知设备(MAC地址是唯一的并标识设备)。
DHCP服务器使用MAC地址来识别设备,并为某些设备提供固定的IP地址。
通常,MAC地址(媒体访问控制地址)是网络中设备的标识符。因此,每个NIC(在路由器,PC,网络打印机,服务器等中找到的网络接口控制器)都具有MAC地址。某些服务器内置有多个网卡,因此具有多个MAC地址。MAC地址的长度为6个字节(6个八位字节)。左是最高有效字节,右是最低有效字节。如下图所示,前3个字节是组织唯一标识符。这表示制造此设备的制造商。
这是组织唯一标识符的列表:Standards.ieee.org
这是上面的替代方法:MAC-Vendor-Lookup
几个常见的制造商的示例:
最后3个字节(3个字节)由制造商随机分配。
正如pjc50正确说明的那样,以太网中的MAC地址可帮助交换机确定将哪个数据包发送到哪里。还有一个广播MAC地址。ff:ff:ff:ff:ff:ff:ff用于广播MAC地址。请注意,可以更改MAC地址,因此请小心使用它作为确定的设备标识符!MAC地址也与ARP(地址解析协议)协议一起使用。所以它是如何工作的,PC A用其自己的IP地址,MAC地址,接收方的IP地址和上面提到的广播地址向PC B发送ARP请求(ff:ff:ff:ff:ff:ff :ff)。此后,PC B会检查数据包是否已发送给他。如果是,则PC B发回自己的MAC地址,IP地址,接收方的MAC地址和接收方的IP地址。其他设备丢弃该数据包。
PC A和PC B通常都将成功的连接保存在所谓的ARP缓存中。PC保存连接的方式因设备而异。如果您不知道IP地址,则可以使用反向地址解析协议(RARP)获得IP地址。使用RARP时,设备会与中央客户端联系,并要求其提供IP地址。但是如今这种方法很少使用。
以下技术使用MAC-48标识符格式:
以太网假定要与之通信的另一台计算机(另一台MAC)可从其网络适配器中直接访问。IP没有。IP假定它可以访问整个世界上的任何其他IP,并且即使在当前NAT上,如果它不能在当前子网上访问它,则路由器将在该子网中承载它。网关的概念在第2层或以太网中不存在。
如果您有多台连接到交换机的机器,并且永远不需要通过路由器与其他网络/ Internet进行流量交换,那么您确实不需要启动IP并运行它。当然,应用程序必须在第2层之上实现或提供其自己的协议,因为几乎所有的OS和应用程序都假定您始终想使用TCP / IP。
永远记住,IP中的“ Internet”表示“互连网”,这实际上意味着它比在网络中更多地在网络之间获取流量,尽管显然它也可以(并且)用于此。
MAC地址用于物理传输。以太网适配器对IP一无所知。因此,以太网适配器使用MAC地址来寻址数据包的接收者。
如果以太网适配器对IP有任何了解,那么我们必须升级所有固件以切换到新协议(例如从IPv4到IPV6)。
MAC地址中也包含一些有关制造商的信息。
当用于IPv4的ARP(地址解析协议)或用于IPv6的NDP(邻居发现协议)将IP地址转换为MAC地址以确定帧应发送到的唯一主机时,将使用此功能。
How MAC addresses were used in packet transfer
,然后我认为它是在以太网级别上的。是的,这是一个简单的答案,但我的回答是适合自己的水平:)
为了完成其他人的回答,我要补充说,MAC地址对于路由器比对交换机甚至更重要。我的意思更关键的是,交换机是不是真的有必要为IP网络存在。在向后看20年之前(在RJ-45之前),本地IP网络可以完美地运行而无需交换机。非路由以太网网络只是将设备连接在同一条线上(例如,请参考X base-T以太网技术)。
另一方面,发明了IP网络来支持路由并依赖于MAC和IP寻址方案。
在IP网络中路由数据包意味着,当无法直接访问目标计算机时,它将首先被发送到更接近最终IP目标的另一台计算机(网关)。
就网络数据包报头而言,这意味着发送到网关的数据包在以太网级别报头中将网关的MAC地址作为目标,而IP级别报头则保持不变。
您还应该注意到,MAC地址现在通常表示MAC-48(物理设备地址)或EUI-48(逻辑设备地址),甚至是大型网络中使用的8字节EUI-64地址。MAC过去是Xerox发明的,用于以太网技术,后来被重用于需要识别设备的其他网络传输技术(802.11,蓝牙,光纤通道,蓝牙)。
就像我说的,您可以使用另一个第二层而不是以太网,但是大多数都使用MAC地址作为网络标识符,并且底层的MAC / IP对应方案仍然有效,您仍然可以使用ARP。据我所知,所有IP堆栈都依赖于MAC地址和IP地址之间的对应表。
非IP堆栈还存在其他一些类型的设备节点标识符。例如,X.25不依赖于MAC地址,而是依赖于基于每个连接建立的虚拟通道,或者ATM设备使用SNPA在ATM网络中进行标识。但是X.25或ATM都不是IP堆栈(甚至ATM都将MAC地址格式用作其SNA的一部分,大致相当于ATM的IP地址)。
回想一下切换前的日子。
如果人们是计算机,那么MAC地址就是他们的名字。
假装很多人(计算机)在同一个电话上。每个人都在同时讲话。
您(一台计算机)听到了所有的声音,但是您不知道应该听什么,除非有人在句子开头(数据包)说出您的名字(您的MAC地址)。
"FRED, THERE IS ICE CREAM!"
当然,您还可以收听发送到广播地址的句子。只要认为自己是个大喊大叫的人,
"EVERYONE, THERE IS ICE CREAM!"
随着电话会议上越来越多的人(计算机),您需要过滤的内容也就越多。先进的技术和切换功能使我们可以直接与一个人(计算机/ MAC)进行通信,从而使他们不必费劲地过滤掉所有噪音(并释放更多带宽)。
IP在基本的类比中非常相似,但是它在MAC寻址之上具有更多的功能和层。OSI模型中的第2层和第3层。
MAC地址是必需的,因为“总线”(以太网)上有多个地址。发送者需要能够识别接收者,并向接收者识别自身。
所有硬件总线都需要寻址,因为多个发送者和接收者共享同一条线,并且消息必须发送到特定的接收者,并且还标识原始发送者。
您可以命名为I2C,PCI,以太网。
我们在互联网络中有多个地址(IP地址和硬件地址),因为硬件级别的地址仅位于特定物理网络的本地。当数据报在网络之间传播时,它倾向于保留其网络级地址,但是在此过程中它会多次更改硬件地址。通过某些网络时,它可能根本没有硬件地址,而在另一些网络中,它可能具有不是以太网MAC的硬件地址。(当然,网络地址可以由NAT网关重写,但是每次分组穿过路由器时,硬件地址都会被剥离并替换为不同的地址。)
在过去,网络是共享总线。每个联网设备都连接到同一根电线或集线器,这意味着您发送的每个数据包都被网络上的每个设备接收。
当时的网络软件更简单。每个设备都有一个MAC地址,该地址保证是唯一的。不需要其他任何操作-它所做的就是确保同一网络上没有两个设备具有相同的地址。
如果您的设备想与另一台设备通话,它将发送一个带有收件人MAC地址的数据包,而收件人则会从网络上将其选中。所有其他设备都将忽略它-它没有寻址到其MAC地址。
随着时间的流逝,人们将太多的设备连接到网络上,并且他们无法跟上通信量,因此他们开始分离网络,并使用交换机将两个网络连接在一起。这些交换机有巨大的表,告诉他们每个网络上的哪个MAC地址。如果他们在一个网络上看到一个发往另一个网络上MAC地址的数据包,则他们会将消息复制到另一个网络。但是,他们不会复制所有消息,而仅复制需要转到另一个网络的消息。
这减少了拥塞,并允许更多设备联网,并且可以处理更多总体流量。这是一个分组交换网络。
但是,它并不能解决所有问题,并且存在一个巨大的缺点-随着交换机数量的增加,网络速度变慢。如果将5,000台计算机连接到均与交换机互连的50个不同的网络,则每个交换机必须学习所有5,000个MAC地址并根据该路由来路由数据包。
直到来自不同机构(例如大学)的人们想要将他们的网络连接在一起,这并没有什么大不了的,而所需的桌子本来就很大。如今,跟踪数十万个MAC地址似乎并不重要,但是在1970年代,交换机是计算机本身,内存和速度有限,并且跟踪并快速交换了几包数据包。一百是个问题。
解决方案是使用IP网络并使用路由器。这是建立在基于MAC地址的交换式分组网络之上的。数据包现在包含IP数据包-数据包中的一个数据包,而不是原始数据。
现在,较大的网络已与路由器连接。他们等到看到带有其MAC地址的数据包,然后将IP数据包取出并检查IP地址。然后,他们将IP数据包重新包装到另一个具有新MAC地址接收者的数据包中,并将其发送到新的网络上。该MAC地址可能是新网络上的另一个路由器,但也可能是具有IP地址的计算机。
在当今的网络中,您几乎看不到集线器和总线(在无线网络中,媒体固有地共享),而我的机器直接连接到交换机,而交换机又连接到路由器。
我的机器具有多种算法和协议,因此它知道如何建立网络。
如果我将IP数据包发送到本地网络上的计算机,则我的计算机会将其放入具有正确MAC地址的数据包中。交换机会将其本地切换到正确的网络,并且由于该机器具有正确的MAC地址,因此该机器将接收到它。他们将取出IP数据包,并再次检查IP地址是否也适合该IP地址,并采取相应的措施。
如果我发送了用于互联网其他地方的机器的IP数据包,则我的机器知道将其发送到路由器,因此将其放入带有路由器MAC地址的数据包中。它将再次在我的网络中本地交换,直到它碰到路由器所在的网络,然后路由器将其接收,拉出IP数据包,检查IP数据包,并根据其对Internet的了解,将其发送到另一台路由器上另一个网络,将其包装在带有目标路由器或目标计算机的MAC地址的数据包中。
我已经掩盖了很多小细节,并且正在运行一些真正有趣的算法和协议,这些算法和协议可以使所有功能正常运行,但这就是MAC地址甚至为我们所做的事情的基本故事。
根本区别在于,MAC是由制造商在制造时分配的,而IP地址是在连接时分配的。
MAC是必需的,因为它可用于在连接到网络之前识别设备。但是,由于它是静态分配的,因此几乎是随机分布的,因此它不适合通过单个网络进行有效的路由(这样做将要求地球上的每个设备都具有一个指向地球上所有其他设备的巨大路由表)。因此IP地址是必需的,因为IP地址是在连接时分配的,并且IP地址的分配方式允许更有效的长距离路由(使用IP,大多数设备只需要知道其相邻网络)。
如果只有IP地址,则尚未分配IP地址的设备将无法分辨出是给他们的消息。您如何确定此DHCP是给您的,而不是其他人也同时请求地址分配?
当然,MAC也用于分组发送的其他部分,但是其中大多数用途都是偶然的,并且可以(至少在理论上)由动态分配的号码(例如IP地址)代替。