画龙点睛: 控制平面一些交互的行为
客户端上报数据通常是指网络设备(如交换机和路由器)向控制器发送各种状态信息和事件。这些信息和事件可以包括流量统计、端口状态、链路状态等。具体的上报机制取决于所使用的 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)中,以提供一种标准化的方法来表示和管理网络设备的配置和操作数据。
设备(交换机)可以自行删除流表项。以下是一些常见的情况和机制:
- 流表项过期
流表项可以设置 idle_timeout 和 hard_timeout,当这些超时时间到达时,交换机会自动删除流表项。
Idle Timeout:如果流表项在指定时间内没有匹配到任何数据包,则该流表项会被删除。
Hard Timeout:无论流表项是否匹配到数据包,到了指定时间后,流表项都会被删除。 - 控制器显式删除
控制器可以通过发送 FlowMod 消息来显式删除流表项。控制器可以指定要删除的流表项的匹配条件和优先级等。 - 资源限制
交换机可能会因为资源限制(如流表项数量达到上限)而删除一些流表项,以腾出空间给新的流表项。 - 手动管理
网络管理员可以通过管理接口(如 CLI、SNMP、NETCONF 等)手动删除流表项。
一些常见的交互行为:
- 流表管理
流表项的添加:控制器向交换机发送 FlowMod 消息以添加新的流表项。
流表项的修改:控制器可以通过 FlowMod 消息修改现有的流表项。
流表项的删除:如前所述,控制器可以显式删除流表项,交换机也可以因超时或资源限制自行删除流表项。 - 统计信息收集
端口统计:交换机可以定期或按需向控制器发送端口统计信息,如流量、错误包等。
流表统计:交换机可以向控制器发送流表项的匹配计数、字节数等统计信息。
队列统计:交换机可以报告队列的使用情况和性能指标。 - 拓扑发现
LLDP(链路层发现协议):交换机可以发送 LLDP 数据包,控制器通过收集这些数据包来发现网络拓扑。
端口状态更新:当交换机的端口状态发生变化(如端口上线或下线)时,会向控制器发送 Port Status 消息。 - 事件通知
Packet-In 消息:如前所述,当交换机收到未知数据包或需要控制器决策时,会发送 Packet-In 消息。
Error 消息:当交换机遇到错误(如流表项安装失败)时,会发送 Error 消息给控制器。 - 配置管理
配置下发:控制器可以通过 SetConfig 消息向交换机下发配置,如流表项的最大数量、缓冲区大小等。
配置查询:控制器可以通过 GetConfig 消息查询交换机的当前配置。 - 组管理
组表项的添加、修改和删除:控制器可以管理交换机的组表,用于实现复杂的转发行为,如多播和负载均衡。 - 多路径路由
路径计算和安装:控制器可以根据网络拓扑和策略计算最优路径,并通过流表项将路径安装到交换机上。
路径故障处理:当路径中某个链路或节点故障时,控制器可以重新计算路径并更新流表项。 - 安全和访问控制
ACL(访问控制列表)管理:控制器可以下发 ACL 规则到交换机,用于控制流量的转发和过滤。
认证和授权:控制器可以对交换机进行认证,并根据策略授予不同的访问权限。 - 网络虚拟化
虚拟网络实例管理:控制器可以管理虚拟网络实例(如 VLAN、VXLAN),并将相关配置下发到交换机。
隧道管理:控制器可以配置和管理隧道(如 GRE、IPsec),用于实现跨域通信。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。