LWIP之TCP协议

IP协议提供了在各个主机之间传送数据报的功能,但是数据的最终目的地是主机上的特定应用程序。传输层协议就承担了这样的责任,典型的传输层协议有UDP和TCP两种。

UDP只为应用程序提供了一种无连接的、不可靠的传输服务。

TCP适用于可靠性要求很高的场合。TCP将所有数据看作数据流按照编号的顺序组织起来,采用正面确认以及重传等机制,保证数据流能全部正确到达,才把数据递交给应用层。许多著名的上层协议都是基于TCP实现的,如DNS、HTTP、FTP、SMTP、TELNET等。

 

报文格式

LWIP之TCP协议

源端口号和目的端口号:用于标识发送端和接收端应用进程

序号:从发送端到接收端的数据的第一个字节编号。新连接建立时(SYN为1),发送方随机一个初始序号ISN

确认序号:ACK为1时有效,表示上次已成功收到数据字节序号加1

首部长度:TCP首部长度,以4字节为长度。如果没有任何选项字段,首部长度应该为5(20字节)

6个标志比特:

LWIP之TCP协议

窗口大小:通知发送方接收缓冲区大小,用于实现流量控制

检验和:保证数据正确性

紧急指针:URG为1时有效,表示报文中包含紧急数据。紧急数据始终放在数据区的开始,紧急指针定义了紧急数据结束处

 

连接机制

TCP协议为通信双方提供了完善的连接建立机制和连接断开机制。

客户端和服务器建立连接的过程称为三次握手过程,客户端发送一个SYN标志置1的TCP报文段,报文段首部指明自己的端口号及期望连接的服务器端口号,通常服务器端口号为一个熟知端口号,客户端选择的端口号通常为一个短暂端口号,可以由一TCP软件自动分配。同时在报文段中,客户端需要通告自己的初始***ISN。除此之外,这个报文中号可以携带一些选项字段,例如前面所说的最大报文段大小、窗口扩大因子,选项将客户端的一些连接属性通告给服务器。注意,本报文段中ACK标志位0,因此它的确认号字段和通告窗口大小字段都会被视为无效。

LWIP之TCP协议