两台通过以太网交换机连接的Linux设备是如何互相发现并通信的?
同交换机两台Linux设备首次通信的底层逻辑
核心原因是**ARP(地址解析协议)**完成了IP到MAC的映射,全程不需要二层交换机识别IP地址,完整流程如下:
- 当你在设备A上首次执行
ping 10.0.0.2或ssh userB@10.0.0.2时,系统首先匹配路由表,判定10.0.0.2和自身属于同一个直连子网,需要获取目标IP对应的MAC地址才能封装二层帧。 - 设备A先查询本地ARP缓存,无对应记录就会发送ARP广播请求:该二层帧的目的MAC为广播地址
ff:ff:ff:ff:ff:ff,载荷内容为「我是IP 10.0.0.1,MAC为[设备A的MAC地址],请问IP 10.0.0.2对应的MAC是什么?」 - 二层交换机收到广播帧后,会向所有除入站口之外的端口泛洪该帧,所有同交换机下的设备都会收到这个请求。
- 设备B收到ARP请求后,校验到目标IP是自身配置的IP,就会返回ARP单播应答:载荷内容为「我是IP 10.0.0.2,MAC为[设备B的MAC地址]」,该应答的目的MAC直接填设备A的MAC地址。
- 交换机此前已经通过设备A发送的ARP请求,记录了设备A的MAC对应端口,因此会直接把ARP应答转发给设备A,不会泛洪。
- 设备A收到应答后,会将10.0.0.2和对应MAC的映射关系存入本地ARP缓存,后续发往该IP的数据包就可以直接封装正确的目的MAC,完成二层转发。
你可以手动验证这个流程:首次通信前在设备A执行arp -n,看不到10.0.0.2的缓存记录,通信完成后再次执行该命令即可看到对应映射条目。
内容的提问来源于stack exchange,提问作者Proto Ukr
相关产品推荐
相关产品推荐

