【问题标题】:send non-flow message from controller to OpenFlow switch从控制器发送非流消息到 OpenFlow 交换机
【发布时间】:2015-03-02 15:47:14
【问题描述】:

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

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

  • Switch:192.168.1.11:51067已连接到控制器

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

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

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

乔纳森

【问题讨论】:

  • 你能澄清你想要做什么吗?一般来说,您不应该尝试通过 OpenFlow 控制通道(即交换机上的端口)发送非 OpenFlow 消息。

标签: message openflow


【解决方案1】:

我认为您误解了networking portsprotocol numbersOSPF 等协议的性质。让我清理一下:

端口号: 通常,只有一个应用程序在侦听一个端口:操作系统/网络堆栈检查特定类型(例如 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 数据包。同样,如果您想安装一个新流程,您需要发送一个 TCP 数据包,端口为 51067。 OSPF 则完全不同,它直接使用 IP 数据包,不使用端口号。要处理 OSPF 数据包,应用程序需要使用raw socket 来处理传入的协议号为 89 的 IP 数据包,并跳过所有其他数据包。另请参阅原始联机帮助页 here。这将已内置到您的 OF 开关中。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2022-06-14
    相关资源
    最近更新 更多