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])
    
  • 相关阅读:
    Robot Framework + Selenium library + IEDriver环境搭建
    【转】大话测试数据(一)
    TEST DESIGN TECHNIQUES: AN OVERVIEW
    24 WHEN CAN WE STOP TESTING?
    MySql Trace
    ORGANISING THE TEST CASES
    angular教程
    vue报错一
    sort()
    时间戳
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/6081478.html
Copyright © 2011-2022 走看看