URG和PSH

来源:互联网 发布:vga 网络机顶盒 编辑:程序博客网 时间:2024/06/06 15:44

URG和PSH

1.基本概念

URG和PSH属于tcp协议中的标志位。

URG:表示本报文段中发送的数据是否包含紧急数据。URG=1,表示有紧急数据。后面的紧急指针字段只有当URG=1时才有效。

PSH:告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1,则表示对方应当立即把数据提交给上层,不做处理。

2.URG和PSH的特点及区别

(1)URG的特点

紧急数据的起始点=序号

紧急数据的终止点=序号+紧急指针

紧急指针就是记录紧急数据的字节数,紧急指针永远为正数

在紧急数据后面的数据为普通数据,需要按序缓存

窗口为0也可以发送紧急数据

紧急数据都处理完成后,tcp就告诉进程恢复到正常操作

URG强调的是直接读取数据,不会将该数据复制到缓存中

(2)PSH的特点:

PSH=1表示该报文希望在到达对端时,将这个报文及缓存区之间缓存尚未交付的数据一并交付给进程。

PSH的数据=本报文数据+缓存区数据

PSH的方向--->单方向(接收PSH报文的一端)

PSH强调的是尽快将数据交付给上层(协议),而不需要经过强迫数据交互(默认tcp/ip是将数据缓存到一定的上限,再将数据递交给上层,以提高网络性能).可见,该部分数据是需要复制到缓存中的。


(3)如何区分URG和PSH:

(a)两者都是对数据的处理方式,URG是在前端处理数据,一旦收到不经过缓冲区就交付给应用程序,PSH是在后

台处理数据,告诉内核不必等缓冲区满了再上层递交;

(b)通过URG递交的数据都是紧急数据,然而通过PSH递交的数据则是缓冲区已经排好序的数据加上当前报文

URG是不要经过缓冲区的。

URG=1,表示紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指向字节就是紧急数据)不进入缓冲区(一般不都是待发送的数据要先进入发送缓存吗?就直接交个上层进程,余下的数据都是要进入接收缓冲的;一般来说TCP是要等到整个缓存都填满了后在向上交付,但是如果PSH=1的话,就不用等到整个缓存都填满,直接交付,但是这里的交付仍然是从缓冲区交付的。




原创粉丝点击