openvswitch与控制器OpenDayLight的交互(2)

1. 1c+2s+4h

拓扑图:

 s1和s2的流表:该流表与上一次实验的流表相同。

 两个交换机没有连接,h1无法ping通h3.

2. 1c+2s+4h

拓扑图:

 

s1的流表:

 

 s2的流表:

 对比发现,流表中有一项与其他的流表项不同,抓包发现,控制器添加流表时,对s1的in_port=2,output中有到controller的action;对s2的in_port=3,output着中没有到controller的action。不知道这里是为什么。

h1(10.0.0.1) ping h3(10.0.0.3):

h1 ping 通h3后,ODL web显示的拓扑:

抓到的包:

h1的路由表:

 (1)h1 ping h3时,发现h3和自己在同一个局域网(h1和h3的子网掩码均未255.0.0.0),所以h1发送arp请求包,这个包到达交换机s1后,s1根据流表项,将这个包转发到另外两个端口,并发送packet_in包给控制器(packet_in包的data段里,表明有一个arp请求包,源地址为h1的MAC地址,目的地址为MAC广播地址);

 (2)h3 收到arp请求后,返回arp回复包,h3的交换机收到这个arp回复包后,转发到另外端口,并发送packet_in包给控制器(packet_in包的data段里,表明有一个arp回复包,源地址为h3的MAC地址,目的地址为h1的MAC地址);

 (3)h1收到arp回复包后,将ICMP包发送出去,交换机s1收到后,转发给了交换机s2,并发送packet_in包给控制器(packet_in包的data段表明这是一个由h1发往h3的ICMP包),不确定交换机s1有没有将这个ICMP包转发到h2;

 (4)h3收到ICMP包后,回复一个ICMP包,交换机s2收到后,转发给s1,并发送packet_in包给控制器(packet_in包的data段表明这是一个由h3发往h1的ICMP包),不确定交换机s2有没有将这个包转发给h4。

注:1. 交换机s1收到h1发来的包时,会给控制器发送packet_in消息,但是收到来自交换机s2的包,不会给控制器发送pcket_in消息,交换机如何判断包来自与自己直连的主机,还是其他的交换机?

  2. 交换机s1有4个网卡,没有弄清楚与每个主机连接的网卡的名字。

  2. h1 ping 通h3后,交换机s1和交换机s2的流表都没有变化。

  3. h1 ping h3后,控制器能发现h1 和 h3的存在;h1 ping h2后,控制器能发现h2的存在,所以控制器应该是通过packet_in消息来识别主机。

3. 1c+3s+3h

拓扑图:

 s1, s2, s3初始流表:

 h1 ping h3:

ping通后,交换机s1, s2, s3的流表没有变化;抓包发现,仍然是ARP包,4个packet_in包和ICMP包。

对上面的问题的回答:1. 有一条流表项与其他的不同,流表项的actions中没有output到controller,说明in_port连接的是交换机;控制器通过OFPT_MULTIPART_REQUEST消息获得交换机的端口状态,但是如何判断哪个端口连接的是其他的交换机呢?应该是通过LLDP来判断,但是LLDP如何工作?

  2. 交换机似乎不以IP地址作为匹配项,也没有添加目的IP的流表项;通过泛洪ARP请求包找到目的主机,通过判断包进入交换机的端口,然后将包转发到其他所有端口;每一次都转发到所有端口的话,效率不高,类似集线器。

原文地址:https://www.cnblogs.com/LiuQiujie/p/12557780.html