网桥自学习算法(python实现)

一.网桥链接主机,主机通过网桥来传送数据包

网桥一般有两个接口,左接口1和右接口2

二.网桥的工作情况

2.如图在一个网桥连接的两个网段时,有四种传输数据包情况:【1】网段A内部主机互相传输数据包 【2】网段A中的主机向网段B中的主机传送数据包 【3】网段B内部主机互相传输数据包 【4】

网段A中的主机向网段B中的主机传送数据包

3.依次分析不同情况下接口使用情况:【1】A内部传-发送主机通过网桥的接口1 【2】A传B-发送主机通过网桥的接口1 【3】B内部传-发送主机通过网桥的接口2 【4】B传A-发送主机通过网桥的接口2

4.网桥自学习建立的站表如图,站表共包含两部分,记录发送主机和发送数据包经过的接口

站点接口
A11
A21

三.网桥的工作原理

当一台主机在某网段中发送数据包后,该网段的网桥会缓存该数据包,并查询自己的站表--【1】若站表中的站点有发送主机,则找到其转发接口将数据包通过该接口发送出去--【2】若站表中无该发送主机,则在站表中添加该发送主机为新的站点,并根据目的主机的地址选择为该数据包选择转发接口

四.python代码实现:两个网桥链接三个网段

def trans(t1,t2,l1,l2,l3):
    p1,d1=eval(input("请输入源地址和目的地址:"))
    print("转发序列为:%c->%c"%(p1,d1))
    list1=t1.keys()
    list2=t2.keys()
    if (p1 in l1):
        for x in list1:
            if x == d1:
                print("查表知,该序列B1网桥转发接口为%d" % t1[d1])
                print("查表知,该序列B2网桥转发接口为%d" % t2[d1])
        if p1 not in list1:
           t1[p1] = 1
           t2[p1] = 1

    if (p1 in l2)and(d1 in l2):
        for x in list2:
            if x == d1:
                print("查表知,该序列B1网桥转发接口为%d" % t1[d1])
                print("查表知,该序列B2网桥转发接口为%d" % t2[d1])
        if p1 not in list2:
            t1[p1] = 2
            t2[p1] = 1
    if (p1 in l2)and(d1 in l3):
        for x in list2:
            if x == d1:
                print("查表知,该序列B1网桥转发接口为%d" % t1[d1])
                print("查表知,该序列B2网桥转发接口为%d" % t2[d1])
        if p1 not in list2:
            t1[p1] = 2
            t2[p1] = 1

    if (p1 in l2) and (d1 in l1):
        for x in list1:
            if x == d1:
                print("查表知,该序列B1网桥转发接口为%d" % t1[d1])
                print("查表知,该序列B2网桥转发接口为%d" % t2[d1])
        if p1 not in list1:
            t1[p1] = 2
            t2[p1] = 1

    if (p1 in l3):
        for x in list2:
            if x == d1:
                print("查表知,该序列B1网桥转发接口为%d" % t1[d1])
                print("查表知,该序列B2网桥转发接口为%d" % t2[d1])
        if p1 not in list2:
                t1[p1] = 2
                t2[p1] = 2



if __name__=="__main__":
    t1=dict()
    t2=dict()
    l1=["A","B"]
    l2=["C","D"]
    l3=["E","F"]

    a=eval(input("转发序列数:"))
    for x in range(0,a):
        trans(t1,t2,l1,l2,l3)
    k1=list(t1.keys())
    n1=list(t1.values())
    k2=list(t2.keys())
    n2=list(t2.values())
    print("网桥为:")
    print("--A-B---{B1}---C-D---{B2}---E-F")
    print("----B1站表----")
    print("--地址   接口--")
    for x in range(0,len(k1)):
        print("  %c    %d    " % (k1[x],n1[x]))
    print("----B2站表----")
    print("--地址   接口--")
    for x in range(0, len(k2)):
        print("  %c    %d    " % (k2[x], n2[x]))

运行结果

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值