TCP报文中的URG和PSH标志位

时间:2022-07-01 10:18:09
URG和PSH     在讲这两个标志位之前,我们先来认识一下TCP报文。              TCP报文中的URG和PSH标志位
    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是在处理的后端告诉内核,不用等待缓冲区满再交付。