在rfc793第3.1节中,TCP头标头有6个保留位,在rfc3168上减少到4个保留位。 如何在Linux或程序上访问和更改这些位,甚至如何为此目标编写程序?
答案 0 :(得分:2)
标准套接字API不为应用程序提供直接更改TCP标头中各个标志的方法。
我可以想到几种可能的方法来解决这个问题:
编写一个TUN / TAP网络设备,在将它们转发到真实网络设备之前,对通过它的数据包执行所需的标头修改。内核配置为通过您的TUN / TAP设备发送所有传出数据包。
使用PF_PACKET套接字构造并从用户空间发送完全自定义的TCP数据包。但是,您将负责自己实现所有IP和TCP,包括IP片段重组等内容。我建议不要这样做,除非你只是想发射几个数据包而不是建立一个完整的TCP连接。
创建一个实现TCP标志修改目标的netfilter(iptables)模块。您可以根据现有的ipt_ECN.c
模块轻松完成此操作,该模块只有146行。