TCP协议首部中URG与PSH的区别
一个TCP报文段分为首部和数据两个部分,而TCP的全部功能都体现在他首部中个字段的作用。本文主要介绍首部中URG以及PSH的功能以及区别:
1.紧急URG(URGent): 当URG=1时,表明紧急指针字段有效。他告诉系统此报文段中有紧急数据,应尽快推送(相当于高优先级的数据),而不需要按原来的排队顺序来传送。例如:已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行。因此用户从键盘发出终端命令(Ctrl+C)。如果不使用紧急数据,那么这两个字符将存储在接受TCP的缓存末尾。只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程。这样做就浪费了很多时间。
当URG置1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与首部中紧急指针字段配合使用。
2.推送PSH(PuSH):当两个应用进程进行交互式的通信时,有时在一端的应用进程希望再键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送操作。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快交付接收应用进程,而不再等到整个缓存都填满了再向上交付。
虽然应用进程可以选择推送操作,但推送操作还是很少使用。
区别:
URG是紧急标志位,当它为1的时候表明此报文段中含有紧急数据,并且紧急数据排在普通数据的前面,当接受端收到此报文后后必须先处理紧急数据。而后再处理普通数据。
PSH是催促标志位,当发送端将PSH置为1时,TCP会立即创建一个报文并发送。接受端收到PSH为1的报文后就立即将接受缓冲区内数据向上交付给应用程序,而不是等待缓冲区满后再交付。
两者都可理解为处理紧急数据的标志位,只是处理方法不同。URG的紧急数据仅在报文内,而PSH的紧急数据还在接受缓冲区内。