添加交换机后的通信流程
1. 同一子网内(使用交换机)
判断是否在同一子网:
主机A通过子网掩码判断主机B的IP地址是否属于同一子网。若在同一子网,主机A需要通过ARP获取主机B的MAC地址。ARP请求(广播):
- 主机A发送广播ARP请求,内容为:“谁的IP地址是主机B的IP地址?请告诉我你的MAC地址。”
- 该广播帧的目的MAC地址为
FF-FF-FF-FF-FF-FF
,交换机收到后会将广播帧转发到所有端口(除源端口外)。
ARP响应(单播):
- 主机B收到ARP请求后,回复单播ARP响应,内容为:“我是主机B,我的MAC地址是XX:XX:XX:XX:XX:XX。”
- 交换机根据主机B的MAC地址和端口映射关系,将ARP响应帧转发到主机A的端口。
数据传输(单播):
- 主机A获取主机B的MAC地址后,构造数据帧:
- 源MAC地址:主机A的MAC地址
- 目的MAC地址:主机B的MAC地址
- 交换机根据MAC地址表,将数据帧从主机A的端口转发到主机B的端口。
- 主机A获取主机B的MAC地址后,构造数据帧:
2. 跨子网内(使用交换机和路由器)
- 判断目标是否在同一子网:
- 主机A通过子网掩码计算主机B的IP地址网络号,发现主机B位于不同子网。
- 公式:
网络地址=IP地址 & 子网掩码
发送数据到默认网关:
- 主机A将数据包发送到默认网关(路由器或三层交换机)。
- 链路层封装:
- 源MAC:主机A的MAC地址
- 目的MAC:默认网关的MAC地址(通过ARP解析获取)。
- IP层封装:
- 源IP:主机A的IP地址
- 目的IP:主机B的IP地址
交换机转发数据帧:
- 交换机根据MAC地址表,将数据帧从主机A的端口转发到路由器的端口。
路由器处理数据包:
- 路由器接收数据帧后,剥离链路层头部,检查目标IP地址。
- 根据路由表确定下一跳(可能需多级路由):
- 若目标子网直连路由器,直接转发到对应接口。
- 若需经过其他路由器,转发至下一跳地址。
ARP解析下一跳MAC地址:
- 路由器通过ARP请求解析下一跳接口或目标主机的MAC地址。
- 示例:
- 路由器接口IP:
10.0.0.1
→ 目的子网:192.168.2.0/24
- 路由器发送ARP请求解析主机B的MAC地址(若直连)。
- 路由器接口IP:
数据包转发至目标子网:
- 路由器重新封装链路层帧:
- 源MAC:路由器出接口的MAC地址
- 目的MAC:主机B的MAC地址(通过ARP解析)。
- 通过目标子网的交换机将数据帧转发至主机B。
- 路由器重新封装链路层帧:
主机B响应数据:
- 主机B构造响应数据包:
- 源IP:主机B的IP地址
- 目的IP:主机A的IP地址
- 响应数据通过反向路径返回,可能经过不同路由器。
- 主机B构造响应数据包:
关键点:
- 交换机的作用:
- 在同一子网内,交换机负责转发数据帧(基于MAC地址表)。
- 在跨子网通信中,交换机将数据帧转发到路由器。
- 路由器的角色:
- 负责跨子网的数据包转发和路由选择。
- 逐跳更新链路层MAC地址,IP地址保持不变。
示例数据包变化:
跳数 | 源MAC | 目的MAC | 源IP | 目的IP |
---|---|---|---|---|
主机A → 交换机 | AA:AA:AA:AA:AA | 00:11:22:33:44:55 | 192.168.1.10 | 10.0.0.5 |
交换机 → 路由器 | AA:AA:AA:AA:AA | 00:11:22:33:44:55 | 192.168.1.10 | 10.0.0.5 |
路由器 → 主机B | 55:44:33:22:11 | BB:BB:BB:BB:BB:BB | 192.168.1.10 | 10.0.0.5 |
同一子网内:交换机基于MAC地址表转发数据帧。
跨子网内:交换机将数据帧转发至路由器,路由器逐跳转发至目标子网。