TCP的推送比特PSH(Push)
TCP的推送比特PSH(Push)
TCP的推送比特PSH(Push)
PSH是TCP报头中的一个标志位,发送方在发送数据的时候可以设置这个标志位.当两个应用程序进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应.在这种情况下,TCP可以使用推送(push)操作.这时,发送端TCP将推送比特PSH置为1,并立即创建一个报文段发送出去.接收TCP收到推送比特置1的报文段,就尽快地(即"推送向前")交付给接收应用进程,而不再等到整个缓冲都填满了再向上交互.PSH比特也叫急迫比特.
虽然应用程序可以选择推送操作,但推送操作还是往往不被人们使用,实际上现在的TCP协议栈基本上都可以自行处理这个问题,而不是交给应用层处理.
发送方使用该标志通知接收方将所收到的数据全部提交给接收进程,这里的数据包括与PUSH一起传送的数据以及接收方TCP已经为接收进程收到的其他数据.在最初的TCP规范中,允许发送应用程序设置TCP的PSH标识.当发送应用程序设置TCP的PSH标识后,TCP应把发送缓存中的数据发送出去,而不需等待其他额外的数据,而接受端在收到PSH标志后,应该把已经接受到的数据提交给应用程序,而不需等待其他可能的数据.
多数源自伯克利(BSD)的TCP实现可在发送缓存被清空(发送缓存内的数据被全部发送)的时候自动设置PSH标识.因为应用程序在写数据给TCP时,就会被TCP发送(除非由于接受端窗口为0,或其他不能发送的原因).如果待发送的数据会清空发送缓存,那么协议栈栈就会自动为此包设置PSH标志.而因为源自BSD的TCP从不把接收到的数据延迟提交给应用程序,所以接收端会忽略掉接收到的PUSH标识.
PSH位就是用来通告接收方立即将收到的报文连同TCP接收缓存里的数据递交应用进程处理.一般会出现在发送方封装最后一个应用字段的TCP报文中,针对TCP交互式应用,则只要封装有应用字段的TCP报文,均会将PSH位置1.当然,应用程序的开发者,可以根据需要,在某个应用功能模块或某个应用操作中,将所有封装应用字段的TCP报文PSH位置1,以提高交互双方的处理效率,这在理论上应该也是可行的.
下一篇: TCPvsUDP详解及其区别
推荐阅读
-
push推送是什么意思(Push消息的含义及好处)
-
node.js中TCP Socket多进程间的消息推送示例详解
-
TCP的推送比特PSH(Push)
-
ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知的示例代码
-
git push 本地项目推送到远程分支的方法(git命令版)
-
git push & git pull 推送/拉取分支的具体使用
-
Docker镜像推送(push)到Docker Hub的实现
-
TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)
-
node.js中TCP Socket多进程间的消息推送示例详解
-
以友盟+U-Push为例,深度解读消息推送的筛选架构解决方案应用与实践