2017-09-09 28 views
1

なぜ循環トポロジーを扱うことができないのですか?次のコードは正常に動作します。しかし、#net.addLink(s3, s1)のコメントを外すと、net.pingAll()テストで100%のCPU使用率と100%の低下が得られます。Mininet循環トポロジ

from mininet.net import Mininet 
from mininet.node import OVSController 
from mininet.log import setLogLevel, info 

def test(): 
    net = Mininet(controller = OVSController) 
    net.addController('c0') 

    s1 = net.addSwitch('s1') 
    s2 = net.addSwitch('s2') 
    s3 = net.addSwitch('s3') 

    net.addLink(s1, s2) 
    net.addLink(s2, s3) 
    #net.addLink(s3, s1) 

    h1 = net.addHost('h1') 
    h2 = net.addHost('h2') 
    h3 = net.addHost('h3') 

    net.addLink(s1, h1) 
    net.addLink(s2, h2) 
    net.addLink(s3, h3) 

    net.start() 
    net.pingAll() 
    net.stop() 

if __name__ == '__main__': 
    setLogLevel('info') 
    test() 

答えて

2

循環型トポロジを使用している場合、パケットは宛先に到達せずにネットワーク内を循環し、最終的にネットワークに氾濫する可能性があります。これは、トポロジにサイクルが存在することをネットワークデバイスが認識していない場合に発生します。

パケットを送信するロジックは、トポロジにサイクルが存在し、これを認識してパケットを送信することを考慮する必要があります。例えば、コントローラは、パケットがその宛先に到着するように、スイッチの正しいルーティングルールを設定するために最短経路アルゴリズムを使用することができる。

独自のルーティングアルゴリズムを設定することも、スイッチにフォワーディングルールをインストールして、一致するパケットを特定の宛先に送信し、ネットワーク内を循環させることもできます。

+0

ありがとう、ダニエル。私はOVSがデフォルトでいくつかの最短経路アルゴリズムを使用すると考えました。これらの3つのオプションに関するドキュメント(最短パス、カスタムルーティングアルゴリズム、および転送ルールのインストール)について、回答を更新する可能性があります。 –