TCP 数据报封装于 IP 数据报中,在 IP 的不可靠尽力而为的服务上创建了 可靠数据传输服务。
TCP 有自己的 连接管理机制,基于 确认重传 实现了数据传输的可靠性。在此基础上加上了 流量控制 保证接收方成功接收和 拥塞控制 避免网络阻塞,这些构成了 TCP 协议的核心。
流量控制和拥塞控制都涉及到了窗口这一概念,都是为了降低传输的速度,但处理的是不同的场景。
流量控制主要是滑动窗口,为了解决接收方因缓存等原因传输失败。拥塞控制以慢启动和拥塞避免为核心,解决因网络拥塞导致的丢包而传输失败。
报文结构
一般情况下 TCP 头部占用 20 字节,但有选项的情况下可能有 60 字节,体现了 TCP 协议中的所有思想,结构如下。
下列名称链接对应更详细的介绍
- 源端口和目的端口(各 16 比特):与 IP 协议头部中的源 IP 和目的 IP 构成四元组,唯一的标识了每个连接。
- 序列号(32 比特):TCP 协议中数据每一个字节都有其对应的编号,这个字段用于标识当前报文第一个字节的序列号。
- 确认号(32 比特):期望收到的下一个序列号。如已收到 600 号的数据,则该字段应设为 601。
- 头部长度(4 比特):由于选项的存在,TCP 头部长度可变,所以用这一字段表示。头部长度以 32 比特为一个单位。
- 保留未用(4 比特):被保留不使用。
- CWR(1 比特):拥塞窗口减,使发送方降低发送速率。
- ECE(1 比特):ECN 回显。
- URG(1 比特):紧急。
- ACK(1 比特):确认,启用时确认号才有效。
- PSH(1 比特):推送,指明接收方应立即交给上层应用程序。
- RST(1 比特):连接重置。
- SYN(1 比特):用于初始化连接。
- FIN(1 比特):表明自己已结束发送数据,用于关闭连接。
- 窗口大小(16 比特):用于流量控制的一个字段。
- 校验和(16 比特):用于保证传输数据的可靠性。
- 紧急指针(16 比特):紧急模式下启用,此时传输的数据具有高优先级,指针标明紧急数据尾部。
- 选项(可变):用于实现其他一些功能。