数据链路层
数据链路层只作用于一段电路上,不能跨网段。
这里主要讨论局域网的第二层。
第一层和第二层的区别
相比于第一层的物理层,第二层可以针对帧对数据进行校验和控制。
- 第一层无法和上层进行沟通,无法知道帧的类型;第二层可以通过LLC识别上层的包文类型。
- 第一层无法确定发送和接受的主机,无法对传输进行控制,而第二层可以做媒体访问控制。
- 第二层可以识别源地址和目的地址。
- 第二层可以识别数据并对数据进行校验。
局域网的数据链路层
第二层可以给第三层提供三种类型的服务策略:
- 不对数据的发送进行互相确认,有需求直接发送。通常在很可靠的局域网中使用这种策略。
- 不事先确认和建立连接关系,但是对数据的发送做确认。无线局域网一般使用这种策略。
- 面向连接,每次连接前都要进行确认。发送数据前进行请求和询问。
2和3策略发送数据的效率相比1都是有所下降的。因此无线局域网的实际最大数据传输率大概只有理论带宽的一半。
局域网有几种媒体访问控制标准:
- Ethernet 以太网,采用总线型拓扑方式,是现在主流的有线局域网方案。
- Token Ring 令牌环网,采用环形拓扑。
- FDDI 以光纤为传输介质,也是环状。上世纪80年代使用,现在基本淘汰。
局域网的通讯方式分为三大类:
- 单播:一对一的信息发送。
- 组播:其他在进行同一进程的主机都能收到数据。
- 广播:发送给局域网内所有其他设备。比如声明身份和请求信息的时候会使用。
以太网 Ethernet
历史:上世纪70年代出现,80年代第一次规范,后来又出现更改。现在使用的是第二版规范。
子层
早期IEEE将以太网分为两个子层:MAC和LLC。MAC子层负责控制实际的媒体信号传输,而这对LLC层是透明的。MAC子层采用物理地址识别,而LLC子层采用逻辑地址识别。
LLC负责连接上层的网络层,然后交给MAC层,MAC层负责调用物理层发送信号。
但是到现在以太网普及之后,LLC基本已经弃之不用。因此这里之后也不讨论LLC。LLC自己会对上层来的数据包先进行一次封装,添加两个补充信息,DSAP和SSAP,之后再交给MAC层进行进一步封装。下面讨论的帧结构是MAC层的封装方案。
帧结构
前导码 | 目的地址 | 源地址 | 数据长度 | 数据 | FCS |
---|---|---|---|---|---|
8(bytes) | 6 | 6 | 2 | 可变 | 4 |
固定是10101010*7加上10101011*1作用是给接收方留出准备的时间。 | 目的地址可能是单播地址,组播地址和广播地址。单播地址的时候是MAC地址,另外两种都是逻辑地址。 | 一个MAC地址。 | 早期 时这个位置用来放后面数据的长度,但是后来改成记录包文的协议。 | 46~1500字节的数据 | 循环冗余校验位 |
MAC地址
48位,烧在网卡的芯片上,不可更改。
前面的24位称为OUI,是IEEE分配给生产厂商的编号。厂商根据自己的需要向IEEE购买OUI编号。OUI的第一位:0表示单播地址,1表示多播地址。OUI的第二位:0表示全球唯一,1表示本地唯一。现在常见的MAC地址都是00开头的。
对于目标地址,单播对应一个MAC地址,组播广播都对应逻辑地址。广播的逻辑地址固定是0xFFFF.FFFF.FFFF。
在总线型的拓扑结构中,一个设备发出信号,所有总线上的设备都能收到信号,然后设备对收到的信号进行识别目的地址,如果和本地地址对应就收下帧,否则丢弃。
CSMA/CD
是现在使用的总线型以太网中避免发信冲突的策略。
每个设备使用电路之前都会先对电路进行侦听,如果总线是空闲的就发信。但也有可能两个设备侦听时都空闲,但是同时发信造成冲突。因此,设备在发信后还会保持对总线的侦听,如果发现信号冲突,就会在总线上发送jam signal信号,表示总线冲突,提醒其他正要发信的设备。之后,冲突的设备会采用一种随机事件回退算法,随机生成一个等待时间,并在等待后重新侦听发信。这样大概率能保证回退后不出冲突。
但是尝试发信的次数也不能超过16次,不然也会报错。
无线局域网
分为有基础设施(有覆盖一定区域的基站)和无基础设施(ad-hoc)的传输两种。
Infrastructure Mode 有基础设施的无线网络结构
一个基站就是一个无线接入点AP(Access Point),有一个自己的SSID身份识别码。连接在基站上的设备和基站整体构成BSS(Basic Service Set)。很多基站之间通过有线网连接,构成ESS。
一个终端想加入BSS服务集,则先要获得AP接入点的接受。而识别方法分为两种:
- Active,想要连接的设备主动发送请求,连接AP。
- Positive,AP向外周期性发送信标帧,其中包含自己的SSID。
WLAN的帧结构
WLAN的帧分为三种:控制帧,管理帧和数据帧。无线帧的最大理论上为2346字节,但是有线的最大为1518字节。
数据帧结构:
帧控制 | 持续期 | 地址1 | 地址2 | 地址3 | 序号控制 | 地址4 | 帧主题 | FCS |
---|---|---|---|---|---|---|---|---|
2B | 2 | 6 | 6 | 6 | 2 | 6 | 可变 | 4 |
地址1,2,3是在有基站的时候使用的,而地址4是在无基站的时候使用。
其实帧控制字节中有两个比较关键的位:去往AP和来自AP。
情况 | 去往AP | 来自AP | 地址1 | 地址2 | 地址3 | 地址4 |
---|---|---|---|---|---|---|
从基站到设备 | 0 | 1 | 目的地址 | AP地址 | 源地址 | — |
从设备到基站 | 1 | 0 | AP地址 | 源地址 | 目的地址 | — |
CSMA/CA
在无基站的情况下使用。但和有线的情况不同,因为发信后无法进行全局侦听,就可能出现以下问题:
- Hidden Station Problem A和B在通信,C不知道A的存在给B发信造成冲突
- Exposed Station Problem B给A发信,C侦听到B在发信后停止给D发信
WLAN和Ethernet多路复用的区别在于:
- 无法全局侦听
- WLAN只能将信号发给相邻节点
- 每次只能有一个发信方给接收方发信
- 不是发信方而是接收方侦听
所以,CSMA/CA解决冲突的方法是:发送站点在发信前,要先发送一个控制帧刺激接受站,然后接受站点发送一个应答短帧,使周围的站点监听到这个帧,避免数据发送产生冲突。
但还会有一种情况,就是不在发信设备范围内的其他设备同时发送RTS(请求控制帧),所以这个时候还要采取特殊的回退算法。
在有众多的终端节点都想发送数据并且信道空闲时:先经过一个DIFS的时长,然后,每一个节点都产生一个随机的争用窗口(计时器),进行倒计时,当先结束计时结束的节点进行数据的发送,其他节点冻结争用窗口,停止计时,并且记住剩余的时间,当该节点的数据发送完成,在经过一个DIFS的时间,其他节点的争用窗口重新启动并且开始计时,依次下去,直到所有的节点发送完毕。若节点在争用窗口计时结束后发送数据与其他节点发生冲突,则发生冲突的节点都随机产生一个争用窗口,继续进行倒计时。(引用自https://www.bilibili.com/read/cv465700)
无线随距离信号减弱造成远距离传输时带宽下降。
第二层设备
网卡 NIC
有LLC能力与上层沟通,以及第一层的功能。
网桥 Bridge
基于MAC地址做红绿灯作用。
软件控制,初始化时学习生成MAC Table。MAC Table 有生命期,一定时间内没有信号的地址将会被删除。
如果帧的目的地址不再MAC Table中就会广播到左右设备。
交换机 Switch
和网桥一样做帧转发工作。由于是基于硬件的设备,所以速度比网桥快。
在检查校对的时候通常只检查前64字节(cut-through)
相比于路由器,不能隔离广播域。路由器可以隔离广播域,会识别包文中的逻辑地址(IP),可以作为网关,作为不同局域网的分隔点。