1、 引言
TCP/IP起源于60年代末美国政府资助的一个分组交换网络研究项目,到现今已发展成为计算机之间最常应用的组网形式。尽管标准的TCP/IP协议族在数据传输的可靠性与数据流量的控制上作的很好,但是8位微控制器性能的限制下,标准的TCP/IP协议族的实现占用大量系统资源是实际应用所不允许的。因此要在不改变TCP/IP协议族标准的前提下对其进行裁剪,使其实时性提高同时保证可靠性以满足嵌入式系统的要求。
SF0020是NEC公司推出的兼容80C51的8位微控制器芯片。根据系统在网络监控系统控制终端应用的需要,外部接25MHz晶体,内部倍频至50MHz。该芯片内嵌有10M/100Mbps的MAC模块并提供MII界面,可与外部的Ethernet PHY芯片方便连接。芯片有256字节内部数据存储器,外部可扩充至512K字节。具备的DMA通道实现了在RAM中和在MAC与RAM之间进行快速数据传输的功能;支持校验和模块,在实现TCP/IP时可以节省控制器运算开销。指令周期为4个时钟周期(标准80C51为12时钟周期/指令周期)。其性能满足实现嵌入式TCP/IP协议族的基本要求。
2、 协议族总体框架设计与裁剪策略
为了实现在局域网环境中作为客户端控制前端监控设备(硬盘录像机、编码器、解码、视频服务器等)的应用要求,必须在有限的硬件资源的条件下保证数据传输的可靠性和实时性。因此数据链路层采用目前应用最为广泛的以太网协议;上层利用TCP/IP的实现采用在运输层直接采用可靠的TCP协议,然后对其进行适当裁剪的方法。这是因为考虑到通用性、兼容性和通信的可靠程度,而没有使用在应用层加入控制策略运输层使用简单UDP协议的方案。本地数据的流动要实现向应用程序提供可靠的数据,与底层以太网驱动程序交互数据报功能。
协议族系统结构框架如下图1所示,其中虚线部分是本文所要完成的,包括socket子层、运输层的TCP协议、网络层的IP和ICMP协议、ARP协议和以太网子层。
图1 协议族系统框架
2.1 接口子层实现
以太网子层提供了与以太网驱动程序的接口,其实现驱动程序存储空间和协议空间之间数据搬移的功能;以及数据报流入的分路和流出的封装处理。
Socket(插口)子层向上层提供了创建一个socket描述符,将本地的IP地址与端口号绑定到一个socket上,TCP连接的建立、断开,数据的接收与发送的功能。
2.2 网络层实现
网络层实现包括IP协议(Internet Protocol网际协议)和基于IP协议的ICMP协议(Internet Control Messages Protocol控制报文协议)。图1中该层下部的ARP(Address Resolution Protocol 地址解析协议)为IP提供动态地址解析服务。
IP是TCP/IP协议族中最为核心的协议。所有的网络层和运输层数据都以IP数据报格式传输。为了减小TCP/IP协议族的负担,接收时首先要检查数据报的正确性,其次还要过滤目的地址不是本机的报文;此外如果收到被IP分片的数据报立即丢弃。最后判断协议交给TCP或ICMP协议处理。因为禁止IP层分片可以提高通信的效率和可靠性,根据以太网最大传输单元(MTU)的限制,socket子层控制了用户每次传输分组的最大字节数。同样服务端也对IP分片加以限制使IP无需把有限的系统资源消耗在IP报文重装上,这正是丢弃被分片的IP数据报的原因。
ICMP提供主机或路由器报告差错或提供查询信息的服务。ICMP报文可以分成两类:差错和查询。查询报文是用一对请求和回答定义的。ICMP差错报文通常包含了引起错误的IP数据报的第一个分片的IP首部(和选项),加上该分片数据部分的前8个字节。由于运输层仅仅使用TCP协议,ICMP也进行了裁剪。协议支持ping命令请求回显应答,用于检查协议族的运行状况;差错控制全部交给运输层TCP协议处理。