0x0 数据通信基础

  • 同网段ping数据通信原理
    1. PC A发出ARP请求,查询PC B的MAC地址(广播)
    2. PC B收到后回复一个ARP单播包给PC A(单播)
    3. PC A在自己的ARP表中存储PC B的IP地址MAC地址信息(1200s)
    4. PC A发起 ICMP请求,封装IP包头和MAC包头
    5. PC B收到 ICMP请求,广播一个ARP包来查询PC A的MAC地址(广播)
    6. PC A相应PC A的ARP请求,回复自己IP地址(单播)
    7. PC B在自己ARP表中存储PC A的IP地址和MAC地址(1200s)
    8. PC B回复一个ICMP应答报文,封装自己的IP包头和MAC包

ICMP报文格式 </br>

  • ping命令依托于ICMP协议,在局域网下还要借助于ARP协议,ARP协议能根据IP地址查出计算机MAC地址,我们知道,在一个局域网中,计算机通信实际上是依赖于MAC地址进行通信的。

0x1 二层转发基础

0x1.1 转发原理

    二层转发是交换机通过学习接收到的以太网帧来维护自己的mac地址表,老化时间为300s

0x1.2 Vlan基础

    VLAN:虚拟局域网,将物理上互联的网络逻辑上划分成多个区域,这些区域是不可以通信的(可以隔离广播域),占4个字节

  • 字段
    1. Type:取固定值0x8100,用于标志VLANTag
    2. UserPriority:用户优先级,用于流量的等级划分;
    3. Flag:该bit在以太网中固定取0;
    4. 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 三层转发案例

  1. PC A首先检查出目的IP地址192.168.2.101(PC B)与自己不在同一网段,因此PC A广播发出1个ARP请求,查询网关的MAC地址;
  2. SW收到PC A的ARP请求后,检查请求报文发现被请求IP是自己的三层接口IP,因此发送ARP应答并将自己的三层接口MAC(MAC S)包含在其中。同时它还会把PC A的IP地址与MAC地址对应(192.168.1.101==MAC A)关系记录到自己的ARP表项中去(因为ARP请求报文中包含了发送者的IP和MAC);
  3. PC A得到网关的ARP应答后,组装ICMP请求报文并发送,报文的目的MAC=MAC S、源MAC=MAC A、目的IP=192.168.2.101、源IP=192.168.1.101;
  4. SW收到报文后,首先根据报文的源MAC+VID(即VLAN ID)更新MAC地址表。然后,根据报文的目的MAC+VID查找MAC地址表,发现匹配了自己三层接口MAC的表项。这里说明一下,三层交换机为VLAN配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MAC+VID的表项,并且为表项的三层转发标志置位。当报文的目的MAC匹配这样的表项以后,说明需要作三层转发,于是继续查找交换芯片的三层表项;
  5. 交换芯片根据报文的目的IP去查找其三层表项,由于之前未建立任何表项,因此查找失败,于是将报文送到CPU去进行软件处理
  6. CPU根据报文的目的IP去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后SW会在目的网段对应的VLAN 20的所有端口广播发送1个ARP请求,查询PC B的MAC地址;
  7. PC B收到SW发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC B)包含在其中。同时,将SW的IP与MAC的对应关系(192.168.2.1==MAC S)记录到自己的ARP表中去;
  8. 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的报文就可以通过该硬件三层表项直接转发了
  9. 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 相关案例