为了解决这个问题之前,先复习一下TCP的报头.
一、TCP报头分析
第一行:从左到右表示16位源目标端口号与16位目地端口号,通过端口可以标识互联网上唯一的进程.
第二行:32位序号,用来保证数据的按序到达.
第三行:32位确认号,保证数据的完整性,如果没有收到确认,则进行重发.
第四行:4位首部长度,用来将报头与数据分离的.单位是4字节;保留6位;6位TCP标志,分别为:
URG:紧急位,其值为1表示紧急指针有效.表示数据需要优先处理,紧急指针指向的是数据的最后一个字节的位置.从数据开始到紧急指针,不需要进入缓冲区,直接交付给上层应用.
ACK:其值为1表示确认号有效.其值为0,表示确认号无效.(一般而言,建立连接之后,该值通常为1)
PSH:其值为1,表示不必等缓冲区写满,只要该数据到达,即交付给上层.
RST:其值为1时,重置连接,一般来说,重置连接意味着发生了某些错误.
SYN:表示建立连接时使用,同步序号,SYN=1,ACK=0,表示请求建立连接.SYN=1,ACK=1,表示对方同意建立连接.只有前两次握手建立连接时,该值才为1.
FIN:其值为1,表示发起释放连接的请求.
在右边是16为窗口大小,用来控制流量的.
第五行:16位TCP校验和,和16位紧急指针.
二、URG与PSH区别
我们从上述对标志位的描述中可以看出来:URG与PSH都表示数据要进行优先处理,
但URG为1时,表示从数据开始到紧急指针部分,不必进入缓冲区直接交付上层应用.
而PSH为1时,通知缓冲区,数据进入缓冲区,只要数据完整的接收完后立即交付给上层应用.(而不必等缓冲区满)