12.ack,ACK 的区别与含义
ack,ACK 的区别与含义
在 TCP 协议中,ack
(小写)和 ACK
(大写)的区别主要体现在语法和语义层面:
1. ACK(大写)
含义:TCP 报文头中的控制标志位(Flag),表示该报文携带有效的确认号。
作用:
- 在握手阶段:
SYN + ACK
表示对连接请求的确认(如第二次握手)。 - 在数据传输阶段:
ACK=1
表示该报文是对已接收数据的确认(如第三次握手或普通数据包)。
语法:
- 在报文头中固定为 1 位二进制标志(值为
0
或1
)。 - 例如:
ACK=1
(表示确认有效)。
2. ack(小写)
含义:TCP 报文头中的确认号字段(Acknowledgment Number),是一个 32 位数值。
作用:
- 表示发送方期望接收的下一个字节序号(即已成功接收的最后一个字节序号
+1
)。 - 例如:B 发送
ack=101
,表示 B 已收到 A 的seq=100
的数据,期望 A 下次从seq=101
开始发送。
语法:
- 是一个具体的数值(如
ack=201
)。 - 仅在
ACK=1
时有效(若ACK=0
,则确认号字段无意义)。
关键区别总结
对比项 | ACK(标志位) | ack(确认号字段) |
---|---|---|
类型 | 1 位二进制标志(0/1) | 32 位序号数值 |
作用 | 声明确认功能是否有效 | 声明期望的下一个序号 |
依赖关系 | 无 | 必须 ACK=1 时才有效 |
示例 | ACK=1 | ack=101 |
实际报文示例
以第二次握手为例:
B → A: SYN=1, ACK=1, seq=200, ack=101
ACK=1
:表示这是一个确认报文(标志位)。ack=101
:表示 B 期望 A 下次从seq=101
开始发送(确认号字段)。
常见混淆场景
- 错误写法:
ACK=101
❌
正确写法:ACK=1, ack=101
✅(标志位和确认号分开)。 - 何时省略:
若ACK=0
,则无需填写ack
字段(即使填写也会被忽略)。