RIP协议的python模拟

这篇博客介绍了一个简单的网络类和节点类,用于模拟网络中的节点和边,并实现Dijkstra算法进行路由表的更新。网络类包含添加节点、添加边、获取节点和更新整个网络的功能。节点类维护了自身的路由表,并能根据邻居节点更新自己的路由信息。在给定的示例中,创建了一个包含10个节点的网络,并连接成链状结构,然后通过多次更新,展示了路由表的动态变化过程。
部署运行你感兴趣的模型镜像
class Network:
    def __init__(self, ):
        self.nodes = {}
    
    def add_node(self, key):
        if key not in self.nodes:
            self.nodes[key] = Node(key, self)
        else:
            pass
    
    def add_edge(self, a, b):
        self.nodes[a].add_neighbor(b)
        self.nodes[b].add_neighbor(a)
    
    def get(self, key):
        if key in self.nodes:
            return self.nodes[key]
        else:
            return None
    
    def update(self):
        if_update = 0
        for k in self.nodes:
            if_update += self.nodes[k].update()
        return if_update != 0


class Node:
    def __init__(self, key, network):
        self.network = network
        self.key = key
        self.routing_table = {key:(0, key)} # {key: (distance, next_node_key)}
 
    def _update(self, key):
        if_update = False
        node = self.network.get(key)
        for k, v in node.routing_table.items():
            if k not in self.routing_table:
                self.routing_table[k] = (v[0]+1, node.key)
                if_update = True
            else:
                if self.routing_table[k][0] > v[0]+1:
                    self.routing_table[k] = (v[0]+1, node.key)
                    if_update = True
        return if_update


    def update(self):
        neighbors = [k for k, v in self.routing_table.items() if v[0] == 1]
        if_update = 0
        for k in neighbors:
            if_update += self._update(k)
        return if_update != 0

    def add_neighbor(self, key):
        self.routing_table[key] = (1, key)

    def query(self, name):
        pass

net = Network()
for i in range(10):
    net.add_node(i)

for j in range(9):
    net.add_edge(j, j+1)

max_iter = 10
while net.update() and max_iter > 0:
    for k in net.nodes:
        print(k,net.get(k).routing_table)
    max_iter -= 1

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颹蕭蕭

白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值