1、使用设备
两台PC、一台三层交换机
2、测试组网
PC1-------l3sw-------PC2
3、测试内容
设备进行二三层转发的工作流程
Tips:设备通过收到的报文的以太头的目的mac信息,判断该报文是进行二层还是三层转发,如果目的mac地址是属于设备本身的,就上送cpu处理,否则就进行二层转发;
3.1 二层转发
所谓二层转发就是区别于路由器所进行的三层转发的,报文只进行以太头字段的拆封装,直接通过硬件芯片进行转发,效率高,可以达到线速转发;
交换机进行二层转发的主要技术原理是依托于设备的mac地址表项来进行的,初始状态设备内部的mac地址表项为空,当设备的二层接口收到数据包,首先进行源mac地址学习,该表项是可以进行刷新和老化的;
实际组网验证:
Pc1(10.1.2.3)---l3sw---pc2(10.1.2.2),pc1与pc2属于相同的vlan
pc1与pc2进行数据通讯,就是进行二层转发,首先进行以太封装,此时会发送arp请求,设备收到之后,会在入接口vlan内进行泛洪,pc2收到此arp请求,会进行相应的回复,这样设备上就会生成pc1和pc2的mac表项
设备根据收到的报文目的mac判断,此报文需要进行二层转发,所以查询设备的mac表项,按照表项内容,进行转发;如果设备不存在相应的mac表项,就会在vlan内进行泛洪;
设备上生成的FDB表项:
lhx(config-ge0/1)#show vlan 10 fdb
Address State Ageing Interface
00:10:f3:2d:4a:a9 forwarding static ge0/0
00:10:f3:2d:4a:aa forwarding static ge0/1
00:10:f3:2d:4a:ab disabled static ge0/2
e0:05:c5:f3:7b:1f forwarding 298 ge0/1
ec:88:8f:ea:c2:e4 forwarding 299 ge0/0
表项内容包括:
Address:报文转发的目的mac
State:状态
Ageing:老化时间为299s
Interface:出接口
设备如再收到源mac匹配的报文,对应表项的老化时间进行更新,
对FDB表项的扩展验证:
测试用例1:Mac地址的迁移测试
A:验证同一个vlan内的接口收到相同源mac的报文,会进行表项更新
lhx(config)# show vlan 10 fdb
Address State Ageing Interface
00:10:f3:2d:4a:a9 forwarding static ge0/0
00:10:f3:2d:4a:aa forwarding static ge0/1
00:10:f3:2d:4a:ab disabled static ge0/2
e0:05:c5:f3:7b:1f forwarding 299 ge0/1 -----0/1接口学到
ec:88:8f:ea:c2:e4 forwarding 299 ge0/0
构造源mac= e0:05:c5:f3:7b:1f的报文从0/0接口打入后,表项进行更新:
lhx(config)# show vlan 10 fdb
Address State Ageing Interface
00:10:f3:2d:4a:a9 forwarding static ge0/0
00:10:f3:2d:4a:aa forwarding static ge0/1
00:10:f3:2d:4a:ab disabled static ge0/2
e0:05:c5:f3:7b:1f forwarding 297 ge0/0---0/0接口学到
ec:88:8f:ea:c2:e4 forwarding 297 ge0/0
B:验证不同vlan情况下,接口的mac地址学习情况
lhx(config)# show vlan 20 fdb
Address State Ageing Interface
00:10:f3:2d:4a:aa forwarding static ge0/1
e0:05:c5:f3:7b:1f forwarding 284 ge0/1
00:10:f3:2d:4a:ac disabled static ge0/3
lhx(config)# show vlan 10 fdb
Address State Ageing Interface
00:10:f3:2d:4a:a9 forwarding static ge0/0
00:10:f3:2d:4a:ab disabled static ge0/2
e0:05:c5:f3:7b:1f forwarding 293 ge0/0
ec:88:8f:ea:c2:e4 forwarding 257 ge0/0
从以上可以看出,设备是每个vlan维护着一张FDB表项,可以学习到同样的mac表项
3.2 三层转发
三层转发流程:pc1需要给pc2发送数据,首先pc1判断pc2为不同网段,于是数据报文封装网关目的mac,发往设备,设备收到之后根根据报文目的mac头部信息进行判断后拆掉以太头部,交给cpu进行处理,查询对应的路由表项和arp表项,进行相应的报文封装,然后查询相应的FDB表转发处理;
验证组网图:pc1(10.1.1.2-vlan10)----T1----pc2(10.1.2.2-vlan20)
C:\Users\Administrator>arp -a
接口: 192.168.10.199 --- 0xb
Internet 地址 物理地址 类型
192.168.10.1 00-e0-4c-b4-0a-50 动态
192.168.10.191 78-e3-b5-aa-16-85 动态
上图为pc1上的arp表项,没有对应网关的arp表项,在pc1上进行ping操作后,
C:\Users\Administrator>arp -a
接口: 192.168.10.199 --- 0xb
Internet 地址 物理地址 类型
192.168.10.1 00-e0-4c-b4-0a-50 动态
192.168.10.190 00-10-f3-2d-4a-a8 动态
192.168.10.191 78-e3-b5-aa-16-85 动态
192.168.10.252 00-0c-29-37-cd-f5 动态
192.168.10.255 ff-ff-ff-ff-ff-ff 静态
接口: 10.1.1.2 --- 0xd
Internet 地址 物理地址 类型
10.1.1.1 00-10-f3-a8-0a-40 动态
10.1.1.255 ff-ff-ff-ff-ff-ff 静态
Pc1发送arp请求,收到设备回应的arp报文后,pc1上arp表项如上:
其中第一条表项就是网关对应的arp表项,类型为动态学习所得;
此时设备上也会学习到相应的arp表项,
lhx(config)# show arp
IP address HW type Flags HW address Mask Device
192.168.10.199 0x1 0x2 40:61:86:ed:14:bb * mgt
192.168.10.33 0x1 0x2 00:60:e0:81:01:1a * mgt
10.1.2.2 0x1 0x2 e0:05:c5:f3:7b:1f * vlan20
10.1.1.2 0x1 0x2 ec:88:8f:ea:c2:e4 * vlan10
设备的arp表项内容主要包括:
Ip address:ip地址
HW type:表示以太网封装
Flags:
HW address:目的ip对应的mac地址
Mask:
Device:出接口
PC1学习到网关mac地址之后,进行报文封装,发往设备,设备收到之后,拆掉以太头,查看IP头部信息,发现目的IP是直连号段,就进行查询对应ip的arp表项,进行报文封装,然后转发处理。
设备上的路由表信息
lhx(config)# show ip rou
Codes: K - kernel route, C - connected, S - static, I - ISP, R - RIP, O - OSPF,
D - DHCP, P - PPPOE, > - selected route, * - FIB route
C>* 10.1.1.0/24 is directly connected, vlan10 weight: 0
K>* 10.1.1.1/32 is directly connected, vlan10 weight: 0
C>* 10.1.2.0/24 is directly connected, vlan20 weight: 0
K>* 10.1.2.1/32 is directly connected, vlan20 weight: 0
K 127.0.0.0/8 via 127.0.0.1, lo inactive weight: 0
C>* 127.0.0.0/8 is directly connected, lo weight: 0
C>* 192.168.10.0/24 is directly connected, mgt weight: 0
K>* 192.168.10.190/32 is directly connected, mgt weight: 0
lhx(config)# show vlan 20 fdb
Address State Ageing Interface
00:10:f3:2d:4a:aa forwarding static ge0/1
e0:05:c5:f3:7b:1f forwarding 184 ge0/1
00:10:f3:2d:4a:ac disabled static ge0/3
最终查询vlan 20的FDB表项,从接口0/1发送报文
附录:
《ARP协议》
1、测试组网:
PC(10.1.1.2)-----Tforce3000(10.1.1.1)
2、在设备上ping PC1,PC上通过抓包软件得到ping操作的报文交换流程,
设备(10.1.1.1)发觉和所ping号段是在一个号段,因为PC是首次连接到设备,所以设备上并没有对应的arp表项,所以需要首先通过发送arp广播进行查找,
『ARP request』
上述抓包显示为arp请求包,arp报文是有自己的报文封装格式
arp协议字段主要包括,
Hardware type: 硬件类型为以太网
Protocol type:请求的对应的协议类型,“0x800”这里表示IP
Opcode:1表示为arp请求,2为arp回应
Smacadd:表示发出arp请求的接口mac地址(上面显示就是设备mgt接口的mac地址)
Sipadd:表示发出arp请求的接口ip地址
Dmacadd:arp请求报文为全0
Dipadd:arp请求报文查询的主机的ip地址
以太字段封装主要包括,
Destination:arp请求为全F广播mac
Source:发送arp请求的接口mac地址,也就是设备mgt接口的mac地址
Type:表示承载的为arp协议
『ARP reply』
Arp协议字段主要包括:(区分与arp request)
Opcode:2表示为arp 回应
Sender macadd:就是arp请求需要映射主机的mac地址
别的字段的封装都与正常以太字段封装保持一致,arp reply为单播报文
以下为设备上一个完整arp学习的调试信息:
lhx# debug arp packet
[Core 1][4702133385] ARP: Hardware 1 address len 6, Protocol 800 address len 4
Source: hardware addr ec:88:8f:ea:c2:e4, IP: 10.1.1.2
Destination: hardware addr 00:00:00:00:00:00, IP: 10.1.1.1
Operations: request(1), Received from interface vlan10
[Core 1][4702133385] TB_ARP*: check arp :dev static ip, send to kernel
[Core 1][4702133385] TB_ARP*: check arp done, ret to_KERNEL
[Core 1][4702133386] ARP: Hardware 1 address len 6, Protocol 800 address len 4
Source: hardware addr 00:10:f3:a8:0a:40, IP: 10.1.1.1
Destination: hardware addr ec:88:8f:ea:c2:e4, IP: 10.1.1.2
Operations: reply(2), Kernel Sent to interface ge0/0
『免费arp』
免费arp的报文格式:
协议字段区别在于sender ipadd和target ipadd都是发送者自身的ip地址,而sender macadd是自身硬件地址,target macadd地址极为空;
什么情况下会发送免费arp?
如果主机改变了硬件地址,或者可以通过发送免费arp来确定网络内是否存在具有同样ip地址的主机,如果有就会收到相应的回复;