MAC地址:(共6个字节)
全0: 地址未知。(用于ARP request的payload部分)
全F: 广播地址
第一字节,最低位是1:组播。(第一个字节是奇数)
其他情况:单播
IEEE MAC地址规定了第一个八位组的Octet 0的bit 0指明了目标地址是广播/组播地址,还是单播地址。
就以太网而言,IP组播帧都使用以0x0100.5Exx.xxxx的24位前缀开始MAC层地址。剩下24位地址由于某些原因只有这些MAC地址的一半(即后23位)可以被IP组播使用。全部28位不能映射进入只有23位可用的MAC地址空间,所以在映射过程中丢失了5位地址信息。将导致第3层IP地址映射成第2层IEEE MAC地址时2^5或32个IP组播地址映射成同一个组播MAC地址。这意味着每一个IEEE IP组播MAC地址能表示32个IP组播地址。
IP地址:(共4个字节)
IANA将D类地址空间分配给IP组播地址。
该空间的地址用二进制表示并且第一个八位组的前4位用1110表示,因此IP组播地址的范围从224.0.0.0到239.255.255.255 。
ARP表
网络节点保存,记录其他节点MAC - IP对应关系。
Switch
802.1Q: vlan tag (子网划分+转发优先级)
FDB: Forwarding Database 。
L2 switch保存,记录了 PortNumber - MAC - VLAN对应关系。
L3 switch保存,记录了PortNumber - IP - MAC - VLAN对应关系
L2 Switch工作原理(以ping命令为例):
节点保存ARP表
switch保存FDB表
若
node1的ARP表有node2的MAC和IP信息
且
node2的ARP表有node1的MAC和IP信息
且
switch有node1的“port - node1的MAC - vlan”条目
且
switch有node2的“port - node2的MAC - vlan”条目
则
1,node1,ICMP request,查询自己的ARP表,填写MAC和IP,发给switch
2,switch,添加tag,根据自己的FDB,转发到相应的端口,去除tag,再发给node2。
3,node2,将ICMP request内容与自己MAC和IP,比对,然后回复ICMP response。
若
node1的ARP表中没有node2的信息,
则
node1,发送ARP request报文给switch,由switch转发给node2,node2回复ARP response。
其间,node2的ARP表先更新,接着switch的FDB更新,最后node1的ARP表更新。
node2的ARP表中,MAC-IP:node1的MAC地址,IP是node1的IP地址。
L2 switch的FDB表,port-MAC-vlan:switch相应的端口号,MAC是相关node的MAC地址,vlan是相应端口的vlan。
L3转发(根据IP地址,转发到相应端口)
二层转发由MAC地址对应到出端口的道理一样,三层转发也可以直接由IP地址对应到出端口,IP地址的路由可以通过ARP来学习,同样需要老化。这样,VLAN间转发除第一个包需要通过ARP获得主机路由外,其它的报文直接根据IP地址就能够查找到出端口,转发速度远远高于路由器转发的速度。
路由器的转发采用最长匹配的方式,实现复杂,通常使用软件来实现。而三层交换机的路由查找是针对流的,它利用CACHE技术,很容易采用ASIC实现。
L3独有的"一次路由,多次交换"(一次路由就可以记录IP-Port的关系了)使三层交换像二层一样迅速。
三层交换查的是转发表,二层转发才查询MAC表。
三层转发表主要包含:目的地址 - 掩码长度 - 下一条地址 - 出接口索引。
网络拓扑如下: