手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络知识>网络协议>列表

TCP/IP协议栈在嵌入式异构网络中的应用(1)

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!



[page]
2. SX52 IP协议的设计与实现

IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP提供不可靠、无连接的数据报传送服务。本设计中的IP协议是针对特殊的应用环境下的合理简化。CAN总线的控制网络是一种短帧(每个数据帧为8字节)的实时网络,所以,IP数据包无须分片(MF=DF=0),同时,设置IP为服务类型为一般类型,其头长为20字节,寿命TTL设置为64。使用的变量有:

目的IP地址{remoteIP3,remoteIP2,remoteIP1,remoteIP0};

源IP地址{myIP3,myIP2,myIP1,myIP0};

IP校验和{ipCheckSumMSB,ipCheckSumLSB};

IP数据包长度{ipLengthMSB,}ipLengthLSB};

上层使用的协议ipProtocol,

IP标识{ipIdentMSB,ipIdentLSB}。

使用涉及的函数有:

TCPIPInit(),

CheckIPDatagram(),

CheckIPDestAddr(),

IPStartPktOut()等。

3. SX52 ICMP协议的设计与实现

为了让互联网中的路由器报告或提供有关意外情况的信息,在TCP/IP协议系列中加入了一个专门用于发送差错报文的协议——互联网控制报文协议ICMP(Internet Control Message Protocol)。ICMP是IP的一部分在每个IP实现中都必须用到它。像其它所有的通信业务一样,ICMP报文是放在一个IP数据报的数据部分中传送的。ICMP报文的最终目的不是应用程序或目的机器上的用户,而是该机上处理它的Internet协议软件模块。也就是说:Internet控制报文协议允许路由器向其它路由器或主机发送差错或控制报文;ICMP在两台主机的Internet协议软件之间提供通信。

每个ICMP报文都以相同的3个字节开始:1个8位整数的报文类型(TYPE)字段用来识别报文,1个8位代码(CODE)字段提供有关报文类型的进一步信息,1个16位校验和字段。此外,ICMP报文还总是包括产生问题的数据报首部及其开头的64位数据。

ICMP使用IP来传送每一个差错报文。当路由器有一个ICMP报文要传递时,它会创建一个IP数据报并将ICMP报文封装其中,也就是说,ICMP报文被置于IP数据报的数据区中,然后这一数据报像通常一样被转发。即整个数据报被封装进帧中进行传递。

每一个ICMP报文的产生总是对应于一个数据报。路由器将一个ICMP报文将回给产生数据报的主机。在这里,只实现了ICMP的回应请求/应答服务,主要用于PING程序测试通信链路的畅通性,即只处理接收的报文类型为0x08的ICMP帧,发送的ICMP报文类型为0x00。它没有自己专有的变量,涉及的函数也只有ICMPGenCheckSum()和ICMPProcPktIn()。

4. SX52 UDP协议的设计与实现

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。UDP不提供可靠性,它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。由于缺乏可靠性,我们似乎觉得要避免使用UDP,而使用一种可靠的协议,如TCP。但分析发现,UDP在我们的互连设计中有很多的优点:其一,UDP协议传输效率高,无须TCP通信前的连接开销;第二,UDP协议简单,无须复杂的状态机传输机制,可以很好地避免SX52网关死机复位后由于状态不一致而无法正常通信,且上层协议又很难发现的危险。因此,可以使用UDP来实现通信(避免TCP连接的开销),而让许多需要的特征(如动态超和重传、拥塞避免、查错等)放置在应用层设计和实现。使用的变量有:

UDP接收数据报的源端口{udpRxSrcPortMSB,udpRxSrcPortLSB};



UDP接收数据报的目的端口{udpRxDestPortMSB,udpRxDestPortLSB};



UDP接收数据报的长度{udpRxDataLenMSB,udpRxDataLenLSB};



UDP发送数据报的源端口{udpTxSrcPortMSB,udpTxSrcPortLSB};



UDP发送数据报的目的端口{udpTxDestPortMSB,udpTxDestPortLSB};



UDP发送数据报的长度{udpTxDataLenMSB,udpTxDataLenLSB}。



设计的相关函数有:UDPAppInit(),

DPGenCheckSum(),

UDPStartPktOut(),

UDPProcPktIn(),

UDPEndPktOut(),

UDPAppProcPktIn(),

UDPAppProcPktOut()等。




5. SX52 TCP协议的设计与实现



传输控制协议TCP(Transmission Control Protocol)是传输层的重要协议。它提供一个完全可靠的(没有数据重复或丢失)、面向连接的、全双工的流传输服务。本设计中,对复杂的TCP协议做了合理的简化:

①因为CAN网络传输速度较快,数据量小且10Mbps的以太网传输一般不会发生阻塞,以太网上的主机也会有足够的能力及时处理通信数据,所以可以固定超时与重传的时间为5s。

②RTL8019AS上有两个1500字节的接收缓冲区,且CAN网络为控制网,信息量小,所以可以固定接收窗口为1400字节。

③因为我们采用一般的TCP服务就可以满足应用,所以可以忽略紧急指针和选项及填充字段的值。

通过上述三点简化,实际上大大简化了TCP协议的实现。





因为TCP的超时与重传时间的确定和窗口大小的控制有着较复杂的算法和实现机制。它的实现变量有:

tcpState,{tcpTmpSeq4,tcpTmpSeq3,tcpTmpSeq2,tcpTmpSeq1},

{tcpTmpAck4,tcpTmpAck3,tcpTmpAck2,tcpTmpAck1},

{tcpUnAckMSB,tcpUnAckLSB},

tcpRxFlags,{tcpCheckSumMSB,tcpCheckSumLSB},

{tcpLengthMSB,tcpLengthLSB},

{tcpTmpMSB,TcpTmpLSB},

{tcbLocalPortMSB,tcbLocalPortLSB},

{tcbRemotePortMSB,tcbRemotePortLSB},

{tcbSndUna4,tcbSndUna3,tcbSndUna2,tcbSndUnal},

{tcbRcvNxt4,tcbRcvNxt3,tcbRcvNxt2,tcbRcvNxt1},

tcbOffset,

tcbFlags,{tcbSendWinMSB,tcbSendWinLSB},

{tcpTimerMSB,tcpTimerLSB}等。



相关函数有:

TCPIPInit(),

TCPRxHeader(),

TCPProcPktIn(),

TCPTransmit(),

TCPReTransmit(),

TCPAppPassiveOpen(),

TCPAppActiveOpen(),

CPAppClose(),

TCPAddRcvNxt(),

TCPIncRcvNxt(),

TCPIncSndUna(),

TCPCopySeqToNxt(),

TCPAckUpdate(),

TCPUpdateSeq(),

TCPChkSeq(),

TCPRestorePrev(),

TCPCmpNxtSeq(),

TCPSendEmptyPkt(),

TCPSendReset(),

TCPSendSyn(),

TCPSendISN(),

TCPSendSynAck(),

TCPSendAck(),

TCPSendFin(),

TCPCheckSuminit(),

CPCheckSumAcc(),

TCPCheckSumAddHdr(),

CPTxByte(),

TCPStartPktOut(),

TCPAppInit(),

TCPAppTxBytes(),

TCPAppTxData(),

TCPAppTxDone(),

TCPAppRxBytes(),

TCPAppRxData(),等。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!