首先我们来回顾一下路由的基本概念,什么是路由?所谓路由就是当一台路由器(或其他三层设备)收到一个IP数据包时,路由器查看IP数据包的IP头部,将IP头部中的目的IP地址拿到路由表中进行查找,找到匹配的条目后,依照条目所指示的下一跳IP地址及出接口信息将数据包进行转发。
从上面的描述我们可以看出几点信息:
为了将内网中的多台PC互联起来,使得PC之间能够以最简单的方式进行通信,我们往往会用一台接入层的交换机来连接PC,如下图:
这时候我们说,连接在这台交换机上的PC,都属于一个LAN。这些PC都拥有同一个网段的IP地址,同时也处于同一个广播域中,所谓的一个广播域,指的是一个广播数据帧所能泛洪的范围,举个简单的例子,那就是PC1发送一个广播帧,接在交换机上的所有的PC都会收到这个广播数据帧并且都要去分析这个报文(即使它可能并不需要这个数据并且最终将收到的数据帧丢弃,但check数据是否是发送给自己的这一过程仍然会消耗设备资源)。
现在我们来分析一下,PC1发送一个数据包给PC4时,都发生了什么。
1.PC1构造IP数据包,IP报文头部里的源IP地址为自己的IP也就是IP1,目的IP地址为IP2。
上述IP数据包为了能够在以太网环境中去传输,还需要封装上一个以太网的头部。在以太网头部中源mac地址为MAC1,目的MAC地址为MAC2(这里我们暂且忽略ARP的过程)。
2.这个数据帧发送到了PC1所连接的交换机上。我们知道路由器都维护一张路由表,用于数据的转发,而交换机在做数据交换的时候依据的是MAC地址表。在初始情况下,交换机的MAC表是空的。那么当交换机收到PC-A发送出来的这个数据帧时,它首先将数据帧的以太网头部中的源MAC地址学习到MAC地址表,并与收到该数据帧的接口及VLAN进行关联。如下图:
3.接下去交换机会拿着这个数据帧的以太网头部中目的MAC地址,到MAC地址表中去查询。由于此时MAC地址表中,并没有匹配MAC2这个地址的条目,因此交换机将对这个数据帧进行泛洪Flooding,所谓泛洪就是将这个数据帧从除了收到它的接口之外的所有其他接口都发一份拷贝。这样做的目的事实上是:“哥不知道你在哪,哥索性就全都发一份,爱谁谁”。
4.连接在该台交换机上的其他PC都能收到这个数据帧,但是除了PC2之外的其他PC在收到这个数据帧之后,将bit流成帧并查看以太网头部的目的MAC,发现该MAC与本机的MAC并不一致,因此判断这个数据帧并非发送给自己,于是丢弃。
而PC2在收到这个数据帧并查看目的MAC发现,这个数据帧的目的MAC与自己的MAC是相同的,因此判断这个数据帧是发送给自己的,于是进行CRC校验,校验成功后将以太网头部解封装,将内层的IP数据将给IP协议栈去处理,进一步查看IP头部,发现IP头部中的目的IP地址就是本机的IP,于是将IP头部解封装,将内层的payload将给上层协议处理。如此一来PC1发送给PC2的数据就完成了单向的传输。对于交换机而言,MAC地址表里就有了一个条目。
现在,PC2要回送数据给PC1,数据的构造如下图所示:
5.交换机在收到这个数据帧后,首先是查看数据帧以太网头部的源MAC地址,将该MAC地址学习到MAC地址表中,并关联到接收该数据帧的接口24。
6.接下去交换机拿着数据帧以太网头部中的目的MAC到自己的MAC地址表里去查,结果发现MAC1这个目的MAC地址在MAC地址表中是有一条匹配表项的,并且关联到接口1,于是交换机将这个数据帧交换到接口1。这就是所谓的交换(switching)。
这个数据帧最终被PC-A接收到,这就完成了一个在以太网环境中的数据交互过程。
小结一下:所谓的以太网环境中的二层交换(lay2-switching),就是指的当一台二层交换机收到一个数据帧时,分析数据帧头部的目的MAC地址,拿着MAC地址去MAC地址表中进行查找,如果有匹配项,则将数据帧从该匹配项所关联的接口换出去,如果没有匹配项,则将数据帧进行泛洪。所以:以太网二层交换是基于数据帧的帧头中的目的MAC地址进行查找的;
查找的是MAC地址表。