我通过打开6633端口并侦听OF数据包来解析使用java的openflow数据包。
我的代码打破了一些openflow PACKET_IN数据包。见下图。
我正在使用mininet模拟拓扑。
mn --mac --switch ovsk,protocols=OpenFlow13 --controller remote,ip=172.23.107.166,port=6633 --ipbase=2.2.2.0/24 --topo linear,10
Mininet vesion:2.2.1rc1
Openvswitch版本:2.0.2
以下是wireshark捕获的屏幕截图。
您可以观察到总长度(342)超过长度(170)。
因此我的java代码正在解析额外的数据包字节(因为数据长度不合适:342),即来自下一个数据包的字节,因此解析的后续数据包被破坏。
读取170个字节后应该停止解析。然后应该开始解析下一个数据包。
你能解释一下为什么会这样吗?
答案 0 :(得分:1)
170字节的TCP段长度就是 - 当前段中的字节数。由于openflow总长度为342个字节,因此其数据跨越多个TCP段,因此您的Java代码需要能够处理此问题。