- MAC地址、IP地址以及ARP协议
★★★3.7 MAC地址、IP地址以及ARP协议
MAC 地址:以太网的 MAC 子层所使用的地址;
IP 地址:TCP/IP 体系结构网际层所使用的地址;
ARP 协议:属于 TCP/IP 体系结构的网际层,其作用是已知设备所分配到的 IP 地址,使用 ARP 协议可以通过该 IP 地址获取到设备的 MAC 地址。

3.7.1 MAC地址
★MAC地址
如下图所示,在总线型网络中,如果多台主机通过总线连接在一起,假设一台主机(假设为主机 C )要给另一台主机(假设为主机 D )发送数据,但由于多台主机使用的是同一根总线,所以主机 C 发送的数据实际上发送给了连接总线的其他所有主机,那么除主机 C 外的这些主机该如何知道主机 C 发送的数据是否是发送给自己的呢? -> 这就需要对每台主机进行编制(数据链路层地址 - MAC 地址),所以主机 C 在发送数据时,还应给数据附上目的地址,这样剩余的主机通过比对数据的目的地址和自身地址,就可以确定数据是否是发送给自己的了。
在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。


注意:MAC 地址又被称为硬件地址或物理地址,这是因为 MAC 地址一般被固化在网卡的 EEPROM 中,但不意味着 MAC 地址属于网络体系结构中的物理层。

IEEE 802局域网的MAC地址格式


单播:一台主机给总线型网络中的另一台主机发送帧;
多播:一台主机给总线型网络中的其他几台主机发送帧;
广播:一台主机给总线型网络中的其他所有主机发送帧。
IEEE 802局域网的MAC地址发送顺序

★单播MAC地址举例
如下图所示是一个拥有三台主机的总线型以太网,各主机网卡上固化的全球单播MAC地址如下图所示,假设主机 B 要给主机 C 发送单播帧,则主机 B 首先要构建该帧,包括帧首部的目的地址、源地址,要传输的数据载荷等:

然后主机 B 将该单播帧发送出去,则主机 A 和主机 C 都能接收到该帧,然后主机 A 和主机 C 通过比对该单播帧的目的地址和自身地址,就可以确定数据是否是发送给自己的了,若是,则接收该帧,反之则丢弃该帧。

★广播MAC地址举例
如下图所示是一个拥有三台主机的总线型以太网,各主机网卡上固化的全球单播MAC地址如下图所示,假设主机 B 要发送一个广播帧,则主机 B 首先要构建该帧,在帧首部的目的地址字段填入广播地址
FF-FF-FF-FF-FF-FF-FF-FF
,源地址字段填入自己的 MAC 地址,以及帧中的剩余部分:
然后主机 B 将该广播帧发送出去,则主机 A 和主机 C 都能接收到该帧,然后主机 A 和主机 C 发现该帧帧首部中的目的地址字段的内容是广播地址,知道该帧是广播帧,于是主机 A 和主机 C 都接收该帧。

★多播MAC地址举例
如下图所示是一个拥有四台主机的总线型以太网,各主机网卡上固化的全球单播MAC地址如下图所示,假设主机 B、C、D 支持 MAC 多播,各用户给自己的主机配置的多播组列表如下图所示,则可知主机 B 属于两个多播组,主机 C 也属于两个多播组,主机 D 不属于任何多播组,假设主机 A 要发送一个多播帧给多播地址
07-E0-12-F6-2A-D8
,则主机 A 首先要构建该帧,在帧首部的目的地址字段填入多播地址07-E0-12-F6-2A-D8
,源地址字段填入自己的 MAC 地址,以及帧中的剩余部分:
然后主机 A 将该多播帧发送出去,则主机 B、C、D 都能接收到该帧,然后主机 B、C、D 通过比对该多播帧的目的地址和自身多播组列表中的地址,就可以确定是否接收该帧,若自身多播组列表中包含该多播帧的目的地址,则接收该帧,反之则丢弃该帧。

3.7.2 IP地址
★IP地址
IP地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络;
- 主机编号:标识同一网络上的不同主机。

★数据包转发过程中IP地址与MAC地址的变化情况
如下图所示,假设主机 H1 要给主机 H2 发送一个数据包,其中主机 H1、H2,路由器 R1、R2 的 IP 地址和 MAC 地址用符号来表示,重点在于察看在数据包发送的过程中,网络层封装 IP 数据报时,源 IP 地址和目的 IP 地址应该填写什么;数据链路层封装帧时,源 MAC 地址和目的 MAC 地址应该填写什么。因此,我们忽略网络体系结构中,除网络层和数据链路层外的其他各层,可以想象成各网络层进行水平方向的逻辑通信,各数据链路层进行水平方向的逻辑通信。
地址变化情况如下图所示:



- 如何根据 IP 地址得到 MAC 地址,是 ARP 协议的内容。

★3.7.3 ARP协议
ARP协议(Address Resolution Protocol,即地址解析协议),用于通过 IP 地址找到其相应的 MAC 地址。
如下图所示,是一个拥有三台主机的总线型网络,每台主机所配置的 IP 地址和其网卡上固化的 MAC 地址如下图所示,假设主机 B 要给主机 C 发送数据包,主机 B 知道主机 C 的 IP 地址,但不知道主机 C 的 MAC 地址,那主机 B 在数据链路层封装 MAC 帧时,就无法填写目的 MAC 地址,所以主机 B 需要根据主机 C 的 IP 地址,来得到它的 MAC 地址。
在主机 B 知道了主机 C 的 IP 地址后,首先会在它自己的 ARP 高速缓存表中查找主机 C 的 IP 地址,然后看看能不能找到,若能找到主机 C 的 IP 地址,就能得到对应的主机 C 的 MAC 地址;

若不能找到,那主机 B 就会发送 ARP 请求报文来获取主机 C 的 MAC 地址,主机 B 会发送封装有 ARP 请求报文的广播帧**,由于是广播帧,所以主机 A 和主机 C 都能接收到该帧,主机 A 将接收到的该帧交付上层处理,上层的 ARP 进程解析 ARP 请求报文,发现所询问的 IP 地址不是自己的 IP 地址,因此不予理会;主机 C 将接收到的该帧交付上层处理,上层的 ARP 进程解析 ARP 请求报文,发现所询问的 IP 地址是自己的 IP 地址,于是要进行响应:主机 C 首先将请求报文中所携带的主机 B 的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中,然后给主机 B 发送 ARP 响应报文,以告知自己的 MAC 地址**。

主机 C 在给主机 B 发送封装有 ARP 响应报文的单播帧时,主机 A 和主机 B 都会收到该帧,然后根据前面所述的 “单播MAC地址举例”,主机 A 会丢弃该单播帧,主机 B 会接收该单播帧,然后交付上层处理,上层的 ARP 进程解析 ARP 响应报文,将其所包含的主机 C 的 IP 地址和 MAC 地址记录到自己的 ARP 高速缓存表里,然后主机 B 就可以给主机 C 发送之前想要发送的数据包了。


注意:ARP 请求报文发送时是被封装在广播帧中进行发送,ARP 响应报文发送时是被封装在单播帧中进行发送。
注意:ARP 协议只能在一段链路或一个网络上使用,而不能跨网络使用。