在我们比较这两个控制位之前,我们先各自学习一下这两个控制位的概念。
URG是什么
URG叫做紧急位,URG作为一个紧急指针,当URG=1时,表明紧急指针字段有效。它指出本报文中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完毕后,TCP就告诉应用程序恢复到正常的操作。值得注意的是,即使窗口为0时,也可以发送紧急数据 。
URG=1告诉系统此报文段中有紧急数据,应当尽快传送(相当于高优先级的数据),而不是按照原先的顺序来传送。举个例子吧,我们现在在运行一个程序,改程序需要运行很长的时间,但是突然发现程序里面有一个错误,需要及时的去进行修改,所以我们通过键入Ctrl-C给系统发送一个终止信号。如果我们不使用紧急数据的话,这两个字符将存储在接受TCP的缓存的末尾,只有在所有数据处理完毕之后我们才能将这两个字符交付给接收方的应用程序,这样似乎就失去了提前终止的意义了。所以,我们通过及时的设置URG=1,告诉发送方此时有紧急数据需要传输,于是发送方TCP就将紧急数据插入到本段报文数据段的最前方,这些数据就叫做“带外数据”,而在紧急数据后面的就是正常的普通数据了。
URG的特点
紧急数据的起始点=序号
紧急数据的终止点=序号+紧急指针
紧急指针就是记录紧急数据的字节数,紧急指针永远为正数
在紧急数据后面的数据为普通数据,需要按序缓存
窗口为0也可以发送紧急数据
紧急数据都处理完成后,tcp就告诉进程恢复到正常操作
URG强调的是直接读取数据,不会将该数据复制到缓存中
PSH是什么
推送PSH,PSH叫做急迫位。当两个应用程序进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。接受方TCP收到PSH=1的报文,就尽快地(