1 数据链路层
点对点信道:一对一的点对点通信方式
广播信道:一对多的广播通信方式
1.1 点对点的数据链路层
1.1.1 数据链路与帧
链路:一个结点到相邻结点的的一段物理线路
数据链路:把实现必要通信协议(控制数据传输)的软硬件加到链路上(链路+通信协议)
数据链路层的任务:
- 把网络层交下来的数据构成帧发到链路上
- 把接收到的帧拆开,并把数据上交给网络层
帧就是网络层中给的IP数据报前后分别加上首部与尾部(开始与结束符号),然后进行发送,接收结点若收到的帧无差错就上交给自己的网络层,有问题会丢弃这个帧。
1.1.2 三个基本问题
封装成帧,透明传输,差错检测。
1.封装成帧
- 在IP数据报前后加上首部与尾部,首部与尾部是两个控制字符,SOH与EOT,是两个不可打印的数据编码。
- 一般来说为了效率,数据长度应该尽可能大于首尾部的长度。
- 在接收端,如果接收的数据首尾部存在差错,说明传输错误,丢弃帧。
2.透明传输
透明:某个事物看起来像是不存在的(此处表示无论什么组合的数据都能通过数据链路层)
问题:若传输数据是文本数据(键盘输入),则不会出现SOH与EOT这样的不可打印字符;但传输数据为二进制数据这样的ASCII码文本文件,则内部可能出现与SOH与EOT字符一样的二进制串,这样会导致接收端错误的认识边界限定符,导致这样的数据无法数量链路层。
方案:为了解决这个问题,在数据段中(首尾部不转义)二进制与边限字符一样的段(数据段中与边限字符一样的地方),需要在前面加转义字符,数据段中与转义字符一样的字符前也要加转义字符。这样就能区分同样编码的边限字符到底是数据还是边限。数据链路在把数据给网络层的时候会除了去掉边限符也会去掉数据段中的转义字符。(加转义字符的方式被称为字节填充或字符填充)
3.差错检测
问题:数据传输时可能产生多种传输差错,其中的比特差错(传输的1或0变成了0或1)需要存在一种检验方法来查错。出错概率(错误比特数/总比特数)称为误码率,错误检验方法为循环冗余检验(CRC)(添加冗余位,前后进行同样的运算若得一样的答案认为是正确)
CRC原理:数据分组,每组传输k个比特(假设现在传输M=101001,即k=6),CRC运算会在数据后面加上n个冗余码(用于检查),构成一个k+n位的数据(M<<n + n个冗余码)发送出去(增大开销但保证了数据正确性)
n位冗余码得出算法:发送接收双方事先商量一个n+1位的除数用于检查。
n位数据码=(M * 2^n)%(n+1位的除数)。所以冗余码是M左移n位后除以一个n+1位的数所得余数。
所以接收方在接收到数据后,将接收到的数(M<<n + n个冗余码)除以约定的n+1位除数若余数为0则正确(补:二进制除法当前商为0为1只看最高位,并且使用异或)
但这并不能说数据链路层是可靠的,有差错检测只能说以非常接近1的概率认为不会产出差错,但可能是会产生传输差错的
- 帧丢失
- 帧重复
- 帧失序
1.2 点对点协议PPP
ppp协议是计算机与ISP进行通信时使用的数据链路层协议。
特点:
- 简单
- 封装成帧
- 透明性
- 多种网络层协议(一条物理链路上同时支持多种网络层协议)
- 多种类型链路
- 差错检测(丢弃出错的帧)
- 检测连接状态
- 最大传送单元
- 网络层地址协商
- 数据压缩协商
ppp协议的组成:
- 一个将IP数据报封装到串行链路的方法(既支持异步链路又支持同步链路)
- 链路控制协议LCP(建立,配置和测试数据链路连接)
- 网络控制协议NCP(支持不同的网络层协议)
字段涵义:
字段: | F | A | C | 协议 | 信息部分 | FCS | F |
---|---|---|---|---|---|---|---|
值: | 0x7E | 0xFF | 0x03 | 不定 | 不定 | 不定 | 0x7E |
长度(单位byte): | 1 | 1 | 1 | 2 | 不超过1500 | 2 | 1 |
作用: | 起始符 | 未定 | 表示地址,但点对点传输,地址不意义 | 不同的值标识信息部分的意义(IP数据报,LCP,NCP) | 信息 | CRC检查序列 | 结尾符 |
字节填充
转移字符使用0x7D
- 信息体中的0x7E会被转义
- ASCII码中的控制字符(数值小于0x20的字符)会被转义
零比特填充
因为0x7E的二进制为01111110,是连续的6个1,在传输时只要出现信息部分出现连续五个1,就在后面补个0,使得0x7E不可能出现(数据长度肯定是byte的整数倍),在接收时信息部分把连续五个1后面的0去掉即可。
ppp协议的工作状态
- 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
- PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
- 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
- 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
- 可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
1.3 广播信道的数据链路层
1.3.1 局域网
网络为一个单位所拥有,且地理范围和站点数目均有限
- 广播功能(从一个站点访问全网)
- 便于系统拓展和逐渐演变
- 提高系统可靠性,可用性,生存性
局域网可按网络拓扑进行分类(星形网,环形网,总线网)
信道划分方式
- 静态划分:多种复用技术,不会发生冲突但代价较高
- 动态媒体接入控制(多点接入),信道并非固定分配
- 随机接入:用户随机发送信息,但多个用户同时发送会发送碰撞,需要协议解决冲突
- 受控接入:受控制,不能随意发送信息
局域网的数据链路层被分为逻辑链路控制(LLC)子层和媒体接入控制(MAC),但后来LLC作用已经消失,现在的重点在于MAC,很多厂商也仅装MAC协议。
计算机与外界局域网的连接通过**通信适配器(网卡)**进行
1.3.2 CSMA/CD协议
以太网的服务是尽最大努力的交付(不可靠的交付),数据有问题直接丢弃,不考虑重传问题(重传是高层来决定的),而前面提到了使用随机接入,若多个用户同时发送数据,会产生碰撞导致传输失败,而解决方案就是使用CSMA/CD协议(载波监听多点接入/碰撞检测)
-
多点接入:总线型网络,以多点接入方式连接
-
载波监听:检测信道
- 发送前检测:为了获取控制权,确保其他站没有发送数据,信道是空闲的
- 发送中检测 :即碰撞检测
-
碰撞检测:边发送边监听,检查电压变化。
- 发送成功,电压维持稳定,一直未检测到碰撞,
- 发送失败,在数据发送后短时间内另一个站点也发送了(未发送到,另一个站点发送前检测不到),导致产生数据碰撞,此时电压变化幅度变大(电压叠加的原因)。一旦出现碰撞,立即停止发送,执行二进制指数退避算法。
设数据从发送到接收需要时长为τ,发生碰撞后立刻返回信号,那么最坏情况是碰撞发生在终点处,此时发送端需要2τ的时间才能发送产生了碰撞。发生碰撞这段时间称为争用期。
争用期:可见争用期的时间范围是0到2τ,也用比特时间来表示争用期时间,若具体争用期时间是51.2μs,对于10Mbit/s的以太网,可以发送512bit,即64字节,争用期就是512比特时间。
使用比特时间来确定帧的最短长度(过短(小于比特时间)的话发送端发送完成后,发送端就认为已经发送完成,但帧在到达之前碰撞了,发送端无法回收),所以帧的长度必须大于争用期的比特时间。列入上面的例子中帧最短也需要是64byte。
最大争用期时间为:传输距离/传输时间
二进制指数退避算法:
二进制指数退避算法,会让站点在等待一个时间后再次发送,这个时间的确定策略为:
在0到(2^k - 1)中随机选择一个整数r,k=Min(重传次数,10)。等待时间为r争用期=r2τ。
1.3.3 星形拓扑
利用一种可靠性非常高的设备—集线器,每个主机的适配器(网卡)通过两条双绞线与集线器相连,两条双绞线分别负责发送和接收。
10BASE-T标准(10表示传输速率为:10Mbit/s,BASE表示基带信号,T代表双绞线)
集线器特点:
- 集线器以太网在逻辑上还是总线网,使用的还是CSMA/CD协议,同一时刻仍然只允许一个站点发消息
- 集线器像是一个多接口的转发器
- 集线器工作在物理层,仅仅简单转发比特,不进行碰撞检测
- 使用专门的芯片进行自适应串音回波抵消
1.3.4 信道利用率
完整进行一次帧的发送时间为:发送时间(发送完成(T)+τ),有一个延时τ,以为发送完成以后,最后一个bit要走完整的信道长度。
而发送过程中可能出现多个争用期2τ,所以发送一次的时间为T+(2n+1)τ,而实际上有效时间为T,所以τ尽可能小时信道利用率也高。
以太网中定义了参数a=τ/T,a尽可能小时,信道利用率高,当a为0时,即τ等于0,碰撞发生的一瞬间就能被发现,所以要让a小,那么可以让连线长度变短,或者一次发送的帧长变长。
极限信道利用率S(信道一直被使用,不中断,且一直不发生碰撞)
S=T/(T+τ)=1/(1+a)
1.3.5 MAC层
MAC地址:又称为硬件地址,物理地址,是固化在适配器(网卡)的ROM的地址。
MAC地址是六字节,由注册机构管理前三个字节,后面的由购买的机构分配。
适配器从网络上每收到一个 MAC 帧就首先用硬件检查 MAC 帧中的 MAC 地址。
如果是发往本站的帧则收下,然后再进行其他的处理。
否则就将此帧丢弃,不再进行其他的处理。
“发往本站的帧”包括以下三种帧:
单播 (unicast) 帧(一对一):接收方MAC地址要与本身一致
广播 (broadcast) 帧(一对全体):MAC地址是全1,本局域网所有站点都要接收
多播 (multicast) 帧(一对多):发给部分站点,满足要求的站点接收
最常用的 MAC 帧是以太网 V2 的格式:
- 目的地址与源地址都是6字节,标识起点与终点设备的MAC地址,终点地址若为全1,表示是广播消息,发送给所有站点
- 类型字段用来标志上一层使用的是什么协议,以便把收到的 MAC 帧的数据上交给上一层的这个协议。
- 数据字段的正式名称是 MAC 客户数据字段。最小长度 64 字节 = 18 字节的首部和尾部 + 数据字段的最小长度(46字节) 。当数据字段的长度小于 46 字节时,应在数据字段的后面加入整数字节的填充字段,以保证以太网的 MAC 帧长不小于 64 字节。
- FCS是帧检验序列。
- 在帧的前面插入(硬件生成)的 8 字节中,第一个字段共 7 个字节,是前同步码,用来迅速实现 MAC 帧的比特同步。第二个字段 1 个字节是帧开始定界符,表示后面的信息就是 MAC 帧。
无效的MAC帧:
- 数据字段的长度与长度字段的值不一致;
- 帧的长度不是整数个字节;
- 用收到的帧检验序列 FCS 查出有差错;
- 数据字段的长度不在 46 ~ 1500 字节之间。
- 有效的 MAC 帧长度为 64 ~ 1518 字节之间。
无效的帧会被丢弃,且不会要求重传
以太网交换机的自学习功能:
交换机有多个接口对应多台主机(假设交换机现在有接口1,2,3,4,分别对应主机A,B,C,D),但交换机并不知道那个接口对应那个主机。所以在某个主机通过某个接口发送帧到交换机时(例如A通过接口1发送一个帧给交换机),交换机会记录一个映射(主机与对应接口的映射)到自己的交换表,并根据发送的目的地(另一台主机,假设是B),在交换表中寻找B对应的接口,找到就从这个接口发出去,若没找到就广播发送帧,所有接口都发出去,但只有与对应目的MAC地址一样的主机才会接受这个帧,其他的会丢弃这个帧。
交换机只在收到主机发送消息的时候,才记录对应主机和接口的映射。