从控制器向OpenFlow交换机发送非流消息

时间:2015-03-02 15:47:14

标签: message openflow

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

但是每当我尝试这样做时,我都会收到“Connection refused”错误消息,我想可能是OpenFlow交换机上的端口我正在发送消息而不是正在收听,所以我想我可能需要使用相同的端口进行发送,OpenFlow交换机使用该端口与控制器通信,如日志信息中的端口51067:

  
      
  • 开关:192.168.1.11: 51067 连接到控制器
  •   

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

或者我的方向错误,我需要采取另一种方式,而不是使用套接字发送消息?

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

jonesir

1 个答案:

答案 0 :(得分:1)

我认为您误解了networking portsprotocol numbers以及OSPF等协议的性质。让我澄清一下:

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

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

协议号:协议号是IP数据包内的一个字段,用于告知网络堆栈内部包含哪种类型的数据。例如,TCP是协议6,ICMP是1,OSPF是89。

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

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

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

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