我使用openvswitch在流表中使用多个动作。当我想修改TCP ipv4_dst并将数据包复制到另一个输出端时,数据包的确认号会随机更改。我不会更改IP标头中的其他字段。为什么会这样?我不想看到确认号码的变化。
流表项: OFPST_FLOW回复(OF1.3)(xid = 0x2): cookie = 0x0,持续时间= 6.846s,表= 0,n_packets = 0,n_bytes = 0,优先级= 6,tcp,nw_src = 10.0.0.2,nw_dst = 10.0.0.1 actions = output:1
cookie = 0x0,duration = 6.846s,table = 0,n_packets = 0,n_bytes = 0,priority = 7,tcp,nw_src = 10.0.0.1,nw_dst = 10.0.0.2 actions = output:2,set_field:10.0 .0.3-> ip_dst,set_field:00:00:00:00:00:03-> eth_dst,输出:3
cookie = 0x0,持续时间= 6.846s,表= 0,n_packets = 0,n_bytes = 0,优先级= 8,tcp,nw_src = 10.0.0.3,nw_dst = 10.0.0.1 actions = output:1
cookie = 0x0,duration = 6.847s,table = 0,n_packets = 0,n_bytes = 0,priority = 0 actions = CONTROLLER:65535
拓扑: 10.0.0.1 -------- --------开关10.0.0.2 | | 10.0.0.3 enter image description here
答案 0 :(得分:0)
使用Mininet复制设置后,我无法重现此问题。
我使用ovs-appctl ofproto/trace
来跟踪Open vSwitch在接收TCP数据包时的行为:
ovs-appctl ofproto/trace s1 in_port=1,dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:02,tcp,nw_src=10.0.0.1,nw_dst=10.0.0.2
输出不包括任何序列号修改。
我使用Wireshark比较了端口2和3上的数据包。在我的情况下,它们具有完全相同的ACK号。
这三点让我相信你的问题不是来自Open vSwitch。 ACK编号修改是否来自其他软件?您是在Mininet中还是在物理主机上运行实验?
答案 1 :(得分:0)
我找到了答案。 由于在Linux内核中监视tcp连接,我们无法复制tcp状态。