【发布时间】:2013-05-23 05:00:47
【问题描述】:
我修改了 TCP 数据包的 IP 标头,并直接在 netfilter NF_INET_LOCAL_OUT 挂钩中将它们发送出去。 TCP 连接可以成功建立。不幸的是,设置了PSH标志的数据包不能被对端很好地处理。但是,如果我让带有 PSH 的数据包通过默认的 linux 堆栈,而其他数据包通过我的模块,那么所有 TCP 数据包都会顺利通过。我可以知道使用 PSH 的数据包会发生什么情况吗?我该如何解决这个问题?谢谢。
【问题讨论】:
-
真的不清楚你尝试做什么以及你看到了什么失败。您是否修改现有数据包或更改它们?你是设置 PSH 标志、清除它还是什么?
-
很抱歉给您带来了困惑。实际上,我只修改了 IP 标头,没有修改 TCP 标头和有效负载。我没有设置 PSH 标志。我观察到如果数据包是 Linux 中的数据包,则 PSH 标志设置错误。谢谢。
-
我正在使用内核 2.6.32.27 的 CentOS 6.2 机器。谢谢。
-
我还是不明白这个问题。 PSH标志对于数据包来说是正常的,一般影响不大。
-
是的,实际上,这是我的问题。如果我修改带有 PSH 标志的数据包标头,对端将无法很好地处理数据包。但是,如果我只修改其他数据包,例如使用 SYN 和 ACK,并让数据包进入默认的 linux 堆栈,则对等方可以很好地处理它们并正确响应。
标签: c linux networking tcp netfilter