OpenFlow在什么情况下会把报文转发给controller做决定呢?

Under what circumstances does OpenFlow forward packets to the controller for decision?

我刚读完 OpenFlow 规范的第 1-6.2 节here

第 6.1.2 节说:

Packet-in events can be configured to buffer packets. For packet-in generated by an output action in a flow entries or group bucket, it can be specified individually in the output action itself (see 7.2.6.1), for other packet-in it can be configured in the switch configuration (see 7.3.2). If the packet-in event is configured to buffer packets and the switch has sufficient memory to buffer them, the packet-in event contains only some fraction of the packet header and a buffer ID to be used by a controller when it is ready for the switch to forward the packet. Switches that do not support internal buffering, are configured to not buffer packets for the packet-in event, or have run out of internal buffering, must send the full packet to controllers as part of the event. Buffered packets will usually be processed via a Packet-out or Flow-mod message from a controller, or automatically expired after some time

这听起来好像对于每个到达 OpenFlow 交换机的数据包,都必须将异步消息发送到控制器以做出转发决定。然而,第 5 章听起来像是交换机有一组 OpenFlow 流,最后生成一个动作集,该动作集确定应该如何处理数据包,并且只有在有流时才将数据包转发给控制器 table小姐

在什么情况下将数据包发送到控制器进行决策?总是吗?还是只是偶然的?

只要输出端口设置为控制器,数据包就会被发送到 OpenFlow 控制器。

PACKET_IN 当流在交换机上不匹配时发生事件,然后发送到控制器。否则不会创建事件 - 交换机只是根据流规则转发数据包,而控制器 none 更明智。