一、 TCP 协议本质:数据的组织形式
所谓的“协议”,本质上就是通信双方约定好的一种数据组织格式。这就好比写信,信封上哪里写邮编、哪里写地址,必须按规定来,邮局才能识别。
在 C 语言中,TCP 头部其实就是一个结构体。虽然 PC 机内存默认采用小端存储(Little-Endian),但网络传输统一采用大端模式(Big-Endian),因此在填充头部时需要进行字节序转换。
典型的 TCP 头部结构 (20字节)
我们可以参考 Linux 内核头文件 <netinet/tcp.h> 中的定义:
struct tcphdr {
uint16_t source; // 源端口 (16位)
uint16_t dest; // 目的端口 (16位)
uint32_t seq; // 序号 (32位, 随机生成)
uint32_t ack_seq; // 确认序号 (32位, 校验接收)
// 标志位与偏移量 (混合在16位中)
uint16_t res1:4;
uint16_t doff:4;
uint16_t fin:1; // FIN: 断开连接
uint16_t syn:1; // SYN: 建立连接
uint16_t rst:1;
uint16_t psh:1;
uint16_t ack:1; // ACK: 确认收到
uint16_t urg:1;
// …
uint16_t window; // 窗口大小 (16位, 流量控制)
uint16_t check; // 校验和
uint16_t urg_ptr
网硕互联帮助中心



评论前必须登录!
注册