画龙点睛: 控制平面一些交互的行为


客户端上报数据通常是指网络设备(如交换机和路由器)向控制器发送各种状态信息和事件。这些信息和事件可以包括流量统计、端口状态、链路状态等。具体的上报机制取决于所使用的 SDN 协议和控制器实现。以下是一些常见的上报机制和方法:

1.1 Packet-In 消息
当交换机收到一个它不知道如何处理的数据包时,会将该数据包封装成 Packet-In 消息发送给控制器。控制器可以根据这个消息做出相应的决策,比如安装新的流表项或进行数据包转发。

// 示例:处理 Packet-In 消息
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def _packet_in_handler(self, ev):
    msg = ev.msg
    datapath = msg.datapath
    ofproto = datapath.ofproto
    parser = datapath.ofproto_parser

    # 处理数据包
    ...

1.2 Port Status 消息
当交换机的端口状态发生变化时(例如端口上线或下线),会发送 Port Status 消息给控制器。

// 示例:处理 Port Status 消息
@set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)
def _port_status_handler(self, ev):
    msg = ev.msg
    reason = msg.reason
    port_no = msg.desc.port_no

    if reason == ofproto_v1_3.OFPPR_ADD:
        self.logger.info("Port %s added", port_no)
    elif reason == ofproto_v1_3.OFPPR_DELETE:
        self.logger.info("Port %s deleted", port_no)
    elif reason == ofproto_v1_3.OFPPR_MODIFY:
        self.logger.info("Port %s modified", port_no)

1.3 Flow Removed 消息
当流表项被删除时,交换机会发送 Flow Removed 消息给控制器,告知其流表项的删除情况。这通常发生在流表项过期或被显式删除时。

// 示例:处理 Flow Removed 消息
@set_ev_cls(ofp_event.EventOFPFlowRemoved, MAIN_DISPATCHER)
def _flow_removed_handler(self, ev):
    msg = ev.msg
    match = msg.match
    self.logger.info("Flow removed: %s", match)

YANG(Yet Another Next Generation)是一种用于定义和描述网络设备配置和状态数据的数据建模语言。它被广泛用于网络管理协议如 NETCONF(Network Configuration Protocol)中,以提供一种标准化的方法来表示和管理网络设备的配置和操作数据。


设备(交换机)可以自行删除流表项。以下是一些常见的情况和机制:

  1. 流表项过期
    流表项可以设置 idle_timeout 和 hard_timeout,当这些超时时间到达时,交换机会自动删除流表项。
    Idle Timeout:如果流表项在指定时间内没有匹配到任何数据包,则该流表项会被删除。
    Hard Timeout:无论流表项是否匹配到数据包,到了指定时间后,流表项都会被删除。
  2. 控制器显式删除
    控制器可以通过发送 FlowMod 消息来显式删除流表项。控制器可以指定要删除的流表项的匹配条件和优先级等。
  3. 资源限制
    交换机可能会因为资源限制(如流表项数量达到上限)而删除一些流表项,以腾出空间给新的流表项。
  4. 手动管理
    网络管理员可以通过管理接口(如 CLI、SNMP、NETCONF 等)手动删除流表项。

一些常见的交互行为

  1. 流表管理
    流表项的添加:控制器向交换机发送 FlowMod 消息以添加新的流表项。
    流表项的修改:控制器可以通过 FlowMod 消息修改现有的流表项。
    流表项的删除:如前所述,控制器可以显式删除流表项,交换机也可以因超时或资源限制自行删除流表项。
  2. 统计信息收集
    端口统计:交换机可以定期或按需向控制器发送端口统计信息,如流量、错误包等。
    流表统计:交换机可以向控制器发送流表项的匹配计数、字节数等统计信息。
    队列统计:交换机可以报告队列的使用情况和性能指标。
  3. 拓扑发现
    LLDP(链路层发现协议):交换机可以发送 LLDP 数据包,控制器通过收集这些数据包来发现网络拓扑。
    端口状态更新:当交换机的端口状态发生变化(如端口上线或下线)时,会向控制器发送 Port Status 消息。
  4. 事件通知
    Packet-In 消息:如前所述,当交换机收到未知数据包或需要控制器决策时,会发送 Packet-In 消息。
    Error 消息:当交换机遇到错误(如流表项安装失败)时,会发送 Error 消息给控制器。
  5. 配置管理
    配置下发:控制器可以通过 SetConfig 消息向交换机下发配置,如流表项的最大数量、缓冲区大小等。
    配置查询:控制器可以通过 GetConfig 消息查询交换机的当前配置。
  6. 组管理
    组表项的添加、修改和删除:控制器可以管理交换机的组表,用于实现复杂的转发行为,如多播和负载均衡。
  7. 多路径路由
    路径计算和安装:控制器可以根据网络拓扑和策略计算最优路径,并通过流表项将路径安装到交换机上。
    路径故障处理:当路径中某个链路或节点故障时,控制器可以重新计算路径并更新流表项。
  8. 安全和访问控制
    ACL(访问控制列表)管理:控制器可以下发 ACL 规则到交换机,用于控制流量的转发和过滤。
    认证和授权:控制器可以对交换机进行认证,并根据策略授予不同的访问权限。
  9. 网络虚拟化
    虚拟网络实例管理:控制器可以管理虚拟网络实例(如 VLAN、VXLAN),并将相关配置下发到交换机。
    隧道管理:控制器可以配置和管理隧道(如 GRE、IPsec),用于实现跨域通信。


putao
8 声望1 粉丝

推动世界向前发展,改善民生。


引用和评论

0 条评论