我使用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,duration = 6.846s,table = 0,n_packets = 0,n_bytes = 0,priority = 8,tcp,nw_src = 10.0.0.3,nw_dst = 10.0.0.1 actions = output:1
cookie = 0x0,持续时间= 6.847s,表= 0,n_packets = 0,n_bytes = 0,优先级= 0动作=控制器:65535
拓扑:10.0.0.1 --------开关-------- 10.0.0.2 | | 10.0.0.3 enter image description here
2 回答
使用Mininet重现您的设置后,我无法重现该问题 .
Open vSwitch's code to change IP addresses is pretty straightforward . 没有提到序列号 .
我使用
ovs-appctl ofproto/trace
跟踪Open vSwitch在接收TCP数据包时的行为:输出不包括任何序列号修改 .
这三点让我相信你的问题不是来自Open vSwitch . ACK编号修改是否可以来自其他软件?您是在Mininet还是在物理主机上运行实验?
我找到了答案 . 由于在Linux内核中监视tcp连接,我们无法复制tcp状态 .