【问题标题】:access and change the reserved bits on tcp header访问和更改 tcp 标头上的保留位
【发布时间】:2011-05-07 07:15:25
【问题描述】:

在 rfc793 第 3.1 节中,TCP 标头标头具有 6 个保留位,在 rfc3168 上减少到 4 个保留位。 我如何在 Linux 上或通过程序访问和更改这些位,甚至如何为此目标编写程序?

【问题讨论】:

    标签: header tcp network-programming


    【解决方案1】:

    标准套接字 API 没有为应用程序提供直接更改 TCP 标头中各个标志的方法。

    我可以想到几种可能的方法来解决这个问题:

    • 编写一个 TUN/TAP 网络设备,对通过它的数据包执行所需的标头修改,然后再将它们转发到真实的网络设备。内核配置为通过您的 TUN/TAP 设备发送所有传出数据包。

    • 使用 PF_PACKET 套接字从用户空间构造和发送完全自定义的 TCP 数据包。不过,您将负责自己实现所有 IP 和 TCP,包括 IP 片段重组之类的事情。我不建议这样做,除非您只想触发几个数据包而不是建立完整的 TCP 连接。

    • 创建一个实现 TCP 标志修改目标的 netfilter (iptables) 模块。您可以根据现有的 ipt_ECN.c 模块轻松完成此操作,该模块只有 146 行。

    【讨论】:

    • 我可以使用 RAW SOCKET 并实现一个新的 TCP 头吗?
    • @Ramin:是的,SOCK_RAWPF_INET 套接字也应该可以做到。
    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多