URG和PSH
在讲这两个标志位之前,我们先来认识一下TCP报文。
URG:紧急标志位
ACK:确认标志位
PSH:推送标志位
RST:复位标志位
SYN:同步标志位
FIN:结束标志位
可以看出在TCP报文*有6个标志位。今天只着重介绍URG标志位和PSH标志位。
URG:紧急标志位,它使一端可以告诉另一端有些具有某种方式的“紧急数据”已经放置在普通的数据流中。另一端被通知这个紧急数据已经放置在普通数据流中,由接收方决定如何处理。
当URG=1时表明紧急指针字段有效,即告诉系统此报文段中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送,发送方的TCP就把紧急数据放到本报文段数据的最前面。URG标志位要与首部中的紧急指针字段配合使用,紧急指针指向数据段中的某个字节(数据从第一个字节到指针所指的字节就是紧急数据)。需要注意的是,即使窗口为0时也可以发送紧急数据,此时紧急数据不进入接收缓冲区直接交给上层进程。
PSH:推送标志位,当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令时立即收到对方的响应。这时,发送方TCP将PSH标志位置1,立即创建一个报文段发送出去,接收方TCP收到PSH位为1的报文,会尽快的交付给应用层,而不是等到缓存填满后交付。
PSH标志是为了提示接收端的应用程序应该立即从TCP的接收缓冲区中拿走数据。
URG和PSH的区别:
(1)URG交付给进程的数据只有紧急数据
PSH交付给进程的数据是缓冲区排好序的数据以及当前报文中的数据
(2)URG强调的是直接读取数据,不会将该数据复制到缓存中
PSH强调的是尽快将数据交付给上层(协议),而不需要经过强迫数据交互。该部分数据是需要复制到缓存的,但不用等到缓冲区满才将数据交付给上层
(3)URG是针对发送方
PSH是针对接收方
URG和PSH的共同点是,两者都是一种对数据的处理方式,只不过URG是处理在前端,而PSH是在处理的后端告诉内核,不用等待缓冲区满再交付。