【发布时间】:2011-05-07 07:15:25
【问题描述】:
在 rfc793 第 3.1 节中,TCP 标头标头具有 6 个保留位,在 rfc3168 上减少到 4 个保留位。 我如何在 Linux 上或通过程序访问和更改这些位,甚至如何为此目标编写程序?
【问题讨论】:
标签: header tcp network-programming
在 rfc793 第 3.1 节中,TCP 标头标头具有 6 个保留位,在 rfc3168 上减少到 4 个保留位。 我如何在 Linux 上或通过程序访问和更改这些位,甚至如何为此目标编写程序?
【问题讨论】:
标签: header tcp network-programming
标准套接字 API 没有为应用程序提供直接更改 TCP 标头中各个标志的方法。
我可以想到几种可能的方法来解决这个问题:
编写一个 TUN/TAP 网络设备,对通过它的数据包执行所需的标头修改,然后再将它们转发到真实的网络设备。内核配置为通过您的 TUN/TAP 设备发送所有传出数据包。
使用 PF_PACKET 套接字从用户空间构造和发送完全自定义的 TCP 数据包。不过,您将负责自己实现所有 IP 和 TCP,包括 IP 片段重组之类的事情。我不建议这样做,除非您只想触发几个数据包而不是建立完整的 TCP 连接。
创建一个实现 TCP 标志修改目标的 netfilter (iptables) 模块。您可以根据现有的 ipt_ECN.c 模块轻松完成此操作,该模块只有 146 行。
【讨论】:
SOCK_RAW、PF_INET 套接字也应该可以做到。