TCP/IP "Push" Flag

本文详细解释了TCP协议中PSH标志的作用。发送方使用此标志指示数据应立即发送;接收方通过PSH标志了解数据应立即传递给应用程序。这对于理解TCP数据传输机制至关重要。
"Push" flags is used for telling:
  • The sending application informs TCP that data should be sent immediately.
  • The PSH flag in the TCP header informs the receiving host that the data should be pushed up to the receiving application immediately.
### TCP/IP 协议的数据包结构 在网络通信中,TCP/IP协议栈负责将数据分割并打包成适合传输的形式。这些数据单元被称为数据报或数据包,在不同层次有不同的名称和结构。 #### IP 数据包头部结构 IP 层主要负责源端到目的端的逻辑寻址以及路由选择。IPv4 的数据包头部分包含多个重要字段: | 字段名 | 长度 (bit) | 描述 | |--|---------|----------------------------------------------------------| | 版本 | 4 | 表明使用的 IP 协议版本号,对于 IPv4 来说该值固定为 4[^1] | | 头长度 | 4 | 表示 IP 报文头的总长度,单位是 32-bit 双字 | | 差异服务 | 8 | 提供 QoS(服务质量)控制功能 | | 总长度 | 16 | 整个 IP 数据报的长度,包括头部和载荷 | | 标识符 | 16 | 唯一识别每一个发送方发出的数据报 | | 标志 | 3 | 控制分片行为 | | 分片偏移量 | 13 | 当允许分片时指示此片段的位置 | | 生存时间(TTL)| 8 | 定义了数据报的最大跳数 | | 上层协议 | 8 | 指定下一个要处理数据报的高层协议 | | 首部校验和 | 16 | 用于检测 IP 头部错误 | | 源地址 | 32 | 发送者的 IP 地址 | | 目标地址 | 32 | 接收者的 IP 地址 | ```c struct ip { u_char ip_vhl; /* version << 4 | header length >> 2 */ u_char ip_tos; /* type of service */ short ip_len; /* total length */ u_short ip_id; /* identification */ u_short ip_off; /* fragment offset field */ #define IP_DF 0x4000 /* dont fragment flag */ #define IP_MF 0x2000 /* more fragments flag */ #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ u_char ip_ttl; /* time to live */ u_char ip_p; /* protocol */ short ip_sum; /* checksum */ struct in_addr ip_src,ip_dst; /* source and dest address */ }; ``` #### TCP 段头部结构 当涉及到可靠性的连接建立和服务质量保障时,则会用到传输控制协议(TCP),其段格式如下表所示: | 字段名 | 长度(bit) | 描述 | |--------| | 源端口 | 16 | 发起请求的应用程序所占用的端口号 | | 目标端口 | 16 | 对应接收应用程序监听的端口号 | | 序列号(SQN) | 32 | 记录当前发送出去的数据流中的第一个字节编号 | | 确认序号(ACK) | 32 | 如果 ACK=1 ,则确认序列号有效;表示期望收到对方下次传来数据的第一个字节编号 | | 数据偏移/保留位 | 4 / 6 | 数据偏移指明 TCP 头有多长,以 32 bit 为单位计算 | | 保留 | 6 | 未定义,通常置零 | | URG | 1 | 若标志位置 1 , 则紧急指针有效 | | ACK | 1 | 若标志位置 1 , 则确认序号有效 | | PSH | 1 | 请求把所有缓冲区里的数据立即传给应用层 | | RST | 1 | 重置连接 | | SYN | 1 | 同步序列编号用来发起一个新连接 | | FIN | 1 | 结束连接 | | 窗口大小(Window Size) | 16 | 显示可以接受多少字节数目而不必等待确认 | | 校验和(Checksum) | 16 | 被用来验证整个 TCP 段的有效性 | | 紧急指针(Urgent Pointer) | 16 | 在URG被设置的情况下才有意义,指出本报文中紧急数据最后一个字节相对SQN的位置| ```c typedef uint16_t tcp_seq; struct tcphdr { __be16 th_sport; __be16 th_dport; __be32 th_seq; __be32 th_ack; __u16 th_x2:4, th_off:4; unsigned char th_flags; #define TH_FIN 0x01 #define TH_SYN 0x02 #define TH_RST 0x04 #define TH_PUSH 0x08 #define TH_ACK 0x10 #define TH_URG 0x20 __be16 th_win; __sum16 th_sum; __be16 th_urp; }; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值