二层交换
有很多LAN,如何将它们连接起来?
可用网桥(bridges)将它们连接起来,如下,中间的就是网桥
- 网桥工作在DLL层,通过检查MAC地址做出转发帧的决策
- 网桥可以将不同类型的两个LAN连接起来,例如802.11无限→802.3无限网络
会遇到的问题:
- 不同的帧格式 → 重新封装
- 不同的数据传输速率 → Buffering
- 不同的802LAN有不同的最大帧长度(如802.3为1526 字节,802.11为2346字节)
- 安全: 802.11和802.16支持数据链路层的加密,但802.3不支持
- 服务质量:802.11和802.16提供了服务质量,但802.3没有
网桥工作原理
透明的网桥:
- 通过透明网桥(transparent bridges)将多个LAN连接起来,硬件和软件不需要做任何的变化
- 透明网桥工作在混杂模式(promiscuous mode),它接收所有跟它相联的LAN的帧
- 当一个帧到达网桥时,它必须作出丢弃(discard)还是转发(forward)的决策,如果是转发,它还要知道向哪个LAN转发
- 决策是通过在网桥内部的一张地址表(hash table)中查找目的MAC地址而作出的
网桥如何维护它的内部转发表?
初始时,这张表是空的
- 扩散算法(泛洪算法,flooding algorithm):当网桥不知道目的地址时(表中查不到),它会将这帧从除来的LAN外的所有LAN转发出去(广播)
- 逆向学习(backward learning):网桥从到达帧的源地址认识到源地址对应的那台机是在帧来的那个LAN上,把它写入MAC地址表
但是拓扑是变化的,网桥怎样适应这种变化?
- 无论何时,凡往表中加入记录,也必须同时打下时戳
- 到达帧的源地址在表中已有记录,将时戳更新为当前时间
- 网桥周期性地扫描表,将那些超时的记录从表中删除
当一帧到达时,网桥启动如下算法:
- 如果源LAN和目的LAN相同,则丢弃该帧
- 如果源LAN和目的LAN不同,则转发该帧
- 如果目的LAN未知,则广播该帧
- 每当一帧到达,上述算法都将执行一遍
网桥工作详细过程
如图:A要将信息发送给H,步骤如下:
- B1从b11接受到了帧,因为B1刚刚开始工作,无法查到该帧目的地的MAC地址,所以只好将该帧扩散出去
- B1还要逆向学习,它从帧提取出源地址为A,该帧从b11窗口到达,所以B1会将A和b11写入地址表里
- 紧接着B2接受到了帧,它一样会扩散信息,并且逆向学习
- H收到了帧,其它地址收到了由于不是自己的帧直接丢弃
紧接着H回传消息给A,步骤如下:
- B2从b24接收到了帧,因为已经记录了A的地址,所以B2会直接将帧进行定向转发(而不再广播)
- 同时B2还要逆向学习,记录H对应b24窗口
- B1同理