首页 > 代码库 > 第十七章 路由交换机编程

第十七章 路由交换机编程

                第十七章    路由交换机编程


     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端口中断程序



}


待续。。。。。


第十七章 路由交换机编程