MAC地址
- 每台主机或路由器的适配器(即网络接口)具有链路层地址。
- 具有多个网络接口的主机或路由器将具有与之相关联的多个链路层地址。
- 链路(二)层交换机并不具有与它们的接口(这些接口是与主机和路由器相连的)相关联的链路层地址。这是因为链路层交换机的任务是在主机与路由器之间承载数据报;交换机透明地执行该项任务。这就是说,主机或路由器不必明确地将帧寻址到其间的交换机。
- 链路层地址有各种不同的称呼:LAN地址(LAN address),物理地址(physical address)或MAC地址(MAC address)。
- 对于大多数局域网而言,MAC地址长度为6字节,共有248个可能的MAC地址。这些6个字节地址通常用十六进制表示法,地址的每个字节被表示成一对十六进制数。
- 尽管MAC地址被设计为永久的,但用软件改变一块适配器的MAC地址现在是可能的。
- 当某适配器要向某些目的适配器发送一个帧时,发送适配器将目的适配器的MAC地址插入到该帧中,并将该帧发送到局域网上。
- 一块适配器可以接收一个并非向它寻址的帧。这样,当适配器接收到一个帧时,将检查该帧中的目的MAC地址是否与它自己的MAC地址匹配。如果匹配,该适配器提取出封装的数据报,并将该数据报沿协议向上传递。如果不匹配,该适配器丢弃该帧,而不会向上传递该网络层数据报。所以,仅当收到该帧时,才会中断目的地。
- 有时某发送适配器的确要让局域网上所有其他适配器来接收并处理它打算发送的帧。在这种情况下,发送适配器在该帧的目的地址字段中插入一个特殊的MAC广播地址(broadcast address)。对于使用6字节地址的局域网来说,广播地址是48个连续的1组成的字符串(即十六进制表示法表示的FF-FF-FF-FF-FF-FF)。
为什么需要MAC地址:保持各层独立
主机和路由器接口除了网络层地址之外还有MAC地址,这有如下几个原因:
- 局域网是为任意网络层协议而设计的,而不只是用于IP和因特网。如果适配器被指派IP地址而不是MAC地址的话,则适配器将不能够方便地支持其他网络协议。
- 如果适配器使用网络层地址而不是MAC地址的话,网络层地址必须存储在适配器的RAM中,并且在每次适配器移动或加电时要重新配置。
- 在适配器中不使用任何地址,让每个适配器将它收到的每帧数据(通常是IP数据报)沿协议向上传递。然后网络层则能够核对网络地址是否匹配。这种选择带来的一个问题是,主机将被局域网上发送的每个帧中断,包括被目的地是在相同广播局域网上的其他结点的帧中断。
- 总之,为了使网络体系结构中各层次成为极为独立的构建模块,不同的层次需要有它们自己的寻址方案。
地址解析协议(Address Resolution Protocol,ARP)
ARP提供了将IP地址转换为链路层地址的机制。而且只为在同一个子网上的主机和路由器接口解析IP地址。
工作原理:
- 发送数据到子网中:
每台主机或路由器在其内存中具有一个ARP表(ARP table),这张表包含IP地址到MAC地址的映射关系。该ARP表业包含一个寿命(TTL)值,它指示了从表中删除每个映射的时间。这张表不必为该子网上的每台主机和路由器都包含一个表项;某些可能从来没有进入到该表中,某些可能已经过期。从一个表项放置到某ARP表中开始,一个表项通常的过期时间是20分钟。
假设主机要发送一个数据报,该数据报要IP寻址到本子网上另一台主机或路由器。发送主机需要获得给定IP地址的目的主机的MAC地址。如果发送方的ARP表具有该目的结点的表现,这个任务是很容易完成的。如果ARP表中当前没有该目的主机的表项,在这种情况下,发送方用ARP协议来解析这个地址。首先,发送方构造一个称为ARP分组(ARP packet)的特殊分组。一个ARP分组有几个字段,包括发送和接收IP地址及MAC地址。ARP查询分组和响应分组都具有相同的格式。ARP查询分组的目的是询问子网上所有其他主机和路由器,以确定对应于要解析的IP地址的那个MAC地址。
主机向它的适配器传递一个ARP查询分组,并且指示适配器应该用MAC广播地址(即FF-FF-FF-FF-FF-FF)来发送这个分组。适配器在链路层帧中封装这个ARP分组,用广播地址作为帧的目的地址,并将该帧传输进子网中。包含该ARP查询的帧能被子网上的所有其他适配器接收到,并且(由于广播地址)每个适配器都把在该帧中的ARP分组向上传递给ARP模块。这些ARP模块中的每个都检查它的IP地址是否与ARP分组中的目的IP地址相匹配。与之匹配的一个给查询主机发送回一个带有所希望映射的响应ARP分组。然后查询主机能够更新它的ARP表,并发送它的IP数据报,该数据报封装在一个链路层帧中,并且该帧的目的MAC就是对先前ARP请求进行响应的主机或路由器的MAC地址。
关于ARP协议有两件事情需要注意。首先,查询ARP报文是在广播帧中发送的,而响应ARP报文在一个标准帧中发送。其次,一个ARP表是自动建立的,即它不需要系统管理员来配置。并且如果某主机与子网断开连接,它的表项最终会从留在子网中的结点的表中删除掉。 - 发送数据报到子网以外
当子网中的某主机要向子网之外(也就是跨越路由器的另一个子网)的主机发送网络层数据报的情况。
为了使一个数据报从主机发到另一个子网上的主机,该数据报必须首先发送给路由器接口,它是通往最终目的地路径上的第一跳路由器的IP地址。因此,对于该帧来说,适当的MAC地址是路由器接口的适配器地址。通过使用ARP协议,一旦发送适配器有了这个MAC地址,它创建一个帧(包含了寻址到另一子网主机IP地址的数据报),并把该帧发送到子网;在子网上的路由器适配器看到该链路层帧是向它寻址的,因此把这个帧传递给路由器的网络层。
路由器必须决定该数据报要被转发的正确接口。这是通过查询路由器中的转发表来完成的。转发表告诉这台路由器该数据报要通过路由器接口转发,然后该接口把这个数据报传递给它的适配器,适配器把该数据报封装到一个新的帧中,并且将该帧发送进另一个子网中。这时,该帧的目的MAC地址确实是最终目的地MAC地址。路由器也是通过ARP获得目的地MAC地址。