数据链路层

数据链路层只作用于一段电路上,不能跨网段。

这里主要讨论局域网的第二层。

第一层和第二层的区别

相比于第一层的物理层,第二层可以针对帧对数据进行校验和控制。

  1. 第一层无法和上层进行沟通,无法知道帧的类型;第二层可以通过LLC识别上层的包文类型。
  2. 第一层无法确定发送和接受的主机,无法对传输进行控制,而第二层可以做媒体访问控制。
  3. 第二层可以识别源地址和目的地址。
  4. 第二层可以识别数据并对数据进行校验。

局域网的数据链路层

第二层可以给第三层提供三种类型的服务策略:

  1. 不对数据的发送进行互相确认,有需求直接发送。通常在很可靠的局域网中使用这种策略。
  2. 不事先确认和建立连接关系,但是对数据的发送做确认。无线局域网一般使用这种策略。
  3. 面向连接,每次连接前都要进行确认。发送数据前进行请求和询问。

2和3策略发送数据的效率相比1都是有所下降的。因此无线局域网的实际最大数据传输率大概只有理论带宽的一半。

局域网有几种媒体访问控制标准:

  • Ethernet 以太网,采用总线型拓扑方式,是现在主流的有线局域网方案。
  • Token Ring 令牌环网,采用环形拓扑。
  • FDDI 以光纤为传输介质,也是环状。上世纪80年代使用,现在基本淘汰。

局域网的通讯方式分为三大类:

  1. 单播:一对一的信息发送。
  2. 组播:其他在进行同一进程的主机都能收到数据。
  3. 广播:发送给局域网内所有其他设备。比如声明身份和请求信息的时候会使用。

以太网 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

在无基站的情况下使用。但和有线的情况不同,因为发信后无法进行全局侦听,就可能出现以下问题:

  1. Hidden Station Problem A和B在通信,C不知道A的存在给B发信造成冲突
  2. Exposed Station Problem B给A发信,C侦听到B在发信后停止给D发信

WLAN和Ethernet多路复用的区别在于:

  1. 无法全局侦听
  2. WLAN只能将信号发给相邻节点
  3. 每次只能有一个发信方给接收方发信
  4. 不是发信方而是接收方侦听

所以,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),可以作为网关,作为不同局域网的分隔点。