源端口号(16位) | 目 的 端 口 号(16位) | ||||||
序列号(32位) | |||||||
确认应答号(32位) | |||||||
偏移 | 保留 | 控 制 位 | 窗 口 大 小 | ||||
校验和 | 紧急指针 | ||||||
选项(长度可变) | 填充 | ||||||
数据部分 |
这里面没有TCP的包长度和数据长度的字段,这俩可以通过IP层推算出来。
- 源端口号
- 目的端口号
- 序列号
每发送一次数据,就累加一次数据的大小。 - 确认应答号
是指下一次该收到的数据的序列号。发送端接收到这个之和,就知道之前的数据发送完成了。 - 数据偏移
如果不包含选项字段,TCP的首部长度是20字节,那么偏移可以为5。同样的道理,如果这个字段是5,那么说明前面20个字节都是TCP首部,余下都是TCP数据。 - 保留
长度为4位,一般设置为0,扩展使用。 - 控制位
- CWR(Congestion Window Reduced) 与后面的ECE都用于IP首部的ECN字段,为1时,通知对方已将拥塞窗口缩小。
- ECE ECN-echo,为1会通知对方,从对方到这边有网络拥塞。
- URG 为1,代表有紧急处理的数据,和后面的紧急指针关联。
- ACK 为1,TCP中除了第一次请求建立链接时,SYN为1之外,这个都需要置1
- PSH 为0,表示不需要将收到的数据马上传给上层协议。为1,表示可先缓存。
- RST 为1,表示TCP出现异常,必须强制断开连接。
- SYN 用于建立连接,SYN为1代表请求建立连接
- FIN 为1表示今后不再有数据发送,断开连接。
- 窗口大小
该字段长16位。和ack配合使用 - 校验和 和UDP校验和相似,不同之处在于TCP中强制打开
- 紧急指针,和URG配合使用,如果为60,表示TCP首部之后的60个字节需要紧急处理。
- 选项(可选) 为了提高TCP的传输性能。
MSS 建立连接时决定最大段长度的情况
SACK 选择确认应答
时间戳 数据量大,传输不稳定的网络环境下,保证可靠传输。 - 填充
最大吞吐量
Tmax = W / RTT
W 窗口大小
RTT 返回时间