数据链路层:概述与服务
链路层主要使用的信道包括:
- 广播信道 : 这种信道采用一对多的广播通信方式,因此过程比较复杂.广播信道上主机众多,我们必须使用专用的共享信道协议来协调这些主机的数据发送
- 点对点信道 : 这种信道使用一对一的点对点通信方式
链路层提供的服务
链路层协议定义了在链路两端的节点之间交互的分组格式,以及当发送和接受分组时这些节点采取的动作。
链路层协议可能提供的服务包括:
服务 | 概述 |
---|---|
成帧 | 在每个数据报传输时,用链路层帧将其封装起来.一个帧由首部,数据字段和尾部组成.链路层的数据字段就是网络层的数据报 |
链路接入 | 媒体访问控制协议(Medium Access Control,MAC)规定了帧在链路上传输的规则.当对端只有一个的时候,可以随便发,MAC不作限制.当出现多路访问的问题的时候,MAC协议协调多个节点传输 |
可靠交付 | 表示两个链路层结点之间可以无差错传递帧.使用和TCP类似的确认与重传实现的.一般用于差错比例较大的链路(WiFi等).差错比特较低的链路(光纤等)一般不使用. |
差错检测和纠正 | 差错检测用于检测比特差错,一般用硬件实现.差错纠正可以纠正出现的比特差错 |
适配器通信
对于给定的一个通信的链路,链路层协议的主要部分在适配器中实现。在主机中,链路层的主体是在网络适配器(网络接口卡)中实现的,还是有部分功能由软件实现,如组装链路层寻址信息和激活控制器硬件.位于网卡核心的是链路层控制器,控制器实现了许多链路层服务(成帧,链路接入,差错检测)的专用芯片,因此,链路层的许多功能是用硬件实现的.
适配器是一个半自治的单元。
差错检测和纠错技术
奇偶校验
单个比特的奇偶校验
单个比特的奇偶校验是指在要发送的数据最后附加一个奇偶校验位.奇校验的意思就是整个编码中的1的个数要是奇数.偶校验就是1的个数是偶数. 显然如果有偶数个比特发生错误,那么奇偶校验就检测不出来了.
二维奇偶校验
D中的d个比特被划分为i行j列.对每行没咧计算奇偶值.产生的i + j + 1奇偶比特就构成了链路层帧的差错检测比特.
当出现单个比特差错时,发生错误的行和列都会出现差错.接收方不仅可以检测差错,还可以根据行列索引来纠正它
二维奇偶校验也可以检测(但不能纠正)两个比特错误的任何组合.
如果在同一行两个比特错误,则那一行的奇偶校验正确,但是会有两列的奇偶校验失败.如果不同行,则会有四列出错.这两种情况都无法纠错,只能检测.但是还是有一些偶数个错误的情况是二维奇偶校验无法检测的.
接收方检测和纠错的能力被称为前向纠错.
检查和方法
在校验和方法中,数据被切成k比特的序列,这些序列全部相加之后取反码就是校验和.接收方收到数据之后,把所有数据加起来(包括校验和).用结果是否全为1来作为判断数据是否出错的标准.
和CRC相比,校验和提供较弱的保护.
为什么传输层使用校验和而链路层使用CRC呢?
- 传输层使用软件实现,采用简单快速的方案是必须的(校验和)
- 链路层的CRC用硬件实现,能够快速执行CRC操作.
循环冗余检测(CRC)
编码解码步骤
CRC编码也称为多项式编码,因为该编码能够将要发送的比特串看成系数是0或1的一个比特串,对比特串的操作被解释为多项式算数. 这里不过多讨论多项式理论.
编码步骤如下 :
- 发送方和接收方实现协商一个r + 1的比特模式(比特串)G,叫做生成多项式.要求G的最高位是1
- 对于一个给定的数据段D,发送方选择r个附加比特R,并将它们附加到D上.
- 使得得到的d + r比特模式用模2算数恰好能被G整除.(模2算数就是异或)
接收方的解码步骤很简单,用G去除收到的d + r比特.如果余数非0,接收方知道出了差错.否则认为数据被正确接收.
怎么计算R?
要使得R对于n有: D * 2 r XOR R = nG.
两边同异或R得: D * 2 r = nG XOR
所以 R = remainder {D * 2r / G}
多址访问协议
信道划分协议
TDM(时分多路复用)
TDM把时间划分为时间帧,并进一步把时间帧划分为N个时隙(slot).(时间帧和链路层交换的单元帧不是一个意思)
然后把每个时隙分给N个节点中的一个.无论何时某个节点在有分组想要发送的时候,他在循环的TDM帧中指派给它的时隙内传输分组比特.时隙长度一般应是一个时隙内能传输一个分组
TDM的缺点
- 最高速率只能达到R/N bps ,即使只有一个人使用信道
- 节点总是总是要等待它的时隙,可能会对缓存等造成压力
FDM(频分多路复用)
FDM将Rbps的信道划分为不同的频段(每个频段具有R/N带宽),并把每个频段分给N个结点中的一个.因此FDM在N个较大的信道中创建了N个较小的R/N信道.
FDM的缺点和TDM相同,限制了每个结点只能使用R/N带宽.
码分多址
又称为CDMA,此处不作介绍.只需要知道类似于TDM的时隙和FDM的频率,能分配给多路访问信道的用户.
随机访问协议
时隙ALOHA
时隙ALOHA的原则是
- 当结点有一个新帧要发送时,它等到下一个时隙开始并在该时隙传输整个帧
- 如果没有碰撞就成功传输该帧
- 如果碰撞,该结点在时隙结束之前检测到碰撞.结点以概率P重传该帧,知道该帧传出去.
优点:
- 当结点是唯一活跃的节点时,时隙ALOHA可以让节点全速传输.
- 时隙ALOHA是一个简单的协议
缺点:
- 当有大量节点有帧需要传输时,则最多仅有37%的时隙做有效工作.因此信道传输效率是0.37Rbps.(推导过程看书)
ALOHA
ALOHA是一个非时隙,分散的协议.当有帧需要传输时,ALOHA会马上传输.如果碰撞了,ALOHA会以概论P重传该帧.否则,该结点等待一个帧传输的时间.因为ALOHA的分散,所以ALOHA的最大效率仅为1/(2e).仅为时隙ALOHA的一半.
载波侦听多路访问(CSMA)
载波侦听的意思包含两点:
- 说话之前先听:一个结点发送之前需要先侦听信道,如果有其他结点在发送,就等待发完.
- 如果其他结点发送,则立即停止发送.
为什么所有结点都载波侦听,还是会碰撞?
因为信道传输会有时延(虽然速度接近光).
具有碰撞检测的载波侦听多路访问(CSMA/CD)
在纯CSMA中,即使检测到了碰撞,结点还是会发完它的帧.在CSMA/CD中,结点检测到碰撞就会停止发送一个无用的帧,有助于改善协议性能.
CSMA/CD运行的过程
- 适配器从网络层一条获得数据报,封装成帧,将其放入帧适配器缓存中.
- 如果适配器监听到信道空闲,它将传输.如果信道忙,就等待到不忙
- 传输时未监听到其他结点的信号能量,完成传输.如果检测到,就中止传输.
- 中止后,等待一个随机时间量(二进制指数后退),返回步骤2.
如果每个结点都等待同样的时间T,那么可能会一直碰撞下去.为了解决这个问题,一般采用二进制指数后退算法.
二进制指数后退算法:传输一个帧时,如果经历了一连串的n次碰撞后,结点随机等概率从[0, 1, 2,3,…,2n-1]中选择一个K值,然后等待K * 512比特时间(例如,对于100Mbps,这个时间是5.12微秒.)后重传.
CSMA/CD协议效率 : 效率 = 1 / (1 + 5dprop / dtrans),其中dprop表示信号能量在任意两个适配器中传播所需的最大时间,dtrans表示传输一个最大长度的以太网帧的时间.从公式可以看出,如果dprop 接近0 , 则效率接近1
链路层编址
- 地址解析协议(ARP),该协议为节点提供了将IP地址转换为链路层地址的机制。
- 动态主机配置协议(DHCP)。
MAC地址
并非节点具有链路层地址,而是节点的适配器具有链路层地址。
MAC地址的作用是标识局域网内一个帧从哪个接口到哪个物理相连的其他接口.因此,拥有多个网络接口的主机或路由器将具有与之相关联的多个链路层地址,就像他们也具有多个IP地址一样.需要注意的是,链路层交换机没有MAC地址.
MAC地址也被称为LAN地址,物理地址.
MAC地址长度为6个字节,,共有248个可能的MAC地址.
MAC地址空间由IEEE统一管理.当一个公司要生产适配器的时候,他象征性的付一点钱给IEEE,买一个224的地址空间.IEEE固定前24位,后24位由各个公司自己生成唯一标识.
当适配器收到一个帧时,会先检查这个帧的MAC地址与自己的接口MAC是否一致,如果不匹配就丢弃该帧,如果匹配向上传递.这种适配是使用硬件实现的.
FF-FF-FF-FF-FF-FF是唯一的用来广播的MAC地址
地址解析协议(ARP)
ARP做什么?
ARP的任务是把网络层的IP地址和链路层的MAC进行转换
在发送主机的ARP模块将取在相同局域网上的任何IP地址进行输入,然后返回相应的MAC地址
DNS和ARP很相似,但是DNS和ARP的区别是DNS为因特网上的任何主机解析主机名,而ARP只为在同一个子网上的主机和路由器接口解析IP地址.
ARP如何工作?
每台主机或者路由器在它的内存中都有一张ARP表,这张表包含了IP地址到MAC地址的映射关系.ARP表中也有一个寿命(TTL)值,它指示了从表中删除每个映射的时间,一个表项的过期时间一般是20分钟
这张表不必为该子网上的每台主机和每个路由器都包含一个表项,某些可能从没进入过表,某些可能已经过期
当主机222.222.222.220要发送一个数据报,该数据报要IP寻址到本子网上另一台主机或路由器.发送主机需要拿到MAC地址然后进行发送.如果ARP表中有这一项,那么直接取即可.如果没有,那么就会发送一个ARP分组.
一个ARP分组有几个字段,包括发送和接收IP地址和MAC地址.ARP查询分组和ARP响应分组都具有相同格式.
222.222.222.220向广播地址FF-FF-FF-FF-FF-FF发送一个ARP查询分组,子网中的每个结点都把这个分组向上传给ARP模块,ARP检查查询分组中的IP地址和自己的是否一样,其中匹配的那一个给查询者送回(不是广播)一个ARP响应,然后222.222.222.220更新它的ARP表并发送数据报
TIP:
- ARP查询是广播,ARP响应是标准传输
- ARP是即插即用的,不需要管理员配置
- ARP是跨越链路层和网络层边界的协议
- 当向另一个子网中发送数据时,每次都会使用ARP找到下一跳,然后一跳一次的穿过去.不能用ARP直接解析,因根本不在一个子网中
动态主机配置协议(DHCP)
DHCP是一个客户机/服务器协议。
对于一台新到达的主机,DHCP协议分四个阶段进行:
- DHCP服务器发现(DHCP server discovery):一台新到达主机的首要任务是发现一台与其交互的DHCP服务器。通过使用一个DHCP发现报文来完成。
- DHCP服务器提供(DHCP server offer):一个DHCP服务器收到一个DHCP发现报文时,它响应客户机发回一个DHCP提供报文(包含在UDP段中,UDP段包含在IP数据报中,IP数据报包含在链路层帧中,然后链路层帧被发给刚到达的客户机)。
- DHCP请求(DHCP request):该新到达的客户机从一个或多个服务器提供中选择一个,并用一个DHCP请求报文对选中的提供进行响应,回应相关的配置参数。
- DHCP ACK(DHCP ACK):服务器用一个DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。
以太网
以太网是一种局域网技术.
以太网现行的主要结构是星型拓扑,不再使用集线器,而是使用交换机.
交换机不仅是无碰撞的,而且是名副其实的存储转发分组交换机.交换机运行在第二层.
以太网帧结构
|–前同步码–|–目的地址–|–源地址–|–类型–|–数据–|–CRC–|
字段 | 描述 |
---|---|
数据字段(46-1500字节) | 这个字段承载IP数据报.以太网的最大传输单元(MTU)是1500字节.如果超过就要分片.最小是46字节,如果不足,就要填充.网络层使用IP数据报标记的长度来确定去掉填充的字节. |
目的地址(6字节) | 网卡的MAC地址.只有本接口地址和广播地址才会被接收方送到网路层. |
源地址(6字节) | 发送者的MAC地址 |
类型字段(2字节) | 不一定数据一定是IP数据报.可能是各种不同的网络协议.比如ARP,AppleTalk等.用来标记网络层协议类型,以正确分发给网络层 |
CRC(4字节) | 用来纠错 |
前同步码(8字节) | 前七个字节用来”唤醒”接收适配器,并且同步时钟频率(为了支持不同的以太网速率总会产生漂移).第8个字节最后两个比特(第一个连续出现的1)用来警告网卡:”数据马上到来” |
以太网面向无连接,都向网络层提供不可靠服务.当使用CRC检测到帧错误后,它只是简单的丢掉,不会确认重传
CSMA/CD: 以太网的多址访问协议
前面已经分析,这里不再分析
互联:链路层交换机
交换机转发和过滤
过滤是决定一个帧应该转发到某个接口还是应当将其丢弃的交换机功能.
转发是决定一个帧应该被导向哪个接口并且导向这个接口的功能.
转发和过滤通过交换机表来完成
交换机表项有:
- MAC地址
- 通向该MAC地址的接口号
- 表项放在表中的时间
交换机转发的分组和路由器不一样,交换机转发的分组基于MAC地址
当一个目的地址发来时,交换机做这样的处理:
- 表中没有该表项时,交换机广播(除了来源接口)
- 查表得来源接口和目的接口一样,交换机丢弃分组(已经在包含目的地的局域网网段广播过了)
- 查表得有一个表项匹配,且不是来源接口,交换机转发分组过去.
自学习
交换机是这样自学习的
- 交换机初始为空
- 每个入帧到达,交换机会存储1.该帧源地址2.该帧到达的接口3.当前时间
- 如果过了老化期后,交换机没有收到同一个源地址的帧,交换机就删除这个表项.(防止接口上的一台PC被另一个替换)
交换机是即插即用的
链路层交换机的性质
交换机的几个优点:
- 消除碰撞:使用交换机的局域网没有因碰撞浪费的带宽.交换机缓存帧,并且同一时刻只发一个.最大聚合带宽是所有接口之和
- 异质的链路:交换机将链路彼此隔离
- 管理:交换机易于进行网络管理
TIP:交换机毒化
- 攻击者向交换机发送大量具有不同源MAC地址的分组,用伪造表项填满交换机表项.让正常的分组没办法传输,交换机只能广播大部分的帧,这些帧能够由嗅探器俘获到
交换机与路由器比较
交换机的优点和缺点
优点 :
- 即插即用
- 具有相对较高的分组过滤转发速率
缺点:
- 大型交换网络要求主机和路由器上有大的ARP表,这将生成可观的ARP流量和处理量.
- 交换机对于广播风暴不提供任何保护措施,如果主机出故障不停广播帧,交换机会转发所有帧,让以太网崩溃
路由器的优点和缺点
优点:
- 路由器没有生成树限制,所以路由器允许以丰富的拓扑结构构建因特网
- 路由器对第二层的广播风暴提供了防火墙保护
缺点:
- 不是即插即用的
- 处理分组时间长
链路虚拟化:网络作为链路层
多协议标签交换的目标是:对于基于固定长度标签和虚电路的技术,在不放弃基于目的地IP数据报转发的基础设施的前提下,当可能是通过选择新的标识数据报并允许路由器基于固定长度的标签(而不是目的地IP地址)转发数据报来增强功能
MPLS分组只能在MPLS使能的路由器之间发,因为MPLS首部位于链路层和网络层首部之间,普通路由器不认识.
MPLS使能的路由器会通告其他路由自己能到达的目的地A,并且通告MPLS的某个标签可以到达目的地A.
当一个MPLS分组到达时,路由器解析入标签,查MPLS表,然后把标签换成表中的出标签,发送到表中标记的接口中(类似虚电路).
MPLS可以配置一条预计算的无故障的路径来应对链路故障.