目录
数据链路层
沿着协议栈,网络层往下是数据链路层,通信链路有的是有线链路,有的是无线链路。运行链路层协议的设备叫结点(例如主机、路由器、交换机等),连接相邻节点的叫链路,数据报在进入链路前,节点将其封装成帧,数据链路层不必考虑下层物理层如何实现比特传输的细节。
成帧:将数据报封装在帧中,加上帧头、帧尾部,在帧头部使用“MAC”(物理)地址来标示源和目的。
链路层主体部分在网络适配器(network adapter)实现,或者叫网络接口卡(Network Interface Card)。
可靠交付——差错检测和纠正技术
为什么传输层做了可靠性传输服务,数据链路层也要做?那肯定是减少上层的工作量和消耗代价。
在低差错的链路上很少使用该技术,因为协议复杂;在高差错的链路上,从一个结点发送帧到另一个结点的过程中,对链路层数据帧(包括帧首部和帧尾部)进行差错检测和纠正比特(Error-Detection and-Correction,EDC)。
EDC是要差错检测和通过冗余位来进行纠正。但错误检测并不完全可靠,也有检测不出来的,
检错技术
奇偶校验
偶校验方案是附加一位检验位,比如d位数据,添加1位检验位就是d+1位;检测时只要数一数d+1位数据里面有奇数个1还是偶数个1,如果出现奇数个1就是出现了奇数个比特差错。
同样采用奇检验方案就是d+1位数据出现偶数个1,那就是出现了偶数个比特差错。
二维奇偶校验
与单比特奇偶校验不同,它可以纠正单个比特的错误。通过行校验和列校验交点可以锁定并纠正该数据错误。
因特网检验和
检测正在传输报文段时的错误。
发送方:将数据的字节作为16比特的整数并对其进行求和,将这个和的反码放在UDP检验和字段
接受方:接收到报文段后检查是否与携带校验和字段值一致,不一致就是出错,一致则没有出错
循环冗余检测
现今的计算机网络广泛应用循环冗余检测技术,拥有强大的差错检测码。
它将发送的比特串看作系数是0、1的一个多项式,然后双方协商一个r+1位模式作为生成多项式G。例如数据D有d比特,它看作一个二进制数,附加一个r比特的R,形成一个d+r比特的模式,然后用模2算术刚好能被G整除。
举例一下模2运算:核心是按位异或运算,加减都不用进位借位。1011-0101=1110
乘除跟二进制运算一致。如下图:
每个CRC标准可以检测小于r+1比特的突发错误,大于r+1比特的以概率1-0.5^r检测到。
多路访问链路和协议
点对点链路:由链路一端的单个发送方到另一端的单个接收方组成,
广播链路:多个发送方到另一端的多个接收方连接到相同的、单一的、共享广播信道上。
多路访问协议
所有结点都能传输帧,那多个结点同时传输帧就会在接受方那里产生碰撞,因此需要协调活跃的结点。
信道划分协议
采用时分多路复用和频分多路复用,在所有结点之间划分广播信道。
时分多路复用将时间划分为时间帧,然后每个时间帧中有N个时隙,每个结点在N个时隙中的一个内占有全部信道资源。但这个适用于每个结点都有相同的通信需求的,假如有个结点很空,有的很繁忙,那就会浪费好多时隙。
频分复用是将信道划分不同的频段,每个频段分配R/Nbps带宽,但也会让一些大传输量的结点限制带宽在R/Nbps。
码分多址(CDMA)是每个结点分配一种不同的编码,各结点使用它独有的编码来传输数据,这就使得多个结点可以同时通信传输。
随机接入协议
结点有发送需求时占用全部带宽进行发送,如果遭遇了碰撞,那它就重传该帧直到无碰撞接收。它不是遭遇碰撞就立刻重传,而是随机等待一个时延后再重传。每个结点都随机独立的选择一个时延,所以减少再次碰撞的概率。
时隙ALOHA协议
假设:
- 所有帧是等长的
- 时间被划分成相等的时隙,每个时隙可发送一帧
- 节点只在时隙开始时发送 帧
- 节点在时钟上是同步的
- 如果两个或多个节点在一个时隙传输,所有的站点都能检测到冲突
运行:
- 当节点获取新的帧,在下一个时隙传输,并在该时隙传输完
- 传输时没有检测到冲突,成功,节点能够在下一时隙发送新帧
- 检测时如果检测到冲突,失败,节点在每一个随后的时隙以概率p重传帧直到成功
时隙ALOHA的优点有:结点可以以信道带宽全速连续传播,仅需要结点之间在时隙上同步
缺点是会产生碰撞浪费时隙,也可能会出现空闲的时隙,必须在一个时隙内传完数据,最大效率只有37%(计算题)。
纯ALOHA
- 无时隙ALOHA:简单、无须节点间在时间上同步,当有帧需要传输:马上传输
- 冲突的概率增加:帧在t0 发送,和其它在[t0 -1, t0 +1]区间内开始发送的帧冲突;和当前帧冲突的区间(其他帧在此区间开始传输)增大了一倍
载波侦听多路访问(CSMA)
- 它发送之前要先听网络里面的情况,就是载波侦听,如果有数据传输就一直到检测出小段时间没有传输了,再自己传输。
- 该节点在传输时一直监测信道,如果发现其它结点在传输干扰帧则停止自己的传输。
具有碰撞检测的载波侦听多路访问(CSMA/CD)
- 载波侦听CSMA:和在CSMA中一样发送前侦听信道
- 没有传完一个帧就可以在短时间内检测到冲突
- 冲突发生时则传输终止,减少对信道的浪费
- 从适配器开始,适配器从网络层获取数据报,然后创建帧,将其放进缓存中
- 如果适配器侦听到信道空闲则开始发送数据帧,如果忙则等待,直到没有传输再开始
- 传输过程中,适配器也监视其它使用该信道的信号能量
- 如果没有其它信号被检测到,则完成该帧传输,如果检测出了信号能量,停止传输
- 适配器等一个随机时间后开始返回到步骤2
这时候就有一个问题,等多久?短了继续碰撞,长了浪费信道资源。
二进制指数后退:当传输一个给定帧时,该帧经历了一连串的n次碰撞后,结点随机地从{0,1,2,3,4.....2^n-1}中选择一个值K,经历碰撞次数越多,选择的区间越大。这可以有效避开再次冲突。
轮流协议
多路访问协议有两个理想特性:1、当只有一个结点活跃时,该结点占用全部带宽;2、当有N个结点活跃时,每个占1/N的带宽。ALOHA协议和CSMA协议具备特性1,但不具备2。所以就激发了轮流协议。
轮询协议:
网络中的其中一个结点被指定为主结点,主结点邀请从结点依次传送,告知其传输帧的最多数量。在结点1传完以后,主结点给结点2发报文,以循环的方式轮询各个结点。
优点:轮询协议消除了困扰随机接入协议的碰撞和空时隙的问题,提高了效率。
缺点:
- 轮询本身消耗信道带宽;
- 等待时间:每个节点需等到主节点轮询后开始传输,即使只有一个节点,也需要等到轮询 一周后才能够发送
- 单点故障:主节点失效时造成整个系统无法工作
令牌传递:
这种协议没有主结点,有一个叫做令牌的小的特殊帧在结点之间以某种固定的次序进行交换。当某个结点有需求发送帧时,它可以保留该令牌,发送完数据以后再把令牌传出去;如果不需要发送则向其它结点传输该令牌。
- 令牌开销:本身消耗带宽
- 延迟:只有等到抓住令牌,才可传输
- 单点故障 (token): 令牌丢失系统级故障,整个系统无法传输
交换局域网
链路层地址:链路层地址可以叫做LAN地址、物理地址、MAC地址;而MAC地址是最流行的叫法。MAC地址使用6个字节,可以做到全球没有相同MAC地址的两块适配器。
地址解析协议(ARP)
地址解析协议(ARP):因网络层使用IP地址,数据链路层使用MAC地址,所以两种地址要频繁的进行转换。
在同一个局域网中:
- A要发送帧给B(B的IP地址已知), 但B的MAC地址不在A的ARP表中
- A广播包含B的IP地址的ARP查询包:Dest MAC address = FF-FF-FF-FF-FF-FF;LAN上的所有节点都会收到该查询包
- B接收到ARP包,回复A自己的MAC地址帧发送给A,用A的MAC地址(单播)
- A在自己的ARP表中,缓存IP-to-MAC地址映射关系,直到信息超时
- 在R上有两个ARP表,分别对应两个LAN
- 在源主机的路由表中,发现到目标主机的下一跳是111.111.111.110
- 在源主机的ARP表中,发现其MAC地址是E6-E9-00-17-BB-4B....
-
A创建一个链路层的帧,目标MAC地址是R,该帧包含A到B的IP数据报
-
帧从A发送到R, 被R接收到,从中提取出IP分组,交给上层IP协议实体
-
R创建一个链路层的帧,目标MAC地址为B,帧中包含 A到B的IP 数据报
以太网
以太帧结构
- 数据字段(46~1500字节):承载着IP数据报,以太网最大传输单元式1500字节,IP数据报超过1500字节则要分片传输,如果少于46字节则要填充到46字节传输。
- 目的地址(6字节):包含目的适配器的MAC地址。
- 源地址(6字节):包含了传输该帧到局域网的源适配器的MAC地址。
- 类型字段(2字节):指出高层协(大多情况下是IP,但也支持其它网络层协议Novell IPX和AppleTalk等
- CRC(4字节):在接收方校验,如果没有通过校验,丢弃错误帧
- 前同步码(8字节):用来同步接收方和发送方的时钟速率,使得接收方将自己的时钟调到发送端的时钟,从而可以按照发送端的时钟来接收所发送的帧
链路层交换机
链路层交换机:对帧进行存储和转发,对于到来的帧,检查帧头,根据目标MAC地址进行选择性 转发;当帧需要向某个(些)网段进行转发,需要使用CSMA/CD进行接入控制。
透明:主机对交换机的存在可以不关心。
交换机的功能:
- 过滤:决定一个帧应该转发到某个接口还是将其丢弃
- 转发:决定该帧转发到哪个接口,并将其发出去
- 缓存:可以缓存到来的帧
- 全双工:对每个帧进入的链路使用以太网协议,没有碰撞
转发表:交换机的过滤和转发依据交换机转发表。
该表包含MAC地址和对应接口号,还有在表中的放置时间。
自学习:交换机通过学习得到哪些主机(mac地址)可以通过哪些端口到达;
交换机表初始是空,当接收到帧,交换机学习到发送站点所在的端口(网段);记录发送方MAC地址/进入端口映射关系到交换表中;如果一段时间后交换机没有接收到以该地址为源地址的帧,则删除该地址。