【技术分享】交换机二层_三层的转发原理

关注我,你的眼睛会怀孕

为什么使用6500做核心而不是3550?

CAM表的大小,太小会flood影响交换机性能、接入网络带宽、主机终端性能需要处理大量无用报文;

预留mac地址的数目,预留太少会导致交换机一些特殊功能无法实施(例如vlan数目、tunnel等等)

交换机接口mac地址有什么用?

区分二层转发和三层转发的问题

用于交换机与交换机之间数据的发送与接收;例如某些协议之间信令的协商,也是按OSI七层封装的吧?如果接口没有MAC二层封装失败!

二层交换机和三层交换机转发依据不一样:

二层交换机查二层帧头地址做转发;

三层交换机查三层包头地址做转发;

高层(4-7层)交换还会查高层数据特殊字段做转发?

假如A和B同一个网段那么A、B之间通信使用二层转发;

假如A和C不同网段,A要想和C通信,A把数据给交换机后交换机通过三层转发功能(路由功能)再把包交给C。但是,不管是A把数据发给B还是发给C都有一个特点,都是被交换机从自己的5号口收到的,假如发8千个包,4千个做二层转发四千个三层转发,那么交换机怎么区分哪些数据包做二层转发哪些做三层转发呢?这个时候交换机要想区分是要执行二层转发还是三层转发,交换机要查阅该数据二层帧头的目的mac地址,如果目的mac是未知或者CAM表中存在(通过动态学习、输入)那么交换机做二层转发,如果目的mac是出厂预留的mac,那么交换机作三层转发(把二层帧头拆掉查看三层包头)

二层/三层转发原理:35min

L1设备:

集线器,信号学/通讯学的问题,跟电压的调制、信号的编码、或者编码的信令等等相关;

L2设备:

网桥、交换机

L3设备:

PC、打印机、投影仪、路由器、防火墙

描述PC访问路由器的过程(例如ping、telnet等等):

首先PC根据OSI七层模型逐层调用操作系统接口封装,7、6、5、4到3层的时候会封装包头,包括源ip地址、目的ip地址(分别是PC和Router的ip地址)然后封装二层,二层的源Mac地址是PC的1.2.3,目的Mac应该是Router的a.b.c,但是,现在PC知道了吗?也就是目的Mac未知导致二层封装失败,所以第一个报文会被丢弃。现在的系统一旦出现二层Mac地址封装失败都会默认执行一个功能:ARP。数据封装的格式上层是ARP的内容,三层封装不变,二层源mac地址是PC(1.2.3)但是目的mac地址改变了(全F),然后PC把这个数据包发送出去,SW1收到之后首先学习数据帧的源Mac、接收端口和接口所在vlan形成一个CAM表项(1.2.3  4)然后广播该数据帧。SW2收到之后:原理跟SW1相同。路由器收到之后先查看二层目的Mac是全F,意味着是广播帧然后拆开二层帧头看三层包头,目的ip地址是1.2,是给自己的,然后拆开三层包头看上层,一看是ARP解析,那么路由器会回复一个ARP Reply,具体的封装是:上层ARP、三层源1.2目的1.1、二层源abc目的123,回包到达SW2,SW2首先学习数据帧的源Mac、接收端口和接口所在vlan形成一个CAM表项(a.b.c  12)然后查看目的Mac地址(1.2.3)因为CAM表中存在对应的表项(1.2.3 10)所以直接把帧从接口10发出,SW1收到之后首先学习数据帧的源Mac地址、接收端口和接口所在vlan形成一个CAM表项,然后查看目的Mac地址(1.2.3)因为CAM表存在对应的表项(1.2.3  4)所以SW1直接把帧从接口4发出,PC收到之后查看二层帧头目的mac地址是123发现是给自己的然后拆开二层帧头查看三层包头看目的ip地址发现是1.1给自己的,然后拆开三层看高层发现是一个ARP Reply说明是刚才自己发送ARP Request的一个响应。响应其实包含的内容很简单就是路由器接口的mac地址,PC会把这个mac地址放到自己的ARP表中(ip地址跟mac地址对应关系的表格)。有了路由器的mac地址之后二层就可以封装了,这样PC就可以发包了。

深化

刚才的整个过程SW1泛洪了一次数据帧,单播发送了一次数据帧,其中泛洪的这个帧目的mac地址是全ff,而全ff的广播帧每个节点都要对其阅读或者查阅,那万一这个帧是给SW1自己的呢?所以全f的数据帧思科交换机出厂的时候已经静态写入到CPU,除了自己读之外还要泛洪。

