计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

ADSL接入及共享技术的实现网络毕业论文(6)

2013-09-06 01:12
导读:IEEE802.2 LLC 信头来进行标识, IEEE802.2 LLC 信头后接 IEEE802.1a 子网络附属点(SNAP)信头。在 LLC 类型 1 的操作中,LLC 信头包括 3 个字节,如下: 在用于路由协议
IEEE802.2 LLC 信头来进行标识, IEEE802.2 LLC 信头后接 IEEE802.1a 子网络附属点(SNAP)信头。在 LLC 类型 1 的操作中,LLC 信头包括 3 个字节,如下:

  在用于路由协议的LLC 封装中,LLC信头编码有两种格式:一种为 0xFE-FE-03, 用于说明后接的是 ISO 路由协议的 PDU;另一种为 0xAA-AA-03,用于说明后接的是非 ISO 路由协议。控制字段编码为 0x03,用于说明后接的是无编号信息的命令 PDU。

  对于 ISO 路由协议PDU,其AAL5 CPCS-PDU 净荷字段的格式为

  对于非 ISO 路由PDU (如 IP 协议),其封装格式为

  (其中,如果是 IP 报文的话,Ethernet Type 值为 0x0800)

  对于桥接协议报文,在 LLC 封装的 SNAP 信头中应标识出桥接媒体的类型。与非 ISO 路由协议的封装一样,LLC信头编码值 0xAA-AA-03 表示存在 SNAP 信头, SNAP 信头中的OUI值是 802.1组织编码 0x00-80-C2,桥接媒体的实际类型由2字节的 PID 来标识。此外, PID还标识是否在封装的桥接 PDU 中保留源帧校验序列(FCS)。以最常见的以太网/802.3为例,用于封装 802.3 PDU的AAL5 CPCS-PDU净荷帧格式如下

  6.3.1.1  基于VC 的复用

  在基于 VC 的复用中,不同的协议报文可以通过不同的 VC 通道传递,因此在 AAL5的CPCP-PDU 净荷上就不再包含明确标识所承载协议的信息了,使得处理开销最小。

  路由协议的 PDU 在 AAL5 CPCS-PDU 的净荷中直接承载。

  桥接协议的 PDU 和LLC封装格式描述相同,但仅包含 PID 字段后的内容。其 AAL5 CPCS-PDU 净荷字段格式如下所示:

  6.3.2  RFC1483 报文的封装处理

  上层协议在调用 muxSend 之前,会先调用 endAddressForm 函数进行二层数据封装,我们在这个函数里实现IP 报文到Ethernet类型报文的数据封装。SarEndSend函数里会调用 ATMSRV_Encap 进行 Ethernet 报文到 AAL5 相应协议类型的封装。

  6.3.3  RFC1483 报文解封装处理

  在中断接收处理函数里,会调用 ATMSRV_Decap 解除ATM协议封装,同时将二层协议类型存于 mBlkPktHdr.reserved 中,由 endPacketDataGet通知 MUX。

  7增加 NAT 支持

  目前已经有很多for vxworks 的第三方 NAT 协议产品, 而且 windriver 公司自己也推出了Tornado 开发平台下的 NAT 组件, 但价位实在太高。 由于该协议本身实现的难度不大,而且有 linux 或 BSD 的相关模块可供参考和移植,所以我们决定自己实现这个协议。难点主要在于NAT收发处理函数的绑定, NAT 端口地址转换hash表的建立及查找算法的实现。

  7.1  NAT 模块主处理流程

  主要包括LAN口和WAN口的IP地址转换。如图 7-1 所示。

(科教作文网http://zw.NSEaC.com编辑发布)

图7-1  NAT 主处理流程示意图

  7.2   NAT 模块初始化

  7.2.1   NAT 数据结构初始化

  1)  nat_session结构,记录每一连接的连接信息:

struct nat_session

{

    UCHAR ip_proto;                       //协议类型

    struct in_addr src_addr, dst_addr, new_addr;  //源地址,目标地址,转换后地址

    /* Port numbers are in host UCHAR order: */

    union

    {

        /* For TCP _and_ UDP: */

        struct { UINT16 src_port, dst_port, new_port; } tcp;  //端口

        /* For ICMP: */

        struct { UINT16 src_ident, new_ident; } icmp;      //identification

    } U;

    enum nat_session_state state;               //连接状态

    unsigned long         timestamp;         //时间戳

    NAT_ALG      *alg;                   //应用层网关函数指针

    int          alg_use;                   //标志,是否需要应用层网关

    NAT_SESSION  *parent;                //ftp中指向控制连接session的指针

    NAT_SESSION  *next_hash;             //Hash表下一表项

};

2)nat_interface接口结构

struct nat_interface

{

    NAT_INTERFACE *next;                //指向下一个接口结构

    struct in_addr ipaddress;                  //接口地址(转换地址)

    /* Pointer to table of session structures, and hash table: */

    NAT_SESSION *sessions;                //指向session结构表

    NAT_SESSION **hashtable;              //指向hash结构表

    int next_session;

    /* Pointer to table of fragment structures */

    NAT_FRAGMENT *fragments;             //指向fragment结构表

    int frag_queued;                         //记录保存有多少个分片队列

    /* Stats - counts of sessions */              //各种计数器

    UINT32 tcp_out, udp_out;

    UINT32 icmp_q_out, icmp_err_out, icmp_err_in;

    UINT32

上一篇:计算机网络安全浅析网络毕业论文 下一篇:没有了