TCP协议首部中URG与PSH

在介绍URG与PSH之前,我们先来看看TCP的首部格式:
TCP协议首部中URG与PSH
上图展示了TCP的报头信息,下来我们介绍URG与PSH:

什么是URG与PSH

URG

紧急URG(URGent)
当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应当尽快传输(相当于高优先级的数据),而不要按原来的排队顺序来传送。例如:已经发生了很长的一个程序要在远地的主机上运行。DNA后来发现了一些问题,需要取消该程序的运行。因此用户从键盘上发出中断命令(Ctrl+C)。如果不适用紧急数据,那么这两个字符将存储在接受TCP的缓存末尾。只有所有的数据被处理完毕后这两个字符才被交付接收方的应用进程,这样做就浪费了许多时间。
当URG置1时,发送应用进程就告诉发送方的TCP有紧急数据要传送,于是发送方TCP就把紧急数据插入到本段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时就要与首部中紧急指针字段配合使用。

PSH

* 推送PSH(PuSH) *
当连个应用进程进程交互式的通信时,有时在一段的应用进程希望在键入一个命令之后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送操作。这时,发送方TCP把PSH置为1,并立即创建一个保温段发送出去。接收方TCP收到PSH=1的报文段,就尽快(即“推送”向前)交付接受应用进程,而不再等到整个缓存都填满了后在向上交付。
注意:虽然应用程序可以选择推送操作,但是推送操作还是很少用。

URG与PSH的区别

通过上面对URG与PSH的介绍,我们可以发现

相同点:

他们都是处理紧急数据的标志位,都是对数据的一种处理。

区别

URG交付的数据:
1、紧急数据不进入接收缓冲区而直接交付给进程,余下数据要进入接收缓冲区;
2、URG是处理在前端(收到数据后立马对真正意义上”数据”进行操作,所以说”紧急”。
PSH交付的数据:
1、TCP在收到PSH置位的报文后,不管后续再有无报文,先将缓存中的提交给应用程序进程。
2、PSH是在处理的后端,告诉内核,不用等待”满了”再递交数据递交到上层。