在嵌入式系统中支持TCP协议
OHY 2006-12-23
在嵌入式系统中支持TCP比支持UDP更加复杂。除了添加和去除报头及支持IP以外,还必须为连接远程的主机进行3次握手,在交换数据时维护序号和确认号;在关闭连接时握手,以及对检测到的错误作出响应。
一、在以太网中使用TCP发送数据:
1、通过3次握手建立连接。
2、根据接收到的窗口值确定远程主机可接收的数据大小。
3、在TCP报头的相应位置放置源端口号、目的端口号、序号、确认号、报头长度、源主机窗口值以及校验和等。计算校验和需要知道源和目的端的IP地址。
4、在报文段的数据部分放置待发送的数据。
5、在IP数据报的数据部分放置TCP报文段。IP数据报需要知道源和目的端的IP地址,并计算报头的校验和。
6、将IP数据报发送至以太网控制器的驱动程序,准备发送,并启动超时定时器。
7、等待接收表示远程主机收到数据的确认号。如果在超时之后确认号没有到达,则重发该报文段。
二、在以太网中使用TCP接收数据:
1、通过3次握手建立连接。
2、接收来自以太网控制器驱动程序的IP数据报。
3、从该IP数据报中剥离IP报头。计算校验和,并与接收到的数值比较。
4、如果校验和相同,则从TCP数据报中剥离TCP报头。计算校验和,并与接收到的数值比较。
5、检查接收到的确认号,确认目的主机是否已接收前次发送的数据,如果已接收,就从重发队列中删除前次发送的数据。
6、将接收到的序号与期望值比较。如果两者相同,则设置确认号,并置于TCP报文段中返回给发送方。
7、使用目的端口号决定数据传送到何处。
此外,一方可在任何时候请求关闭或重新连接,另一方应确认请求,并可能请求关闭或重置对方的连接。如果使用支持TCP的模块,那么就没有必要考虑创建报文段、计算校验和和序号、确认号等这些细节。