在上一节中,Bob、Alice和他们的朋友们用电路建立一个网络,用灯泡亮灭来传输信息。他们之间就构成了一个小的网络“局域网”。但是他们在使用的过程中却遇到了不少问题。
首先,为了保存通信,电路是一直存在的。可问题在于,Bob和Alice并不是一直在发送信息,怎么区分Bob**发送信息什么时候开始什么时候结束?**同时,Bob可能发送不同的信息,信息与信息之间如何区分出来?
如该图上部分,仅仅在物理层传输数据时信息与信息之间很容易出现干扰,这很让人抓狂。那怎么解决呢?一个很好的办法就是使用信封。将想要传递的信息封装到信封里。这样接收者就很容易知道什么时候信息开始和结束(因为被包裹在信封里了),而且一个信息与一个信息之间也很容易区别。
这样的一个信封就可以当作帧,信息放入信封中就是封装成帧。在数据链路层中,上层的数据(主要为IP数据)会被添加上帧首部和帧尾部构成一个帧。在具体实现中,分别使用帧开始符和帧结束符来表示开始与结束。
生活中的语言可以表示各种信息,但是这些信息都是由基本的字符组成。就跟猴子打莎士比亚著作一样,会由一些数据部分的信息恰好与帧开始符和帧结束符的形式一样。这样就出现了一个问题,即当接收者看到假的EOH就停止接收,则会丢失部分的信息。
如何解决这个问题?只需要一个严格的邮差先生。这个邮差先生会负责检查信封中的信息,把那些信息中的假的帧开始符和结束符,通过前面插入转义字符的方式(当有数据中也有转义字符时,就在前面也插入一个转义字符)将这些危害的字符转为普通的字符。
这种可以支持所有数据,对于数据来说是透明的。这就是透明传输。
在物理线路中,电路中电流电压会受到外界的影响,可以表示“0”的电压变高而变为“1”,这时就发生了错误。所以在数据传输时,需要进行差错检测。
常见的检错编码有奇偶校验码和循环冗余检错CRC,而在经常使用的就是CRC。
CRC的基本原理是除了信息位,还会添加一个校验位用于存储信息与某个多项式的余数。而接受者在接收到信息时候后会使用校验位来校验,如果得出余数为0,则认为没有差错。反之则认为这个帧出错了。
上述的功能保证了比特位不会出错,但是不能保证帧没有错。帧发生错误的情况有:
要提供可靠传输必须考虑上述的问题(OSI的观点)。但是实际上,现在通信线路的质量大大提高了,没有提供可靠传输,而是将问题交给了上层的协议(例如TCP)。只有通信质量不好的线路才使用确认和重传机制。
以上就是数据链路层中三个主要问题。数据链路层向下保证了物理传输的可靠性,向上保证了各种数据的准确透明传输。
在前面我们说了,Alice和他们的朋友们可以构成了一个小的网络。在这个网络中,可以有多少种通信方式呢?
在这两种不同的通信信道中,有着各自的特殊协议。
PPPoE(PPP on Ethernet) 是在以太网中实现PPP一对一虚拟信道的一种方法
在现实生活中,一对一信道还是比较少见。更常见的是一对多式的局域网。常见的连接多个设备的方式有如下的星型、环型和总线型等。
局域网有着以下的优点:
但是同时特多出了两个主要的问题。第一,多个设备连接在同一网络中,如何分辨哪一个是设备想要发送的的目标,而对于接收者又是谁发送给它的。如图中的Bob想要发送给Alice一个消息,如何能够发送到Alice的手中。第二,多个设备共存在网络中使用同一资源,如何解决信道使用的冲突。如图中Bob->Alice的绿色信息流与其它用户的红色信息流发生了冲突。
所以在局域网中需要解决两大问题
类似于咱们都有一个身份证,连入网络的设备也都有一个全球唯一的号码——**MAC(Medium Access Control) **。这个号码有48位(6字节),其中三个字节由厂商自己分配。而另三个字节是OUI,由IEEE来进行分配。OUI中其中有两个比特分别用于控制是单播还是多播,全局还是本地。
看上面图中的环型网络像不像五个人围着一个餐桌,哈哈。而可能有两个同学想吃同一个东西,就是发生了冲突。
如何解决这种冲突呢?一种虽然没有人道但是高效的方式就是——只有一个餐具(token),只有餐具才能吃东西。而每个人之间轮流来使用这个餐具,每次只有一个人能吃。这样冲突就被完美解决了
令牌环的缺点在于要需要维护这个令牌,在现代局域网市场占比并不多了。
在总线型的网络中(一些网络在物理上是星型,逻辑上则是总线型),设备多点接入的连接到一根总线中。在这个总线中,每个设备可以很容易地检测到信道有没有在被使用</u>。
该方法的重点在于,不管何时何刻,都要监听。
发送前要时刻监听信道,是为了获得发送的权利。当检测到信道是空闲的时间,就可以向信道中发送信息。
为了让接收站点能够清理缓存,会确保帧间最小间隔信道是空闲
在发送中也要边发送边监听信道,来检测冲突。既然发送前信道是空闲的,为什么还需要检测呢?这是因为消息传递存在着时延。设备在发送消息中,如果另一个设备发送了消息,线路中的电压就会发送变化,就认为产生了冲突。
如图, AB两地之间的传播时延为τ。
在上个流程中,可以看到A在发送消息后的最多经过2τ就能知道有没有发生冲突,这个期间就叫做争用期。
在争用期检测到冲突时,会停止发送然后找机会重传。而重传时使用到了截断二进制指数退避算法。其原理为
在发送数据时如果检查到了冲突,除了停止发送还会向信道中发送人工干扰信号,以便让所有用户知道发生了碰撞。
不同于有线网络,无线网络中由于信号会随着距离增加而衰减,很难全局的得知信道有没有被占用。例如图中的C想向B发起通信时,就很难探测到A的影响。这时候就很难使用冲突检测的方式。
如何解决无线网络中的冲突呢?最好的办法就是预约。例如生活中某个饭店好吃特别火爆,常常爆满没有空座位。如何保证我们去的时候有空座位呢?跟别人避开?但是我们根本呢不认识其它人,就更别说知道别人什么时候去吃饭所以这种方法并不可行。那完美的解决方法就是进行预约,只要预约上了就保证我们去到饭店可以吃。
这就是CAMS/CA算法的一个核心概念。
在发送数据前,同样也要检测信道空闲。可以使用的方法有
当检测到信道空闲时,为了确保其他的站高优先级的帧可以发送,等待DIFS(分布协调功能帧间隔)后发送第一帧。
如果目的站接收到第一帧成功之后,等待SIFS(短帧间隔)【为了区分一次会话】,后发送ACK确认信号。
而如果目的站接收失败,发送站没有收到确认帧ACK(由重传计时器控制这段时间),就必须重传此帧,直到收到确认为止,或者经过若干次的重传失败后放弃发送。
在信道从忙态转为空闲时,为了减少减少了发生碰撞的概率,各站需呀执行退避算法。
基于上面的方法,发展出了许多的局域网协议。
在各种局域网协议的角逐中,总线型以太网逐渐发展成快速以太网、吉比特以太网、10吉比特以太网。以极大的优势占领了市场,现在以太网几乎是局域网的代名词。
现存两大标准是DIX Ethernet V2 与IEEE802.3 ,它们两者差异很小,可以在同一物理介质上共存。由于DIX Ethernet V2占比多,所以现在以太网帧基本就是指DIX Ethernet V2。其帧格式如下:
可以看到其与PPP帧的最大区别在于多了地址信息。
注意以太网的服务类型是无连接服务,出错由上层处理。
令牌总线是一种在总线拓扑结构中利用令牌(Token)作为控制节点访问公共传输介质的控制方法。主要用于工业通信
利用令牌(代表发信号的许可)来避免网络中的冲突,1980年代中期IBM在研发,但是在目前局域网中已经不太常见了。
其服务类型是面向连接的。
在光缆上发送数字信号的一组协议,逻辑上是基于令牌。属于带确认的面向连接服务。
为无线局域网下的一种协议标准。随着无线网的快速发展,基于802.11协议后续也在不断补充。和以太网一样,是属于无连接服务(虽然信道预约有ACK,但是后续发送消息后并不再管了)。
出于有关厂商在商业上的激烈竞争, IEEE 802 委员会末能形成一个统一的、“最佳的” 局域网标准,而是被迫制定了几个不同的局域网标准, 如 802.4 令牌总线网、802.5 令牌环 网等。
为了使数据链路层能更好地适应多种局域网标准, IEEE 802 委员会就把局域网的数据链路层拆成两个子层,即逻辑链路控制 LLC (Logical Link Control)子层和媒体接入控制 MAC (Medium Access Control)子层。
由于以太网快速发展,TCP/P体系经常使用的局域网只剩下 DIX Ethernet v2而不是IEEE8023标准中的局域网,因此现在EEE802委员会制定的逻辑链路控制子层LLC(即IEEE8022标准)的作用已经消失了,很多厂商生产的适配器上就仅装有MAC协议而没有LLC协议。
SNAP 包含于LLC,主要用来在 IEEE 802 网络上封装IP 数据包、地址解析协议(ARP)的请求和答复。让上层的IP数据报可以在IEE802网络上发送。
交换机是数据链路层中的一个设施。在上面中,我们提到多个设备接入到局域网中。而交换机的一个功能就是支持两个设备之间的通信,可以根据MAC帧的目的地址进行转发和过滤。在以太网交换机中具有学习功能,可以了解每一个端口的MAC地址,并缓存在MAC地址表中。
在以太网中有一个交换表,可以记住每个接口的MAC地址。且这个交换表可以进行自我学习,其原理如下图:
在局域网中会有一些冗余线路作为备份。但是这会造成回路,导致数据包在回路里一直转动,为了解决这样的问题,STP生成树协议可以在图中找到一条生成树主路(就是图论的内容)。
虚拟局域网是提供给用户的一种服务,可以不局限于地理位置来实现局域网服务。
虚拟局域网通过交换机可以很方便地实现,IEEE802.1Q对虚拟局域网进行标准化。实现虚拟局域网的关键点在于在以太网帧中插入了一个四字节的VLAN标记,用来表示802.1Q帧和所属的VLAN等信息。
如我们在开始介绍的虚电路交换一样,在某些情况下,通过网络建立一条虚拟链路是有用的。实现这类服务的最常用方法称为隧道。
一般来说,隧道是 在高层(或同等层)分组中携带低层数据,例如在IP(高层)中携带以太网(底层)的数据。
到目前为止,构建的全景图如下
本文发布于:2024-02-04 17:16:58,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170712548757718.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |