openvswitch在哪里处理TCP seq和ack?

时间:2017-06-23 06:57:52

标签: sdn openflow openvswitch

我使用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

2 个答案:

答案 0 :(得分:0)

使用Mininet复制设置后,我无法重现此问题。

  1. Open vSwitch's code to change IP addresses is pretty straightforward。没有提及序列号。
  2. 我使用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
    

    输出不包括任何序列号修改。

  3. 我使用Wireshark比较了端口2和3上的数据包。在我的情况下,它们具有完全相同的ACK号。

  4. 这三点让我相信你的问题不是来自Open vSwitch。 ACK编号修改是否来自其他软件?您是在Mininet中还是在物理主机上运行实验?

答案 1 :(得分:0)

我找到了答案。 由于在Linux内核中监视tcp连接,我们无法复制tcp状态。