大段文字类似串讲数据链路层,考研复试面试问起随便讲出计网某层可以用来答。
我们知道数据链路层往上是网际层,就是说数据链路层解决的是一个网络内部的事情。一个网络可能是局域网或者广域网,或者是局域网组成的城域网。
局域网主要是广播信道,就有冲突和广播风暴的问题。其中冲突说的是共用信道的通信不能并行,而具有存储转发功能的交换机可以用于分隔冲突域。交换机奇妙的地方在于它可以建立多对结点之间的并发连接,每个端口都有了共享信道完整的传输率,而不是平均分。
在同一个冲突域内部需要考虑应对冲突的协议,一类是按时间或按频段或用编码来划分信道,另一类是在一个逻辑上的环形(物理拓扑不一定是环)网络传递一个令牌,有令牌的可以发信息,这种适合所谓负载高也就是多个站点会同时想发信息的情景,以上两类都可以保守地杜绝冲突,下一类就需要考虑会发生冲突的情况,有ALOHA和CSMA一系的协议。
ALOHA,发送完等确认,如果撞了自然等不到确认,就重发;如果加一个足够长的时隙,约定只在每个时隙开始时试图发送帧,相当于保护了正在传输的帧,使得它有足够的时间发完而不被新发的帧打断。给没有时隙的ALOHA系统加一个载波侦听装置就叫CSMA,载波侦听的功能是在自己这个位置检测信道上有没有已经在传播的信号,最简单的
while(信道忙);
发送;
叫1坚持,缺点在于老信号发完可能有两个新信号同时开始发,这又会冲突。改一下这个逻辑,
while(信道忙)等一段随机时间;
发送;
就是非坚持,这个减少了冲突,但有时会造成多余的等待,这里等待时间随机的意义在于shuffle一下发送时机,期望产生的局面是肯定有人随机到一个比较短的时间,紧接着刚传完的帧继续利用上信道,信道利用率比较高。
还有一种比较缝合叫p-坚持(p表示引入概率),用时隙,发信遇到信道忙还是持续侦听,但是等信道闲了因为怕冲突但又没办法知道有没有别人也要发,只能自己掷个色子,用概率决定自己是立即发还是让出一个时隙,让运气好的先发完,当然都运气好的时候谁也发不成,就是运气都不好。
一个较为基本的问题在于你发之前没办法知道有没有别人要发,只要共享信道而不是划分,冲突就总是有可能发生,而没有Collision Detection的话发生了以后又不能较快发现,只能等确认帧超时或者对方返回出错信息,这个时候引入的CD冲突检测目的在于把冲突以后的损失降到最小。
比如我在信道最左,现在发了一个信号到最右,信号传过去之前最右都以为信道空闲,到他那我们说这从我发送到他接受是一个τ的时间,刚好也开始发他的,就撞了,他的信号又一个τ到我这,我知道撞了,立刻停止发送,而大家知道网络是啥网络,也就知道信道长度限制和信息发送速率,进而约定所有信息必须长过两个τ乘发送率,低于这个的都是因为冲突而截断的,直接扔掉,这也就把冲突损失降到最低了。
不过代价是信道长度的限制,同一个局域网隔多少我们就得加一个交换机来分隔冲突域。限制信道最长长度的同时还有最短帧的限制,当然我们知道信道长度也受信号衰减等介质本身的限制,所以这个约束关系就是介质-》最大信道长度-》最小帧长。
这里注意网桥也能分隔冲突域,把网络分隔成一个个网段,但是显然没有交换机强,交换机直接和单个主机相连。至于这个交换机为什么这么牛逼,他这么牛逼还要什么CSMA/CD,还要什么网桥,我就不知道了。
哦,据说交换机跟网桥是演化关系。
怎么说呢,虽然用处不大,但是学了总是没有坏处。
CSMA/CD还有冲突以后的二进制退避,可以避免二次冲突。
对于无线局域网来说因为接收信号比发送信号弱很多所以没办法边发边检测冲突并止损,只能尽量避免冲突,也就是在发之前就二进制退避,以及广播通知其他站点declare,收不到ACK帧回复就一直重发直到超过规定次数,这叫CSMA/CA。(为了解决隐蔽站问题可以选用RTS/CTS帧机制)
虽说数据链路层三个基本问题是封装成帧,透明传输和差错检测,但是透明传输其实是封装成帧->帧定界->透明传输这样导出的需求,而差错检测在以太网是不需要的,因为以太网误码率低。而至于封装成帧,据王道说以太网帧1500B的最大长度限制也是没有为什么的龟腚,所以“基本”一词的使用在作为局域网代名词的以太网身上显得有点特别,理解局域网尤其是以太网的关键并不在于这三个所谓基本问题。
不过无线局域网误码率不低,还是需要差错控制的,这里差错控制指的是用CRC控制比特错误,再加上确认重传机制。涉及到重传的话分成帧就很有必要了,因为可以减小重传单元(在前两章我们知道网慢主要慢在发送而不是传播,高速链路快主要快在转发快,少发送点就少点时延)。
无线链路有时还要求可靠性和实时性,这就需要建立连接,要有链路管理,有连接才能设定滑动窗口以及分配接收方缓冲区进行流量控制,才能给帧加序号实现可靠传输。不过这只是数据链路层可靠,上面网络层只要你用IP就不可靠,在传输层还是得再实现可靠传输,或者传输层用UDP应用层负责可靠传输。(没有连接不用序号,传一帧等一个ACK也是可以可靠传输的)
谢书没专门讲广域网而专门讲了PPP,而PPP用在点对点链路,广域网里结点之间都是点到点连接而不是统治局域网的以太网的总线型。
PPP硬件实现CRC检错,PPP本身主要是软件实现所以面向字节,比起其前身HDLC用零比特填充更喜欢用字节填充,除非用在同步线路如SONET/SDH(大概是光纤啥的)用硬件实现零比特填充。
PPP用于点对点,全双工,串行链路,它分两层,LCP链路控制协议和NCP网络控制协议,NCP使得可以适用不同网络层协议,不同于PPP前身SLIP在网络层只支持IP协议。PPP两个字节的协议字段描述的是发送端用的网络层协议,支持链路两端使用不同网络层协议。
数据链路层枝干就是这些了,其他的我认为比较细枝末节,需要多看几遍重复记忆了。