[译]TCP标志位:PSH和URG

您所在的位置:网站首页 psh是什么激素921 [译]TCP标志位:PSH和URG

[译]TCP标志位:PSH和URG

2023-08-27 08:21| 来源: 网络整理| 查看: 265

原文链接

  TCP报头中有一系列的单比特控制位用来控制TCP连接中数据的传输。首先不考虑RFC 3168中新加的CWR和ECE控制位,还有其他6个控制位。其中用来控制TCP连接建立、保持、断开的四个控制位在下面已经列出,这对于任何有个基本数据包分析的人来说都应该是很熟悉的。

SYN - 初始化连接ACK - 确认接收到的数据FIN - 断开连接RST - 重新建立连接 PSH控制位

  要理解PSH控制位的作用,首先要理解TCP是如何缓存数据的。TCP工作在OSI七层模型中的第四层,它将基于数据包的通信的复杂的细节给封装起来了,从而给上层应用提供一个简单的读写接口。为了能让应用随时从这个接口中读写数据,在TCP连接的两端都设置有缓存。下图展示了数据在发送端发送前以及接收端接收时是如何缓存的:1455102-20181210165621297-455789807.jpg   在发送超过一个报文尺寸大小的数据(例如一个大的文件),缓存允许更有效的数据传输。然而,对于希望竟可能迅速传输信息的实时应用来说,大的缓存弊大于利。例如对于一个远程的会话窗口,如果要等到填满一个数据包TCP才发送的话:你可能需要输入超过1000个字符远程设备才能收到,这样的话非常鸡肋。这就是引入PSH控制位的原因,TCP提供的接口具有可选项使得应用写入的数据能够立即从缓存中发出,因而不需要等待缓存被填满。这就要求TCP的数据包中PSH控制位置1,在接受端接收到这样一个数据包的时候也会立即将该数据推送给上层应用。总结一下,TCP的推送能力完成了两件事情:

发送数据的应用通知TCP该发送的数据立即发出PSH控制位告诉接收端该数据要立即推送给接收信息的应用。

  我们可以观察一个使用了PSH控制位的HTTP GET请求的数据包,在4号数据包中可以看到初始的HTTP请求设置了PSH位,表明客户端没有额外的信息需要添加,并立即将该请求发送给应用(这里指web守护进程)。同时也可以看到服务器端将36号数据包的PSH位设置为1,这个数据包包含了请求文件的最后一个字节。就这样再一次的使用了PSH控制位来通知接收端发送端的数据没有更多的数据发送。1455102-20181211103343696-1773970308.png   正如上面所提到的,PSH控制位也用在实时应用中。链接中是一段捕获的远程会话的数据包,可以看出其中所有的数据包都设置了PSH控制位,从而可以阻止在键盘输入过程中字符被TCP缓存,达到远程实时控制的效果。

URG控制位

  URG控制位是用来告诉接收端在一个发送的IP数据包中某特定的数据是紧急的,需要优先处理。如果URG控制位置1,接收端就会分析紧急指针(IP报头中用一个16位的二进制表示),这个指针说明从首个字节开始多少个字节的数据是需要紧急处理的。1455102-20181211104604232-1194151804.png   在现代协议中,URG控制位很少被用到,但是在远程会话数据捕获包中可以看到:在86号数据包中0xFF字符优先于70号数据包中表示数据标记的0xF2远程命令。由RFC 854标准可知,这个命令发送时应该设置TCP的URG控制位。而68号数据包中的紧急指针表明该IP分段的第一个字节(在这里是整个分段)是紧急数据。   显然,这不是最明了的URG标志位使用的例子,但是在实际数据捕获中想要找到其他的例子是非常难的。   想要了解更多的PSH和URG控制位的讨论,可以参考The TCP/IP Guide。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3