交换机(网桥)是数据链路层上的设备,用于将同一个子网的多个节点连接在一起,没有进/出口之分。它只能处理MAC地址,不能处理IP地址。
与路由器不同,它内部没有网络适配器,即没有IP和MAC地址,只有端口。也就是说,它对接收到的数据包,只负责解开MAC地址,查询对应的端口,然后发送出去,并不管数据包的进端口和出端口是否属于同一个子网。
一方面,这一高效简洁的处理方式,使其很适合用于组织同一子网的节点;
另一方面,实际上可以利用它来组织不同子网的节点。
实际上,用交换机连接的两个计算机,只要它们知道对方的MAC地址,就能进行链路层的通信,进一步,再知道对方的IP地址,就能进行网络层及更上层的通信了。
原因是:
因为交换机上每个端口都和网线另一端的计算机直接相连,所以交换机可以轻易的知道该设备的MAC地址(人工配置或自动查询),进而交换机会生成端口与MAC地址的对应表,当来一个数据包时,交换机便解开其中的目标MAC地址,查询映射表,将其发送出去,在这之前可能会对数据包进行校验。当目标计算机接收到数据包时,会查看目标MAC地址是否是自己,若是,则向上层提交,否则丢弃。
进一步,如果网络层发现IP地址也是自己的,则将数据包继续向上层提交,接收完毕。
所以,用交换机连接的两个计算机,只要知道对方的MAC和IP就能完全通信,不论它们是否处于同一网段。
实验如下:
用VMware Workstation新建一个Windows XP的虚拟机,虚拟机的网络连接方式设置为Host-only,也就是与宿主机处在一个虚拟子网里,通过一个虚拟交换机连接。
手工配置虚拟机的网卡为:
手工配置宿主机的虚拟网卡VMnet1为:
可以看出,它们不在同一网段。
让它们作为自己的网关,并手动在宿主机和虚拟机里添加ARP映射表:
在宿主机上添加虚拟机的IP<->MAC映射条目;
在虚拟机上添加宿主机的IP<->MAC映射条目;
这是为了让它们知道对方的MAC地址。
然后,分别在宿主机和虚拟机里ping对方,可以ping通:
注意:在宿主机上测试时,若无法ping通虚拟机,请禁用宿主机上的其他网卡。