1. TCP 协议的定义
TCP 全称为传输控制协议 (Transmission Control Protocol)。人如其名,要对数据的传输进行一个详细的控制。
2. TCP 协议段格式

2.1. 各部分含义
- 源/目的端口号: 表示数据是从哪个进程来,到哪个进程去;
- 32 位序号/32 位确认序号: 序号 + 1;
- 4 位 TCP 报头长度: 表示该 TCP 头部有多少个 32 位 bit(有多少个 4 字节)。所以 TCP 头部最大长度是 15 * 4 = 60;
- 6 位标志位:
- URG: 紧急指针是否有效
- ACK: 确认号是否有效
- PSH: 提示接收端应用程序立刻从 TCP 缓冲区把数据读走
- RST: 对方要求重新建立连接;我们把携带 RST 标识的称为复位报文段
- SYN: 请求建立连接;我们把携带 SYN 标识的称为同步报文段
- FIN: 通知对方,本端要关闭了,我们称携带 FIN 标识的为结束报文段
- 16 位窗口大小: 后面再说
- 16 位校验和: 发送端填充,CRC 校验。接收端校验不通过,则认为数据有问题。此处的检验和不光包含 TCP 首部,也包含 TCP 数据部分。
- 16 位紧急指针: 标识哪部分数据是紧急数据;
- 40 字节头部选项: 暂时忽略;
3. TCP 两种通信方式
- 客户端每次发送数据,都会立刻接收到应答
- 客户端发送多个数据时,一次性返回多个应答
很明显方案二更加高效,但是方案二有一个缺陷,那就是如果多个应答中有一个应答丢失,如何知道是哪一个应答丢失呢?所以这就需要确认应答机制中的序列号和确认序号出马了!
4. 确认应答 (ACK) 机制
什么是确认应答机制?我们平时交流的时候,怎么确认对方接受到了我们传送的消息呢?就需要对方给我们传递一个应答消息表示对方已经接受到了我们的消息。
基本原理
TCP 确认应答机制的核心思想是,发送方在发送数据后,接收方需要向发送方返回一个确认应答报文(ACK 报文),以告知发送方数据已成功接收。这一机制确保了发送方能够知道其发送的数据是否已被接收方正确接收。
确认应答机制的特性
- 收到了应答就知道历史数据 100% 被对方收到了!这就是可靠性!
- 如果应答没有成功传给对方呢?客户端就会认为数报文丢失了,就会重新再发送一次报文(超时重传机制)。
解决'后发先至'问题
在网络传输过程中,由于路径延迟和节点繁忙程度的不同,可能会出现'后发先至'的问题,即后发送的数据包先到达接收方。为了解决这个问题,TCP 引入了序号和确认序号的概念,通过对数据进行编号,接收方可以准确地识别出每个数据包的顺序,并生成正确的确认序号。

TCP 将每个字节的数据都进行了编号,即为序列号。







