????????
数据链路层使用的传输信道有两种:点对点信道和广播信道。
由于通信方式的不同,点对点方式使用的是PPP协议,广播信道使用的是CSMA/CD协议。
接下来看看数据链路层在网络传输中的位置:
如果从整个传输的视角看的话,主机间的数据链路层并不直接连接,而实通过物理层进行通信,因此不同的链路层可能采用的协议是不一样的,因为它只需要能够和它的物理层进行通信即可,和其他数据链路层没有半毛钱关系。
如果从链路层的视角看的话,主机间的链路层好像就是直接进行通信的。
这种把计算机网络分层研究的思想有利于我们研究每一层的功能和实现。
设计数据链路层的原因
设计数据链路层的主要目的是在有差错的物理线路的基础上,采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成无差错的数据链路,向网络层提供高质量的数据传输服务。
因此数据链路层的基本问题是:封装成帧、透明传输和差错检测
链路层的协议数据单元——帧
数据链路层把网络层的协议单元数据报封装成帧发送到链路上,以及把接收到的帧中的数据取出上交给网络层。
author大白话:
链路层提供的是无差错传输与可靠传输
三个基本问题
封装成帧
在数据的前后分别添加首部和尾部,进行帧定界,方便对等的链路层识别帧。帧是数据链路层传输的基本单位。
每个链路层协议都会规定帧首部和尾部的格式,并且规定数据部分的长度上限MTU。
举个栗子:????
当数据部分是由可打印的ASCII码组成时,帧定界可以使用不可打印的ASCII码SOH(00000001)作为帧首部,EOH(00000100)作为帧尾部。
只有接收端收到SOH和EOH时才会收下这个帧。
透明传输
当上层交付的数据中出现帧定界符时,会使链路层错误判断的找到帧的边界,导致通信错误。透明传输正是为了解决这点。
具体的方法有两种:
① 当物理层信道面向字节传输时:字节填充法
发送端的数据链路层在数据中出现栈定界符的前面插入一个转义字符"ESC(00011011)"。接收端的数据链路层在将数据上交给网络层时会删除这个转义字符。从而实现透明传输。
② 当物理层信道面向比特传输时:比特填充法
同样,发送端的链路层遍历数据,当出现五个连续的0时,在后面插入一个1,破坏数据中的帧定界符。接收端上交数据时,会把数据中五个连续0后的的1删除。从而实现透明传输。
差错检测
物理层在传输时收到信噪比的影响,可能会出现传输错误,比如比特0传输为比特1。因为我们需要对传输的数据进行差错检测,如果发现了错误,就丢弃该数据帧。
注意:差错检测是以帧为单位的。
我们一般使用循环冗余检验CRC进行差错检测。
先简要说一下什么是CRC?
通信之前,双方都规定了一个多项式(也叫生成多项式),本质来说就是一段比特数据。比如规定的多项式是:\(X^3+X+1\),那么这个多项式就是1011。
发送端的数据链路层通过模二运算得出冗余码FCS,并把FCS插入到数据的尾部。
接收端的数据链路层收到数据后,就把数据和之前规定的多项式进行相除,如果余数为0,说明这个帧没有出现比特错误,接收。如果余数不为0,说明这个帧出现错误。
接收端添加冗余码和发送端检测余数都是由硬件完成的,因此不会对传输的效率有很大的影响。
下面我们通过一个栗子来看看CRC是怎么用的
发送端FCS的计算:
接收端的检测:
注意:在数据链路层上我们只能保证“收到的帧”都是没有错误的,对于有错误的帧数据链路层会直接丢弃,至于要不要重传由传输层决定,如果要重传的话,数据链路层也不知道这是重传帧,会当作一个新的帧来处理。也就是说数据链路层并不提供可靠服务。因为现在的通信质量已经很高了,出现错误的概率大大降低。
PPP协议需要实现的功能
随着通信线路质量的提高与光纤的广泛应用,物理层误码率明显降低。同时TCP/IP协议中,TCP协议已经采取了一系列差错控制措施。
因此PPP协议只需实现帧封装、传输、拆帧与CRC校验功能。不使用帧序号,不提供流量控制功能。
author大白话:
总的来说,链路层的PPP协议只需要把上层交付的数据封装成帧,传输到点对点通信的链路层,接收端进行CRC检验,出错丢弃,不出错接收并上交即可。其他的比如帧排序,实现可靠通信,都由上层协议完成。
ppp协议的附属协议:实现数据链路连接的链路控制协议LCP,网络控制协议NCP
PPP协议的帧格式
F:Flag,帧定界符,标志帧长度的字段
A:Address,地址字段
C:控制字段
地址字段和控制字段没有有效的信息,被设计出来以后用的,但是到现在也没用上
FCS:CRC检验序列
PPP协议是如何解决三个基本问题的?
透明传输问题
用于异步传输时:字节填充
转义字符定义为0x7D
当出现0x7E时,转变成0x7D,0x7E;当出现0x7D时,转变成0x7D,0x5D
接收端进行与之相反的变化,即可还原出正确的信息。
用于同步传输时:字符填充
因为0x7E是01111110,因此发送端在发送之前扫描整个字段,只要发现5个1,就填充一个1,把原信息中的ox7E破坏掉
差错检测
使用CRC冗余校验
PPP协议的工作状态
不多说,直接上图:
author大白话
PPP协议不仅应用于拨号电话线ISP,并且在路由器-路由器之间的专用线路上也都广泛地使用。它是通过向路由器发送多个PPP帧,先建立物理链路,再实现网络层协议,最终实行通信。可以PPP协议已经不单纯是链路层的协议了,还包含物理层和网络层协议。
PPP协议既支持异步传输链路,也支持同步传输链路
前面提到的PPP协议是基于点对点信道的通信,但是我们所说的局域网采用的是基于广播信道的通信,可以实现一对多。
广播信道的分类是以网络拓扑结构进行分类的,有星形网、环形网和总线网。总线网使用的最多,传统的以太网就是采用总线网的结构。
广播信道的冲突问题
共享信道要考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体(共享信道)的占用,即媒体接入控制问题(MAC)。
author大白话:
也就是说,多个用户要共享同一条信道,肯定会产生碰撞,广播信道的协议重点就是如何解决冲突问题.
如何解决MAC问题
author大白话:
解决方法有两种,一种是我们在物理层学到的信道复用技术。另外一种则是多点接入技术。CSMA/CD协议采用的就是多点接入技术。
以太网的数据链路层
以太网把数据链路层分为LLC层即逻辑链路控制层和MAC层即媒体接入控制层。但是因为标准和市场的冲突,现在已经剩下MAC层了。
适配器
适配器是插在主机的一张网络接口板,又叫网卡。用于实现计算机与局域网的通信。
适配器通过并行传输的方式从系统接收IP数据报并封装成帧,通过串行传输的方式从局域网接收数据帧并交互网络层。因此适配器要实现的功能有:
实现并行传输和串行传输的转换
实现链路层的以太网协议
计算机是通过适配器与局域网进行通信的。MAC物理地址放在适配器里,IP地址放在存储器里。
链路层总线网结构的设计思想(当今局域网的设计思想)
因为总线的特点是一台计算机发送信息其他计算机都能检测到,这种就是广播通信。但是我们有时候想要点对点的通信方式,如何在总线网结构上实现一对一的通信呢?
在发送数据帧时,在帧的首部写明接收方的MAC地址,只要当主机适配器的MAC地址与数据帧中的目的地址一致时,该适配器才能接受这个数据帧。
为了通信的方便,以太网采取了一下措施:
- 采用无连接的工作方式。发送方不需要对发送的数据帧进行编号、也不需要接收方确认回复,出错了也不管,是一种尽最大努力交付的方式。
- 以太网发送的数据都使用曼彻斯特编码。好处是同步、缺点是传输的码元加倍了。
CSMA/CD协议
Carrier Sense Mulitiple Access with Collision Detection,即“载波监听多点接入/碰撞检测”
author大白话:也就是说,以太网上的主机发送信息时,会和其他主机发送的信息产生碰撞,因为只有一条总线,不能有两个人同时发信息,因此使用CSMA/CD协议的以太网是半双工通信。
发生碰撞时,碰撞处信息会发生变化,碰撞信息会沿途返回给发送主机,因此主机要“边听边发”,一旦检测到碰撞,就立刻停发。这就又会产生一个问题,如果帧已经发送完了还没有检测到碰撞,即使后续检测到碰撞发送主机也不会知道。因此这就需要发送帧不能太短,总线距离不能太长,这就引出了最小帧长度的概念。
争用期/最小帧长度
争用期(碰撞窗口):以太网端到端的往返时间,即二倍传输时延。发送端检测到冲突的最长时间即是争用期的时间,只要过了这个时间还没有检测到碰撞,后续就不会碰撞了。
最小帧长度:科学家们不想用争用期来描述一个帧是否会碰撞,因此引入了最小帧长度。以太网规定最长争用期为发送512bit的时间,因此最小帧长度为512/8=64字节。只要发送了64字节还没产生冲突,后续就不会产生冲突了。
以太网端到端的最大距离:在10m/s的以太网上,最大传播时延应为发送512bit时间的一半,即256/10*10^6=25.6us。传播1km大约需要5us,因此以太网最大距离约为5km。实际上应该远小于,大概1500m。
截断二进制退避算法
当冲突过多时,所有主机都在等待时间同时重发,又会产生冲突。因此采用截断二进制算法根据重传次数动态调节等待时间,以维持系统的稳定。
以太网的信道利用率
又叫硬件地址或物理地址(48位),主机被数据链路层的唯一标识,被固化在适配器的ROM中。工作在数据链路层。
(IP地址工作在网络层,通过ARP协议可实现IP地址和MAC地址的转换。)
目前有两种格式:以太网V2的MAC帧和IEEE802.3的MAC帧。
V2的MAC帧格式
可以看到MAC帧并无标识帧长度或者定界符,那以太网是怎么识别每一个帧的结尾的呢?前面说过MAC帧采用曼彻斯特编码,所以只要当接收方的电压不再发生变化(发送方停止发送0/1)时,意味着帧的结尾。
IEEE802.3的MAC帧格式
早期扩展局域网使用的一般是同轴电缆,现在已经被淘汰了
后来采用集线器加双绞线来扩展局域网
集线器工作在物理层,本质上其实可以理解为一根导线。使用集线器连接扩展的以太网其广播域没变,冲突域却变得更大了,这就是它被淘汰的原因。
现在使用交换机来扩展以太网。交换机其实是多接口的网桥,它在接到一个MAC帧后,不会群发到所有主机,而是先存储起来,然后解析该帧的MAC地址,只发送给目的主机。
因此交换机是工作在全双工通信下,没有冲突域,不会产生冲突,因此不需要使用CSMA/CD协议。
集线器和交换机的对比:
交换机的自学习功能
自学习算法总结起来就是这三个步骤:
登记源主机的MAC地址和接口号
在交换表中查询目的主机的接口号
查询成功,只发给目的主机
查询失败,群发给除了源接口外的其他所有接口的主机
? 这些主机通过比较适配器的MAC地址和接收帧的MAC地址是否一致来决定是否接收该帧
交换表中每条记录都有自己的过期时间,到期自动删除,是动态变化的(因为交互机接口和MAC地址的对应关系不是固定的)
试想你处于一个很大的以太网,当你想向以太网的某几台主机发送广播帧,但是由于以太网和广播帧的特性,当前以太网的所有主机都会收到你的广播帧,网络就会因为广播信息聚集过多而产生性能恶化,也叫“广播风暴”。vlan就是被设计出来解决这个问题的。
你可以把以太网中的某些主机划分为同一个vlan,该vlan中的主机发送广播帧不会传输到所有主机,只会发给当前vlan中的主机,这样就解决了广播风暴的问题。
具体实现是通过配置交换机,而且广播帧的格式要是802.1Q帧。
原文:https://www.cnblogs.com/sang-bit/p/14229429.html