zoukankan      html  css  js  c++  java
  • 三层交换机对链路层数据帧的处理

    交换机的端口有三种类型

    • 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])
    
  • 相关阅读:
    Vue 获取URL链接后面的参数值
    Vue 跳转到指定页面,返回到上一页
    Vant 插件
    Vue 返回上一页,记住上一页的数据
    vue pc端支付宝支付
    Spring 中的事务
    数据库中锁与事务
    《产品方法论》 读书笔记
    设计模式之装饰者模式
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/6081478.html
Copyright © 2011-2022 走看看