- 16 位源端口号:从哪个进程来;
- 16 位目的端口号:到哪个进程去;
- 32 位序号:给数据编的号,第一个数据有一个编号,第二个数据有一个编号…通过编号来确定数据之间的先后顺序;
- 32 位确认序号(可靠性):有特定含义,表示接下来想要的下一条数据编号是多少,而不是收到的数据编号是啥;
发送方 收到 应答数据 的时候,应答报文中的 确认序号 假如是 1001,此时发送方就知道 1 - 1000 的数据已经顺利抵达,并且接下来要发送的数据从 1001 开始。
- 4 位首部长度 与 选项:表示该 TCP 头部有多少个 32 位 bit (有多少个 4 字节),所以TCP头部最大长度是15 * 4 = 60 字节,而 TCP 首部固定大小为 20 字节,不足 60 字节通过 选项 来填充补齐,即填充字节最大为 40 字节。
固定大小 20 字节:
16 位源端口号(2 字节)
16 位目的端口号(2 字节)
32 位序号 (4 字节)
32 位确认序号(4 字节)
4 位首部长度 + 保留 6 位 + 6 个标志位 (2 字节)
16 位窗口大小 (2 字节)
16 位校验和 (2 字节)
16 位紧急指针(2 字节)
- 保留 6 位:先占个位置,现在不用,后面可能会用;
- URG (urgent,紧急的) :紧急指针是否有效;
- ACK (acknowledgement,确认) : 确认号是否有效;
- PSH (push) : 提示接收端应用程序立刻从TCP缓冲区把数据读走;
- RST (reset,重置) : 对方要求重新建立连接;把携带RST标识的称为复位报文段;
- SYN (synchronous,同步) : 请求建立连接;把携带SYN标识的称为同步报文段;
- FIN (finish,结束): 通知对方,本端要关闭了,称携带FIN标识的为结束报文段;
这六个标志位,每个标志位占 1 bit,能表示 0 / 1;
- 16 位窗口大小:告诉发送方自己能接受的数据量最大还有多少。
- 16 位校验和:校验数据内容是否正确;
- 16 位紧急指针:有时候一些数据需要优先被上层处理,但是报文又是按照顺序放在接收缓冲区里,不能破坏顺序,所以紧急指针就可以标识哪部分是紧急数据。
- 数据:完整的应用层数据。