1

我的项目使用的是真机(hp procurve),我需要发送其他协议格式的消息,例如 OSPF,而不是流,通过套接字从控制器端发送到 OpenFlow 交换机(通过指定 IP 地址和端口OF 开关)。

但是每次我尝试这样做时,我都会收到“连接被拒绝”错误消息,我想可能是我发送消息的 OpenFlow 交换机上的端口没有在监听,所以我想我可能需要使用相同的OpenFlow 交换机用于与控制器通信的发送端口,例如日志信息中的端口 51067:

  • Switch:192.168.1.11:51067连接到Controller

我的问题是,我如何检索控制器端的端口信息,因为每次我重新启动它都会改变它?我找不到这个信息。

还是我走错了方向,我需要换一种方式而不是使用套接字发送消息?

提前非常感谢,任何建议将不胜感激。

琼斯

4

1 回答 1

1

我认为您误解了网络端口协议号OSPF等协议的性质。让我澄清一下:

端口号:通常,只有一个应用程序在一个端口上侦听:操作系统/网络堆栈检查特定类型(例如 TCP 或 UDP)的每个数据包的端口号,然后将数据包传递给自己注册的应用程序那个特定的端口。如果应用程序无法处理接收到的数据包,那么通常它会忽略它或记录错误。

旁白:只有在两个应用程序之前放置某种多路复用应用程序(通常是反向代理,可能是TCPMUX 应用程序),两个应用程序才有可能在同一个端口上进行通信。这个多路复用应用程序将接收传入的数据包,确定它是什么类型的数据包,然后将其传递给正确的应用程序。

协议号:协议号是 IP 数据包内的一个字段,它告诉网络堆栈其中包含什么类型的数据。例如,TCP 是协议 6,ICMP 是 1,OSPF 是 89。

OF 交换机:现在,从逻辑上讲,OF 交换机由两个组件组成:1) 交换结构(包括物理端口和 OF 流表),以及 2) 用于带外控制的单独物理端口,具有多种应用在它后面跑。这些应用程序之一是 OpenFlow 应用程序,在您的情况下,它恰好在端口 51067 上进行侦听。但在实际交换机中,其他应用程序也可能在不同的端口上运行,例如在端口 80 上运行的用于维护的 Web 界面等。

OSPF:如果您现在想与服务于 Web 界面的应用程序通信,您需要从控制器向交换机发送一个目标端口为 80 的 TCP 数据包。同样,如果您想安装一个新流程,您需要发送一个 TCP 数据包,端口为 51067。OSPF 则完全不同,它直接使用 IP 数据包,不使用端口号。要处理 OSPF 数据包,应用程序需要使用原始套接字来处理传入的协议号为 89 的 IP 数据包,并跳过所有其他数据包。另请参阅此处的原始联机帮助页。这将已经内置到您的 OF 开关中。

因此,如果您想向 OF 交换机发送一个 OSPF 数据包(并且您的 OF 交换机在单独的物理端口上支持 OSPF!),您只需向交换机的 IP 地址(192.168.1.11)发送一个 OSPF IP 数据包,不需要端口!

请注意,单独的物理端口可能不支持 OF 交换机上其他端口的所有功能,因为它们的用途不同。

于 2015-05-19T10:18:11.773 回答