交换机工作原理
0x0 数据通信基础
- 同网段ping数据通信原理
- PC A发出ARP请求,查询PC B的MAC地址(广播)
- PC B收到后回复一个ARP单播包给PC A(单播)
- PC A在自己的ARP表中存储PC B的IP地址MAC地址信息(1200s)
- PC A发起 ICMP请求,封装IP包头和MAC包头
- PC B收到 ICMP请求,广播一个ARP包来查询PC A的MAC地址(广播)
- PC A相应PC A的ARP请求,回复自己IP地址(单播)
- PC B在自己ARP表中存储PC A的IP地址和MAC地址(1200s)
- PC B回复一个ICMP应答报文,封装自己的IP包头和MAC包
ICMP报文格式 </br>
- ping命令依托于ICMP协议,在局域网下还要借助于ARP协议,ARP协议能根据IP地址查出计算机MAC地址,我们知道,在一个局域网中,计算机通信实际上是依赖于MAC地址进行通信的。
0x1 二层转发基础
0x1.1 转发原理
二层转发是交换机通过学习接收到的以太网帧来维护自己的mac地址表,老化时间为300s
0x1.2 Vlan基础
VLAN:虚拟局域网,将物理上互联的网络逻辑上划分成多个区域,这些区域是不可以通信的(可以隔离广播域),占4个字节
- 字段
- Type:取固定值0x8100,用于标志VLANTag
- UserPriority:用户优先级,用于流量的等级划分;
- Flag:该bit在以太网中固定取0;
- VLAN-ID:取值为1~4096,用于标志不同VLAN。
0x1.3 常用指令
bcmsh ps //查看所有接口
bcmsh port xe0//查看某个接口信息
bcmsh 0://切换到芯片0
bcmsh 1://切换到芯片1
bcmsh stkmode//查看当前芯片号的方式
module id 0//位于输出芯片0
bcmsh attach//查看当前命令行芯片位置
bcmsh show c | grep FC //查看接口错误帧,用于排查物理链路质量问题。
0x1.4 案例分析
ge0(2)ge1 //ge0标识内部芯片接口,ge1标识外部面板接口
mtu值 //交换机默认接口mut为1518,对接深信服超融合服务器会用到巨型帧,vxlan的mtu一般是1618。
bcmsh l2 show //查看2层mac地址表,记录mac地址,vlan id,端口号和芯片号等信息。
bcmsh vlan show //查看端口属性,trunk/access。
0x2 三层转发基础
0x2.1 三层转发原理
三层交换机一般是通过VLAN来划分二层网络并实现二层交换,同时能够实现不同VLAN间的三层IP互访,三层转发基于三层转发表(IP、MAC、出口VLAN和出端口等)。大多数三层交换机采用ASIC硬件芯片来完成转发,ASIC芯片内部集成了IP三层转发的功能,包括检查IP报文头、修改存活时间(TTL)参数、重新计算IP头校验和、IP包的数据链路封装等。
0x2.2 三层转发和二层转发的区别
- 二层转发:主机在发起通信之前,将自己的IP与目的主机的IP进行比较,如果两者位于同一网段(用网络掩码计算后具有相同的网络号)进行二层转发
- 三层转发:当源主机判断目的主机与自己位于不同网段时,它会通过网关(Gateway)来递交报文,即发送ARP请求来获取网关IP地址对应的MAC,在得到网关的ARP应答后,用网关MAC作为报文的目的MAC进行报文发送。
0x2.3 三层转发案例
- PC A首先检查出目的IP地址192.168.2.101(PC B)与自己不在同一网段,因此PC A广播发出1个ARP请求,查询网关的MAC地址;
- SW收到PC A的ARP请求后,检查请求报文发现被请求IP是自己的三层接口IP,因此发送ARP应答并将自己的三层接口MAC(MAC S)包含在其中。同时它还会把PC A的IP地址与MAC地址对应(192.168.1.101==MAC A)关系记录到自己的ARP表项中去(因为ARP请求报文中包含了发送者的IP和MAC);
- PC A得到网关的ARP应答后,组装ICMP请求报文并发送,报文的目的MAC=MAC S、源MAC=MAC A、目的IP=192.168.2.101、源IP=192.168.1.101;
- SW收到报文后,首先根据报文的源MAC+VID(即VLAN ID)更新MAC地址表。然后,根据报文的目的MAC+VID查找MAC地址表,发现匹配了自己三层接口MAC的表项。这里说明一下,三层交换机为VLAN配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MAC+VID的表项,并且为表项的三层转发标志置位。当报文的目的MAC匹配这样的表项以后,说明需要作三层转发,于是继续查找交换芯片的三层表项;
- 交换芯片根据报文的目的IP去查找其三层表项,由于之前未建立任何表项,因此查找失败,于是将报文送到CPU去进行软件处理;
- CPU根据报文的目的IP去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后SW会在目的网段对应的VLAN 20的所有端口广播发送1个ARP请求,查询PC B的MAC地址;
- PC B收到SW发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC B)包含在其中。同时,将SW的IP与MAC的对应关系(192.168.2.1==MAC S)记录到自己的ARP表中去;
- SW收到PC B的ARP应答后,将其IP和MAC对应关系(192.168.2.101==MAC B)记录到自己的ARP表中去,并将PC A的ICMP请求报文发送给PC B,报文的目的MAC修改为PC B的MAC(MAC B),源MAC修改为自己的MAC(MAC S)。同时,在交换芯片的三层表项中根据刚得到的三层转发信息添加表项(内容包括IP、MAC、出口VLAN、出端口),这样后续的PC A发往PC B的报文就可以通过该硬件三层表项直接转发了;
- PC B收到SW转发过来的ICMP请求报文以后,回应ICMP应答给PC A。ICMP应答报文的转发过程与前面类似,由于SW在之前已经得到PC A的IP和MAC对应关系了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给PC A;
0x2.4 三层常用指令
bcmsh l3 l3table show //查找三层转发表,目的IP为192.200.246.100,对应INIF值为interface100017;
bcmsh l3 egress show //查找三层转发出口表项,interface100017对应vlan1,port22;
bcmsh l2 show //根据MAC地址68:ed:a4:1c:7a:bc,查找二层转发表。
0x3 相关案例