什么时候在tcp段中设置了push标志

时间:2010-02-15 05:22:40

标签: tcp linux-kernel packet-sniffers

我在这里问过这个问题:

tcp two sides trying to connect simultaneously

我尝试了解决方案中给出的方法,并在使用netcat和使用ethereal嗅探数据包时发送,我发现当我从一侧发送“hello”字符串到另一侧时,它是在一个带有push标志集的段中发送的

谁决定设置推旗? 在tcp段中设置push或urgent标志的规则是什么? 是否可以使用套接字api来完成它?

2 个答案:

答案 0 :(得分:6)

tcp堆栈使用PUSH标志基本上说“我现在已经完成了”。它只是表明数据段是由源完全传输的。

无法在userland(您的套接字api)中指示或控制它,因为这只是tcp堆栈/实现。作为URGENT标志。

(来源:Richard Stevens - Tcp/ip illustrated vol 1,第20章)

答案 1 :(得分:6)

您可以使用send()设置MSG_OOB标志来设置URGENT标志。这意味着,发送的数据将是带外的,这意味着呼叫方通常不会简单地呼叫read()。接收方将获得OOB数据的一些指示,如信号SIGURG,或者套接字将变为异常,并且可以使用select()进行检查。

大多数时候你不想设置URGENT标志。