路由器收到ARP Request之后会把ARP Request中的源mac地址和源ip地址也写入自己的ARP表中。路由器出了有ARP表之外,还有一个表:FIB路由器转发跟交换机转发不一样,交换机再转发的时候使用的表项是CAM表,交换机CAM表的查询结果就两个:一个是单播发、一个是泛洪发。路由器的FIB,当我查FIB表项的时候如果有条目我就单播发,如果没有对应条目我就丢包,把数据丢掉。

为什么说PC、终端设备、防火墙、路由器是一个三层设备?是从转发原理区分的。刚才那个拓扑,交换机做转发的时候只查看了CAM表一张表吧?而PC和路由器则查看了两张表:ARP和FIB

主机要去往目的地如果跟目的地在同一个网段那么封装三层的时候目的IP地址是目的地;

如果跟目的地不是同一个网段并且主机预先已经设置好了默认网关那么封装三层包头的时候目的ip地址是网关的地址;

如果主机预先没有设置默认网关那么封装三层的时候目的ip地址依然还是目的地。

 

不管是PC的ARP表、路由器的ARP表还是交换机的CAM表都有一个老化时间的问题:

查看交换机mac地址表的老化时间:

sh mac address-table aging-time 默认是300s;

交换机如果连续的接收到数据包,那么交换机会刷新mac地址表的老化时间,防止mac地址条目被删除;

更改老化时间:

mac address-table aging-time X vlan/routed-mac

 

路由器arp老化时间默认是4小时;

sh int e0/0 查看;

更改arp老化时间:

int e0/0

arp timeout X

路由器中添加arp条目:

arp 192.168.1.1 X.X.X arpa

交换机上修改mac地址表:

mac-address-table static 0000.0c72.1ad6 vlan 2 interface FastEthernet0/1   //静态绑定mac地址0000.0c72.1ad6

导致的结果:

当mac地址为0000.0c72.1ad6 的终端接入vlan 2时,必须接入FastEthernet0/1口

接入其他加入vlan 2的接口,无法通信

其他mac接入FastEthernet0/1不受影响

0000.0c72.1ad6 接入其他vlan不受影响

mac-address-table static 绑定的端口不能启用switchport port-security

R1的ip地址是1.1Mac地址是1.2.3,R2的ip地址是2.1Mac地址是a.b.c,SW1是一台三层交换机并且有两个SVI接口分别跟R1和R2同一个网段,R1跟R2之间二者想要通信需要SW1的三层转发,SW1要想进行三层转发必然要有一个接口(1.2)跟R1同一网段也要有一个接口(2.2)跟R2同一网段,因为需要构建FIB表;

转发过程:

第一个报文由于二层封装失败,丢包

丢包之后引起ARP(1.2.3,FFF)

ARP-Request到了交换机之后,因为目的mac是全ff,所以SW1拆开二层帧头交查看包头,因为要解析的IP地址是2.2,交换机可以判断1.1跟2.2位于不同子网,设备一旦发现源ip和目的ip位于不同子网,广播无法发送过去,因为三层设备会隔离广播,所以交换机必然会开启一个功能:代理ARP,SW1这个时候用自己1.2这个接口的mac(4.5.6)作为ARP-Reply地址回给R1,R1收到之后二层封装成功就可以发包了,包到交换机之后交换机查阅二层mac地址,发现目的mac是自己,所以交换机直接拆掉二层帧头查看三层包头,发现不是给自己的,交换机重新封装二层帧头源mac地址是2.2接口的mac,目的mac是2.1的mac。

但是因为此时SW1arp表中还没有2.1的mac地址所以第四个包封装失败:丢包

SW1再做ARP解析2.2(源mac地址是自己789,目的mac地址是全ff)把包发给SW2,SW2收到之后查看源mac写CAM表然后查看目的mac flood给R2,R2看目的mac是自己,看ip是自己

所以R2做一个ARP-Reply,SW2记录CAM项然后给SW1,SW1收到ARP-Reply,构建ARP表项(172.16.2.1 a.b.c)

R1再发包给SW1时,SW1执行三层转发成功,因为ARP表中有了2.1的Mac地址

三层:需要查看FIB、ARP表

三层转发跟二层转发的不同:

1.多进行一次arp(中间设备上)

2.二层丢一个包,三层丢两个包

3.三层转发会拆帧头,更改二层头部

实际项目中物理拓扑和逻辑拓扑是不一样的;

物理拓扑跟逻辑拓扑一样说明:数据报文的二层帧头有被改写

物理拓扑跟逻辑拓扑不一样说明:数据报文的二层帧头没有被改写

end

— 年度热文 —

网工基础测试题,你能全对吗?

这份华为以太网接口配置命令太真香了!

一款功能齐全的网管软件:Ip-tools

linux运维必备,100道常见面试题

超强linux学习笔记,值得一看(附PDF下载)

一次Ping1000个IP会怎么样?

IT人必懂的USB基础知识大全

系统集成

认证培训

买设备,找我们

IT维保,找我们

IT培训,找我们