TCP报头中的URG和PSH

一、URG
紧急URG(URGent)当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应该尽快传送,而不按照原来的排队序列来传送。
当URG=1时,发送应用进程告诉发送方的TCP有紧急数据要传送,于是发送方的TCP就将紧急数据插入到本报文数据段的最前面,而在紧急数据后面的数据仍是普通数据。
二、PSH
推送(PuSH),当两个应用进程进行交互式的通信时,有时一端的应用进程希望在键入一个命令之后就能立即收到对方的响应。在这样的情况下,就可以使用推送操作,此时,发送方将PSH置为1,并创建一个报文发送出去,接收端接受到该报文,发现PSH为1,就尽快交付接受应用进程,而不用等到整个缓存都满了之后再向上交付。
三、两者的区别
  URG=1,表示紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指向字节就是紧急数据)不进入缓冲区就直接交给上层进程,余下的数据都是要进入接收缓冲的;
  一般来说TCP是要等到整个缓存都填满了后在向上交付,但是如果PSH=1的话,就不用等到整个缓存都填满,直接交付,但是这里的交付仍然是从缓冲区交付的,URG是不要经过缓冲区的。

### TCP 报头结构解释 TCP 报头是一个固定长度的部分,用于描述传输控制协议 (TCP) 的元信息以及其功能实现方式。以下是关于 TCP 报头的主要组成部分及其作用: #### 1. **源端口号** - 占用 16 位。 - 表示发送方的端口号,用于标识本地应用程序实例[^1]。 #### 2. **目标端口号** - 同样占用 16 位。 - 表示接收方的端口号,用于指定远程主机上的特定服务或程序。 #### 3. **序列号** - 占用 32 位。 - 序列号用于标记数据包中的第一个字节的位置,从而确保数据按顺序到达并重组[^4]。 #### 4. **确认号** - 占用 32 位。 - 确认号表示期望收到的下一个字节编号,通过这种方式实现可靠的确认应答机制[^2]。 #### 5. **头部长度(数据偏移)** - 占用 4 位。 - 定义了 TCP 头部的实际长度,单位是以 4 字节为一组的数据块计数。最小值为 5(即 20 字节),这是标准头部的长度。 #### 6. **标志位(Flags)** - 总共占用了 9 位,其中包括保留字段六个常用标志位: - `URG`:紧急指针有效。 - `ACK`:确认号是否有效。 - `PSH`:提示接收方尽快交付给上层应用。 - `RST`:重置连接。 - `SYN`:同步序列号,用于发起新连接请求。 - `FIN`:结束会话,通知对方关闭连接。 #### 7. **窗口大小** - 占用 16 位。 - 告诉发送方当前接收缓冲区还能容纳多少字节数量,以此动态调整流量控制[^3]。 #### 8. **校验** - 占用 16 位。 - 提供错误检测能力,覆盖整个伪头部、TCP 首部及携带的数据部分。 #### 9. **紧急指针** - 占用 16 位。 - 当 URG 标志被设置时生效,指出本报文中优先级较高的那部分内容相对于序列号的具体位置差值。 #### 10. **可选字段** - 可变长区域,通常为空或者包含额外的功能扩展参数,比如 MSS(最大报文段长度)、窗口缩放因子、时间戳等选项[^5]。 ```python class TCPPacketHeader: def __init__(self, source_port, destination_port, sequence_number, acknowledgment_number, header_length, flags, window_size, checksum, urgent_pointer, options=None): self.source_port = source_port self.destination_port = destination_port self.sequence_number = sequence_number self.acknowledgment_number = acknowledgment_number self.header_length = header_length self.flags = flags self.window_size = window_size self.checksum = checksum self.urgent_pointer = urgent_pointer self.options = options or [] ``` 以上是对 TCP 报头基本组成要素的一个概括说明,每项都有助于构建稳定高效的通信链路。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值