【问题标题】:Send TCP packet to the same source向同一个源发送 TCP 数据包
【发布时间】:2018-08-08 20:28:25
【问题描述】:

我想设计一个系统来减少数据包的传输时间发生了什么,实际上,我是否从客户端发送了一个 SYN 位,这个位通过路由器传输到服务器,服务器回复 SYN+ACK通过路由器到达客户端。

所以我只想要其他的东西,例如如果客户端将 SYN 发送到路由器,然后路由器将其发送到服务器并复制此数据包,将 SYN 修改为 SYN+ACK 并在服务器发送此 SYN+ 后发送回客户端之前服务器可以发送向路由器确认,路由器只是接受它(在回复到来时看到它)并丢弃它。

为了实现上述目标,我设计了一个设置,其中我有一台笔记本电脑,它从两个以太网接口发送和接收数据包,另一台是台式机,它充当路由器(数据包来了,它只转发到它的目的地)我从双方设置路由表并在桌面(充当路由器)上启用IP转发。

一切工作正常,在笔记本电脑上我有服务器和客户端程序发送数据包并接收它,但问题是我想将数据包发送到它来自的地方(源自身)所以我修改了使用 Netfilter 模块在路由端的数据包,复制整个 skb(使用 skb_copy)并交换它的 ip 源和目标(我在 NF_INET_PREROUTING 上这样做)并交换端口号,但数据包总是到达目的地。

我还需要做哪些其他修改才能将数据包发送到其源本身?

【问题讨论】:

    标签: linux-kernel router tcp-ip netfilter


    【解决方案1】:

    首先,您必须在这里处理一些细节。

    首先,在 SYN-ACK 包上,服务器发送它的序列。因此,如果在路由器中修改数据包并发送回客户端,您的顺序是什么?它应该与服务器将发送并且服务器尚未发送任何内容相同。

    其次,在握手中有几个协议,如 MSS、SACK 启用等。所以你不能代表服务器。

    关于问题本身,你应该在 PRE_ROUTING 中做,更改 IP 地址和端口,并修复 IP 和 TCP 的校验和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2020-06-11
      • 2015-04-10
      • 1970-01-01
      相关资源
      最近更新 更多