初识TCP协议
什么是TCP协议
TCP即传输控制协议(TCP,Transmission Control Protocol)。TCP协议是TCP/IP协议簇中一个重要的协议,通过端口提供进程到进程的通信,是被广泛使用的一个传输层协议。
TCP协议的主要特点:
- 面向连接
使用TCP协议在传输数据之前,必须先建立连接。数据传输完毕后,必须释放建立的TCP连接。 - 点对点
一条TCP连接只能有连个端点。 - 可靠交付
TCP保证数据的可靠交付,无差错、无丢失、不重复,并且按序到达。 - 全双工通信
TCP协议为连接的两端提供全双工通信的能力,允许通信双方的应用进程任何时候都能发送数据。 - 面向字节流
TCP的 “流” 指的是流入到进程或从进程流出的字节序列。
TCP把应用程序交下来的数据看作是一连串无结构的字节流,TCP并不知道所传输的字节流的含义。
TCP不保证接收方收到的数据块与发送方发出的数据块具有对应的大小关系,但保证接收方收到的字节流与发送方发出的字节流完全一样。
TCP报文格式

TCP报文格式及报文示例可参考http://www.023wg.com/message/message/cd_feature_tcp_message_format.html
TCP报文首部前20字节是固定字段,在启用可选项的情况下最多可以有60字节首部长度。
各字段含义:
| 字段 | 长度 | 含义 |
|---|---|---|
| Source Port | 16比特 | 源端口,标识哪个应用程序发送。 |
| Destination Port | 16比特 | 目的端口,标识哪个应用程序接收。 |
| Sequence Number | 32比特 | 序号字段。TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。 |
| Acknowledgment Number | 32比特 | 确认号,是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。 |
| Data Offset | 4比特 | 数据偏移,即首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,以32比特(4字节)为计算单位。4位二进制数能表达的最大十进制数是15,因此最多有60字节的首部,若无选项字段,正常为20字节。 |
| Reserved | 6比特 | 保留,必须填0。 |
| URG | 1比特 | 紧急指针有效标识。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 |
| ACK | 1比特 | 确认序号有效标识。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。 |
| PSH | 1比特 | 标识接收方应该尽快将这个报文段交给应用层。接收到PSH = 1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付。 |
| RST | 1比特 | 重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。 |
| SYN | 1比特 | 同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求。 |
| FIN | 1比特 | 发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接。 |
| Window | 16比特 | 窗口:TCP的流量控制,窗口起始于确认序号字段指明的值,这个值是接收端正期望接收的字节数。窗口最大为65535字节。 |
| Checksum | 16比特 | 校验字段,包括TCP首部和TCP数据,是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。 |
| Urgent Pointer | 16比特 | 紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。 |
| Options | 可变 | 选项字段。TCP协议最初只规定了一种选项,即最长报文段长度(数据字段加上TCP首部),又称为MSS。MSS告诉对方TCP“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。新的RFC规定有以下几种选型:选项表结束,无操作,最大报文段长度,窗口扩大因子,时间戳。窗口扩大因子:3字节,其中一个字节表示偏移值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。时间戳:10字节,其中最主要的字段是时间戳值(4字节)和时间戳回送应答字段(4字节)。选项确认选项。 |
| Padding | 可变 | 填充字段,用来补位,使整个首部长度是4字节的整数倍。 |
| data | 可变 | TCP负载。 |
TCP核心内容
TCP协议主要包含四大内容,分别是可靠传输、流量控制、拥塞控制和连接管理。
以上内容将分篇进行讨论。

浙公网安备 33010602011771号