- 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 位紧急指针:有时候一些数据需要优先被上层处理,但是报文又是按照顺序放在接收缓冲区里,不能破坏顺序,所以紧急指针就可以标识哪部分是紧急数据。
- 数据:完整的应用层数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!