若目标 MAC 为广播(FF:FF:FF:FF:FF:FF)或未知 --> 转发到所有端口(除接收端口外,单主机对应单端口的情况)
更新 MAC 地址表:记录源 MAC 与接收端口的映射
帧到达目标设备:
交换机将帧从特定端口发出,最终被目标主机 B 接收
常规情况下,一个主机对应一个交换机的一个端口,每个端口对应着一个独立通信信道。以下图为例,局域网中有四台主机和一个交换机,也就是说主机 A、B、C、D 各自对应交换机的一个端口,主机 A 向主机 C 发送数据的时候,交换机仅将数据转发给主机 C,主机 B 和 D 不会收到该数据,做到了交换机的每个端口是一个独立的碰撞域
还有一种情况,通过二级交换机扩展,可以将多台主机逻辑连接到上级交换机的同一端口,但每台主机仍实际占用下级交换机的一个独立端口。当主机 A 向主机 C 发送数据时,下级交换机仅将数据转发给主机 C,主机 B 和 D 不会收到该数据,从而在物理层面隔离了碰撞域。
二、ARP 协议
ARP 不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。
2.1 ARP 协议的作用
在 1.4 中讲解局域网是如何通信的时候,不知道大家有没有注意到一个问题,就是主机 A 知道主机 D 的 IP 地址,但是主机 A 并不知道主机 D 的 MAC 地址,那么数据帧中的目的 MAC 地址就无法填写,也无法封装数据帧了。
为了解决这个问题,就要引入 ARP 协议了。
ARP 协议是用于建立主机 IP 地址 和 MAC 地址 的映射关系.
在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,但不知道目的主机的 MAC 地址
数据帧被主机收到后,如果数据帧的 MAC 地址与本机不符,就会被主机直接丢弃
因此在通讯前必须获得目的主机的 MAC 地址
2.2 ARP 数据报的格式
硬件类型:链路层网络类型,1 为以太网
协议类型:要转换的地址类型,0x0800 为 IP 地址
硬件地址长度:对于以太网地址为 6 字节
协议地址长度:对于和 IP 地址为 4 字节
op 字段:为 1 表示 ARP 请求,为 2 表示 ARP 应答
2.3 ARP 协议的工作流程
下面是一个局域网的情况,由于这里已经明确是局域网通信,所以就没有画路由器。
主机 A 想向主机 D 发送数据,主机 A 中会存在一个路由表,并且一个局域网中有一个网络号,主机 A 将主机 D 的 IP 地址与子网掩码进行按位与,确认主机 A 和主机 D 在同一个局域网。
主机 A 想向主机 D 发送数据,但是主机 A 只知道主机 D 的 IP 地址,并不知道主机 D 的 MAC 地址,所以主机 A 就会通过 ARP 协议来获取主机 D 的 MAC 地址。
主机 A 会先构建一个 ARP 请求报文,然后为报文封装以太网首部和尾部成为数据帧,最后再将数据帧发送到局域网中。
一个主机在局域网中发送数据帧,在这个局域网中的所有主机都可以收到。
最后,局域网中的其他主机收到数据帧后,主机通过读取数据帧中的目的 MAC 地址,发现是广播地址,然后会将数据帧解包,将有效载荷(ARP 请求报文)向上交付,这里会分为两种情况
发现 ARP 请求报文中的目的 IP 地址与该主机的 IP 地址不匹配,该主机会将 ARP 请求报文丢弃
发现 ARP 请求报文中的目的 IP 地址与该主机的 IP 地址匹配,该主机则会向主机 A 发送 ARP 应答报文,将自己的 MAC 地址发送给主机 A
这里主机 B 和主机 C 收到数据帧后,会将 ARP 请求报文丢弃,而主机 D 会向主机 A 发送 ARP 响应报文。
主机 D 向主机 A 发送 ARP 响应报文,首先需要构建一个 ARP 响应报文,然后为报文封装以太网首部和尾部成为数据帧,最后再将数据帧发送到局域网中。