三层交换机对链路层数据帧的处理

交换机的端口有三种类型

  • access
  • trunk
  • hybrid

对于交换机的每个端口可以设置pvid,表示该端口的默认tag(不一定等于该端口所属的vlan_id)
交换机的mac地址表只根据源mac地址来学习.
书上说那么多其实用伪代码来描述准确而简单.

class Port:
    def __init(id,pvid=1,vlan_id=1):
        self.id=id
        self.pvid=pvid
        self.vlan_id=vlan_id
        self.link_type="access"
class Switcher:
    def __init():
        self.ports=[Port(id) for id in range(20)]
        self.mac_table={}
        self.interfaces={}
    #向端口port发送frame数据帧
    def send(frame,port):
        if port.link_type=="access":
            port.write(frame-tag)
        elif port.link_type=="trunk":
            if frame.tag.vlan_id==port.pvid:
                frame-=tag
            port.write(frame)
        elif port.link_type=="hybrid":
            if port.interfaces[frame.tag.vlan_id].isUnTagged:
                frame-=tag
            port.write(frame)
    #在port端口收到frame数据帧
    def onReceive(frame,port):
        if not frame.isTagged:
            frame+=tag(port.pvid)
        elif frame.tag.vlan_id!=port.vlan_id:
            delete(frame)
            return
        mac_table[frame.srcMac]=port
        if mac_table[frame.desMac]==None:
            for port in self:
                send(frame,port)
        elif mac_table[frame.desMac]==port:
            delete(frame)
            return
        else:
            send(frame,mac_table[frame.desMac])

转载于:https://www.cnblogs.com/weiyinfu/p/6081478.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值