一.网桥链接主机,主机通过网桥来传送数据包
网桥一般有两个接口,左接口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.网桥自学习建立的站表如图,站表共包含两部分,记录发送主机和发送数据包经过的接口
站点 | 接口 |
A1 | 1 |
A2 | 1 |
三.网桥的工作原理
当一台主机在某网段中发送数据包后,该网段的网桥会先缓存该数据包,并查询自己的站表--【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]))
运行结果