数据链路层使用数据帧来转发数据。借用百度百科的图片。
- 第一步: 交换机收到了数据帧,先会存入交换机的缓存并检查数据帧是否完整,CRC的校验是否正确。
如果是BPDU(桥协议数据单元),则交给CPU处理;如果缓存存满则丢弃数据帧
丢弃数据帧有以下4种情况:- 缓存存满
- CRC校验错误
- 过小,小于64字节
- 过长,大于1518字节
- 第二步: 根据vlan进入规则,判断是否丢弃
- 如果数据帧有TAG头,但是该端口不接受此VLAN,丢弃
- 如果有有TAG头,该端口接收次VLAN,进入下一个流程
- 如果没有TAG头,打上该端口的缺省PVID,进入下一个流程
- 第三步: 根据In过滤表对数据帧的MAC地址进行过滤
- MAC过滤,如果在交换机上设置了过滤的MAC地址,进入数据帧的源MAC地址若为需要过滤的MAC地址,则交换机不转发该数据帧
- MAC绑定,将MAC地址绑定在交换机端口,如果这个接口收到的数据帧源MAC不是绑定MAC,则丢弃
- 第四步: 学习MAC地址
交换机中有一张名为MAC地址表的表,当交换机收到一个数据帧后,他会首先记录这个数据帧的源端口和源MAC地址的映射。
如果这个MAC地址表已经存在这个映射项,则更新这个映像的老化时间,如果没有,则保存这个映射项。
然后判断这个数据帧属于广播还是单播,如果是广播帧则向所有端口(除了接收该数据帧的端口)转发数据帧;如果是单播帧则查找MAC地址表,根据MAC地址表中存在对应映射项进行数据转发,如果没有,交换机就会广播这个数据帧,有对应接收者回消息时,它便会记住对应的MAC地址与端口的映射,以便下次的转发。
最初的学习也就是因此的来(所以往往第一个数据帧的延迟会比较大) - 第五步: 数据帧进入主交换引擎,根据VLAN Table表把数据帧发送到属于相应VLAN的端口(VLAN Table表,记录VID和它的端口成员)
- 第六步:交换机在该VLAN内的所有端口查找目的MAC地址,查找到了就发送到相应的端口,查不到就发送到所有端口;
如果配置了组播的话,就要看看有没有IGMP Snooping,如果开启了这个功能就会把组播数据发送到对应端口,如果没有就发送到所有端口;
补充:- IGMP(Internet Group Management Protocol,互联网组管理协议):是TCP/IP协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相连的组播路由器之间建立、维护组播组成成员关系。
- IGMP侦听运行在数据链路层,是二层以太网交换机上的组播约束机制,用于管理和控制组播组。
- 第七步:到达对应端口之后,交换机对数据帧进行出规则管处理,带不带Tag出去
- access端口:将VLAN的信息剥离,发出去
- trunk端口:比较PVID和将要发送的VLAN信息,如果两者相等则剥离VLAN信息在发送;如果不想等则直接发送。
- Hybrid端口:
- 判断该VLAN在本端口的属性(看该端口对那些VLAN是Untag,那些VLAN是Tag)
- 如果是Untag则剥离Vlan信息在发送,如果是Tag则直接发送
补充:
PVID(port-base vlan ID):端口的虚拟局域网ID号,关系到端口收发数据帧时候的VLAN TAG标记。
- 第八步:交换机根据配置进行QoS处理
包括队列重组、Tos重设、端口限速等功能
QoS对数据包处理:- 分类:
- 按数据包中原有的分类(DSCP/IP优先级/Cos值)
- 按接口的手工分类(DSCP/IP优先级/Cos值)
- 流量控制:流量控制可能丢弃数据包或将低优先级
- 标记:修改入站帧的DSCP/IP优先级/Cos值,可在接口上配置标记
- 决定加入哪个传输队列(拥塞管理包含多种排队机制FIFO排队,WRR排队,严格优先级)
- 分类:
- 第九步:重新计算该数据帧的CRC
- 第十步:数据帧从交换机发出
如有错误请指正,感谢指正,我会及时修改。