为了让SDN switch工作,必须至少有一个SDN controller与它建立OpenFlow Connection。但是也可以多个controller与一个SDN switch建立连接;一个controller与一个switch之间也可以建立多个OpenFlow Connection。
Multiple Controller:
与switch建立连接的controller可以master, equal或者slaver三种状态之一,并且最多只能有一个处于master状态。除此唯一性之外,master controller与equal controller在功能上没有区别,equal controller的个数不受限制。当一个controller通过命令转换成master之后,原来的master不会得到任何通知地转入slaver状态。
master controller与equal controller都对switch具有完全权限,而slaver controller只能读取switch的状态,它不能修改switch的状态与配置,也不能给switch发送packet-out数据包。
三种状态的controller都通过asynchronous configuration message配置switch的asynchronous message上报设置。
controller使用generation_id对master/slaver状态转换进行同步。generation_id是一个64位不停增长的序列号,当switch接收到比较老的序列号时要丢弃,并向controller报告错误信息。
Auxiliary connection:
main connection建立之后,switch可以再建立到controller的auxiliary connection。main connection断开时,所有关联的auxiliary connection都要断开。auxiliary connection可以使用任何可用的协议,而不仅仅只限于TCP/TLS。
controller与switch之间的连接由datapath ID与auxiliary ID标识,main connection的auxiliary ID为0,auxiliary connection的auxiliary ID非0。
各个connection单独同步,barrier message只作用于一个connection。
使用main connection与auxiliary connection原则上的建议:
1,controller message:
非packet-out message在main connection上发送;
由于packet-in导致的packet-out最好通过原来的packet-in message使用的connection发送;
属于同一个flow的packet-out message在同一个connection发送;
废话一句:auxiliary connection不可用时,使用main connection
2, switch-to-controller message
非packet-in message最好在main connection发送;
同属于一个flow的packet-in message在同一个connection发送
不可靠传输协议上的auxiliary connection的使用具有额外的限制:只有hello, error, echo, feature, packe-in, packet-out消息才可以上面发送。
阅读(1574) | 评论(0) | 转发(0) |