交换机不认识ip地址,但是为什么两台电脑能通过ip地址转发数据呢?
需求描述
解决过程在讲二层交换机之前,我们还需要搞懂一个理论OSI模型
分层工作,我简化了一下(OSI模型)分7层。
应用层:最上面的工作在5、6、7层,就是我们通常在使用的应用服务,如网页、金蝶软件应用服务。
传输层(TCP/UDP):工作在第四层,当系统运行了一个应用软件,在系统中就会有对应的服务,当服务正在运行中,就会生成一个端口,对应这个软件。
网络层(IP):工作在第三层,那就是ip地址,路由器,三层交换机。
数据链路层(以太网):工作在第二,二层交换机。
物理层(物理线路):工作在第一层,网线、网卡、光纤等。
交换机的工作详细步骤:
1. 学习阶段:构建MAC地址表
交换机内部有一个 MAC地址表,记录着每个端口连接了哪个设备的MAC地址。
当电脑A首次发送数据时,数据帧里会包含源MAC地址(A的MAC)。
交换机收到后,会查看这个源MAC地址,然后说:“哦,这个MAC地址是从我的1号端口来的。” 于是它在表中记录:MAC_A <-> 端口1。
通过这种方式,交换机逐渐学习到整个局域网里所有活跃设备的MAC地址和端口的对应关系。
我将两台电脑连接到交换机之后,交换机会自动学习这两台电脑的mac地址表。
可以看到,电脑A,使用ipconfig/all,可以看到mac地址70b5-e88f-84be。

电脑B,使用ipconfig/all,可以看到mac地址是705a-0f7f-bf20。

那我们在交换机上查看mac地址表。

电脑A,mac地址70b5-e88f-84be,对应的是交换机1/0/3接口。
电脑B,mac地址705a-0f7f-bf20,对应的是交换机的G1/0/4接口。
2. 转发/过滤决策
当交换机要转发一个数据帧时,它只看帧头里的目的MAC地址:
情况一:已知单播(点对点)
如果目的MAC地址在它的地址表里(比如目的MAC_B对应端口3),它会只把数据帧从端口3发送出去。其他端口(1,2,4...)都收不到。这非常高效。
情况二:未知单播
如果目的MAC地址不在它的表里(比如一个新设备),交换机会将这个帧从除了接收端口以外的所有端口广播出去(称为“泛洪”)。总有一个端口连接着目标设备。
情况三:广播或多播
如果目的MAC地址是 FF:FF:FF:FF:FF:FF(广播地址)或是特定的多播地址,交换机也会进行泛洪,确保所有设备都能听到。
3. 电脑如何知道目的MAC地址?——ARP协议
这里有一个关键问题:电脑A想发给电脑B,它知道B的IP地址(比如192.168.1.3),但它最初并不知道B的MAC地址。
这时就需要 ARP(地址解析协议):

电脑A在局域网内广播一个ARP请求:“谁的IP是192.168.1.3?请告192.168.1.2。

2.所有电脑都会收到广播包,但只有电脑B会回复一个ARP应答:“我的IP是192.168.1.3,我的MAC地址是MAC_B。”

电脑A将 IP_B -> MAC_B 的对应关系存入自己的 ARP缓存。

现在,电脑A在组装数据帧时,就能正确填写目的MAC地址为MAC_B了。

核心答案就是:交换机通过学习和查询MAC地址表,在数据链路层完成转发,完全绕过了对IP地址的理解。IP地址是给路由器和终端主机用的,用于进行更高层次的、跨网络的路径选择和通信,交换机只能认识mac地址,通过mac地址表转发数据的。