首先我们来回顾一下路由的基本概念,什么是路由?所谓路由就是当一台路由器(或其他三层设备)收到一个IP数据包时,路由器查看IP数据包的IP头部,将IP头部中的目的IP地址拿到路由表中进行查找,找到匹配的条目后,依照条目所指示的下一跳IP地址及出接口信息将数据包进行转发。
从上面的描述我们可以看出几点信息:
- 路由是基于数据包的IP头部中的目的IP地址进行查找的;
- 查找的是路由表。 那么什么是以太网二层交换(switching)呢?
为了将内网中的多台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,所谓泛洪就是将这个数据帧从除了收到它的接口之外的所有其他接口都发一份拷贝。这样做的目的事实上是:“哥不知道你在哪,哥索性就全都发一份,爱谁谁”。