首页 > 代码库 > 第十七章 路由交换机编程
第十七章 路由交换机编程
第十七章 路由交换机编程
MTU = 64KB 毕竟是理想,现阶段实现起来还是有难度;牵涉到较多问题,与大网同步、流量平衡、时隙交换等。所以,APO还是决定MTU = 48E = 1536B,包含头部2E、帧同步头8B、尾部CRC的4B等;数据包的有效内容(不含头部)为45E = 1440B。头部2E = 64B,其中MAC头14B、IP头18B、TCP/UDP/ICMP头32B。
二层交换机是以存储转发为主设计,三层以上的交换机是以256位差分总线的时隙交换为主设计。我们知道SATA3.0的差分串行总线速度可达6GBPS,理论上256位的就可到1.5Tbps;或说是6GE/s。那么,传送最大48E的一个数据包,需时隙48E/6GE/S = 8ns;上级端口2个、下级端口48个,我们需要50个时隙做时分交换。在50个时隙的400ns时间里,有50个数据包做交换(读、写),理论上就可到达1.25亿个数据包/s的速度。端口速度平均是30Gbps,在骨干网使用时、可以使端口数减少来提升速度,比如15个端口,那么端口速度就可达到100Gbps。使用增加总线数为512对有难度,另一种方法就是增加时钟频率,使差分串行总线速度达12GBPS;这样、速度就可快一倍;背板速度可到3000Gbps。嗯、画出来,和做出来是不一回事!要知道光的速度也就1ns走0.3米,必须把端口、总线都集成到一片IC才可能,让电子走的距离是微米级,这样、时钟同步、串-并转换等问题才能解决;还需有光-电、电-光转换电路。成本飞涨,这是专业钉子户的事情、本文不讨论。
一、端口硬件设计
不用说,必定有端口接收电路:串到256位并的转换、最少48E的接收缓冲、数据包IP头1E的硬件判断和中断电路、256位差分总线接口、控制电路等。那同样有端口发射电路:256位并到串的转换、最少48E的发射缓冲、数据包IP头的目标和源反转电路和中断电路、256位差分总线接口、控制电路等。
1、硬件判断和中断电路
每一个端口都有一个标志寄存器FLAG,低16位是设备号和端口号、高16位是标志。所有的标志都是硬件产生的。FLAG.29-24有一位标志置1、则产生中断信号;对于二层交换机、中断信号传给CPU(使用存储转发机制);对于三层交换机、中断信号传给硬件总线时分交换控制器(为了速度、直接硬件处理)。
BU32 FLAG; // 端口标志寄存器。
FLAG.31 TLS; 1、为三层交换机,0、为二层交换机。
FLAG.30 FSP; 1、数据包从上级端口过来,0、数据包从下级端口过来。
FLAG.29 BTD; 如果数据包头EMAC.TYPE低11位长度值大于1536B、会置包太大标志
FLAG.28 ICMPAPO; 高5位是协议标识,如果是0、那么ICMPAPO标志置位。
FLAG.27 TTL0; 如果TTL-1后为0,TTL0置1。
FLAG.26 DTP; 丢弃包标志。
FLAG.25 TBE; 发送缓冲区空标志。
FLAG.24 DPHE; 数据包已经进入接收缓冲区、并到达电梯口(高速数据总线可读了)。
FLAG.23 DPBE; 数据包头2E已经进入接收缓冲区。
FLAG.22 MF; 分段标志,0是最后分段或没有分段。
FLAG.21 TSOP; 如果数据包EMAC.DLADD!= 本节点链路地址,且FSP = 0;那么往上级端口转发标志TOSP置位;如果TOSP AND FSP = 1,那么丢弃包标志置位。
FLAG.20 HTN; 如果TSOP = 0,是本网段的包且数据包的EMAC.MDA = 本节点MAC地址,那么、命中本节点标志HTN置位。如果HTN AND ICMPAPO = 1, 那么丢弃包标志置位。
FLAG.19 SDI; 正在发送标志。
FLAG.18 RVI; 正在接收标志。
FLAG.17-16 RATA; 接收发送速率:10M/100M/1G/10Gbps。
FLAG.15-6 DEVN; 设备号。
FLAG.5-0 PORTN; 端口号。0、1是上级端口,其它下级端口。
2、控制电路和差分总线接口
对于二层交换机,就是CPU如何对端口收发缓冲区的读、写。对于三层交换机、就是在硬件总线控制器的指示下,端口收发缓冲区对分配的时隙进行读、写。
二、二层交换机的编程
三层交换机是硬件实现的,本文不讨论。存储转发机制才需要CPU来操控,其实、我们不需要复杂的操作系统,只是简单的中断程序实现。中断源除了50个端口外,还有一个RS232/RS485、或MAC之类的控制端口、及定时器中断等。这里、不可能说得太详细,只是凭想象介绍。可以用32位的CPU、或单片机来具体实现。
Main{ // 主程序,占内存空间2W。
init(); // 用户CPU初始化、片内RAM初始化、属性表初始化
L:
JMP L; // 空闲进程方法,无限循环。
}
//
在CPU核内有50个端口标志寄存器,一个64位的端口中断寄存器。每个MAC端口都有一张端口 MAC地址表MAC_TAB:MAC地址、流量与活动标志、主机名字。每个端口在内存中都有一个发送数据包缓冲区756E(大约多于16个数据包)。
//
pirq{ // MAC端口中断程序
}
待续。。。。。
第十七章 路由交换机编程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。