1

计算机网络-3-3-使用广播信道的数据链路层

 2 years ago
source link: https://segmentfault.com/a/1190000041150448
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用广播信道的数据链路层

广播信道可以进行一对多通信。
局域网技术在计算机网络中占有非常重要的地位。

局域网的数据链路层

局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目有限。局域网主要有如下一些主要优点:

  1. 具有广博功能,从一个站点可以很方便的访问全网。局域网上的主机可共享连接在局域网上的各种硬件资源和软件资源。
  2. 便于系统的扩展和逐渐演变,各设备的位置可以灵活调整和改变。
  3. 提高了系统的可靠性,可用性和生存性。

局域网可以按照网络拓扑进行分类,

image

适配器的作用

计算机与外界局域网的连接是通过通信适配器进行的,网络接口卡又称网卡。适配器与局域网之间的通信是通过电缆或者双绞线以串行传输方式进行,适配器与计算机之间的通信是以并行方式进行通信,因此,适配器的一个重要功能就是进行数据串行传输和并行传输之间的转换,除此之外,适配器还要实现以太网的协议

适配器在接受和发送各种数据帧的时候,不使用计算机的CPU,这时计算机中的CPU可以处理其他任务。当适配器收到有差错的数据帧时,就把这个帧直接丢弃掉而并不通知计算机。当适配器收到正确的帧的时候,它会使用中断来通知计算机,并交付协议栈中的网络层,当计算机要发送IP数据报的时候,就由协议栈把IP数据包向下交给适配器(数据链路层),组装成帧后发送到局域网。如图3-15表示的是适配器的作用。我们需要特别注意的是,计算机的硬件地址就在适配器中的ROM中,而计算机的软件地址IP地址则在计算机的存储器中。

CSMA/CD协议

最早的以太网是许多计算机是连接在一根总线上,总线的特点是:当一个计算机发送数据时,总线上的计算机都能检测到这个数据。这种就是广播通信方式。但我们并不总是要在局域网中进行一对多的广播通信。为了在总线上实现一对一的通信,可以使每一台计算机的适配器拥有与其他计算机都不同的地址。在发送数据帧时,在帧的首部写明接收站的地址:当数据帧中的目的地址与适配器的ROM中存放的地址一致的时候,该适配器才能接收这个数据帧。适配器对不是发送给自己的数据帧就丢弃掉。这样,具有广播特性的总线上就实现了一对一的通信方式。

为了通信方便,以太网采取了一下两种措施:

  1. 采用较为灵活的无连接的工作方式,即不避先建立连接就可以直接发送数据,适配器对发送的数据帧不进行编号,也不要求对方发回确认,这样做可以使的以太网工作非常的简单。而局域网的通信质量会非常的好。因通信质量而产生差错的概率是非常低的。因此,以太网提供的服务是尽最大努力的交付,即不可靠交付。当目的站收到有差错的帧的时候(例如使用CRC循环校验查出有错),就把该帧丢弃掉。其他什么也不做。对有差错的帧是否重传交给上层处理。
    我们知道,总线上只要有一台计算机发送数据,总线的传输资源就会被占用。因此,在同一时间内只允许一台计算机发送数据,否则各个计算机之间就会互相干扰。使得所发送的数据会被破坏。因此,如何协调总线上各计算机的工作就是以太网要解决的一个重大问题。以太网采用的是CSMA/CD(载波监听多点接入/碰撞检测)
  2. 第二,以太网发送的数据都是曼彻斯特编码的信号(下降沿为1(前高后低),上升沿为0(前低后高)),缺点就是它所占用的频带宽度是基带宽度的两倍。

image

下面介绍CSMA/CD协议的要点

多点接入就是说明这是总线型网络,许多计算机以多点接入的方式连接在一根总线上。
载波监听就是用电子技术检测总线上有没有其他计算机在发送数据。其实就是检测信道。不管在发送前,还是发送中,每个站点都必须不停的检测信道。在发送前检测信道是为了获得发送权,如果检测出已经有计算机发送数据了,则自己就暂时不能发送数据。必须要等待信道空闲后才能发送数据,如果在发送数据过程中检测到信道发生了碰撞,则需要执行一系列的算法来处理。
碰撞检测也就是边发送边监听,即适配器边发送数据边检测信道的信号电压变化情况。一边判断自己在发送数据的时候其他站是否也在发送数据,当总线上几个站在同时发送数据的时候,总线上的信号电压变化幅度将会增大(互相叠加)。当适配器检测到信号电压超过一定的门限值时,就认为总线上至少有两个站点在同时发送数据,表明产生了碰撞(冲突)。这时,总线上传输的信号产生了严重的失真,无法从中恢复出有利的信息来。因此,任何一个正在发送数据的站,一旦发现总线上出现了碰撞,其适配器就立即停止发送,免得继续无效的发送。白白的浪费网络资源。然后等待一段随机时间再次发送。

既然每一个站在发送数据之前已经检测到信道为空闲,那么为什么还会出现数据在总线上的碰撞呢?这是因为电磁波在总线上传输数据总是以有限的速率发送,电磁波在1KM的电缆上传播时延为5微妙,设一端到另一端的时间为$\tau$,发送数据的站希望尽早知道是否发生了碰撞。那么,A发送数据后,最持久要经过2$\tau$的时间(一个来回),由于互联网上的任意两个站点之间的而传播时延是不一样的,因此局域网就必须按照最坏的情况设计,假设当前两个站点之间的距离最大,则取该两端的传播时延为所有端到端的传播时延。

image

显然,使用CSMA/CD协议的时候,一个站点不可能同时进行发送和接收数据(但必须边发送边监听)因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行半双工通信。下面是图3-7中一些重要时刻:

在t=0时候,A发送数据,B检测到信道空闲。

在t=$\tau$-$\delta$时,这里($\tau$>$\delta$>0),A发送的数据还没有到达B,由于B检测到信道是空闲的,因此B发送数据。

在经过时间$\delta$/2的时候,即在t=$\tau$-$\delta$/2时候,A发送的数据和B发送的数据发生了碰撞。,但是A和B都不知道发生了碰撞。

在t=$\tau$时,B检测到发生了碰撞,于是就停止发送数据。

在t=2$\tau$-$\delta$时,A也检测到了发生了碰撞。因此也停止继续发送数据。

A和B发送数据均失败,它们都要推迟一段时间再重新发送。由此可见,每一个站在自己发送数据之后的一小段内,存在着遭遇碰撞的可能性,这一小段时间是不确定的。

在图3-17中可以看出,最先发送数据帧的A站,在发送数据帧后至多经过时间2$\tau$就可以知道所发送的数据帧是否遭受到了碰撞,这就是$\delta$=0的情况下。因此以太网的端到端往返时间2$\tau$称之为争用期,它是一个很重要的参数。争用期又称之碰撞窗口,这是因为一个站在发送完数据后,只有通过争用期的考验,即经过争用期这段时间还没检测到碰撞,才能肯定这次发送不会发生碰撞。

以太网使用的是截断二进制指数退避算法来确定碰撞后重传时间。这种算法让发生碰撞的站在停止发生数据后确定重传的时间。不是等待信道空空闲就立即发送数据。而是推迟/退避一个随机时间,具体的退避算法如下:

  1. 协议规定了退避时间为争用期2$\tau$,具体的争用期时间为512微秒,为了方便,也可以直接使用比特作为争用期单位,争用期为512bit,即争用期为发送512比特所需的时间。
  2. 从离散的整数集合[0,1,...,(2^k^-1)]中随机取出一个数,记为r。重传应退后的时间为r倍的争用期。,上面的参数k可以按照下面的公式进行计算:

             k=Min(重传次数,10)
    

可见,当重传次数不超过10时,参数k等于重传次数;但当重传次数超过10时,K就不会增大而一直等于10。

  1. 当重传达16次仍然不能成功,则丢弃该帧,并向上层报告。

例如,在第一次重传时,k=1,随机数r就从{0,1}中选一个数,因此重传的站可选择的重传推迟时间是0或者2$\tau$,在这两个时间中随机选择一个。

同样,若再次发生碰撞,则在第2次重传时,则重传为时k=2,随机数就从正数{0,1,2,3}中随机选一个数。因此重传推迟的时间是在0,2$\tau$,4$\tau$,6$\tau$这几个时间中随即选一个。依次类推。

适配器每次发送一个新的帧,就要执行一次CSMA/CD算法。适配器对过去发生过的碰撞记忆并无记忆功能。因此,当好几个适配器正在执行指数退避算时候,很可能有某一个适配器发送的新帧能够恰好的插入到信道中,得到了发送全,而已经推迟好几次发送的站,有可能很不巧,还要继续执行退避算法,继续等待。

现在考虑另一种情况。某个站点发送了一个很短的帧,但在发送完毕之前并没有检测出碰撞。假定这个帧在继续向前传播到达目的站和别的站发送的帧发送了碰撞,因为目的站将会收到有差错的帧,可是发送站并不知道这个帧发生了碰撞,因为不会重传这个帧,这种情况是我们不希望的。为了避免发生这种情况,以太网规定了一个最短帧长64字节,即512bit,如果要发送的数据非常的少,,那么必须加入一些填充字节,使得帧长度不小于64字节。

强化碰撞的概念:当发送数据的站点一旦发现发生了碰撞时,除了立即停止发送数据外,还要继续发送发送32bit或者48bit的人为干扰信号,以便让所有用户都知道现在已经发生了碰撞。

image

根据以上讨论,总结一下CSMA/CD协议的要点:

  1. 转杯发送:适配器从网络层获得一个分组,加上以太网的首部和尾部组成以太网帧,放入到适配器的缓存中。但在发送前,必须先检测信道
  2. 检测信道:若检测到信道忙,则应不停的检测,一直等待信道转为空闲。若检测到空闲信道,并在96bit时间内信道保持空闲(保证了帧间最小间隔),就发送该帧。

3.在发送过程中仍不停的检测信道,即网络适配器要边发送边监听,这里只有2种可能性:

  • 发送成功,在争用期内一直未检测到碰撞。这个帧肯定能够发送成功,发送完毕后,什么也不做,然后回到(1)。
  • 发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按照规定发送人为干扰信号,等待r倍512比特时间后,返回步骤(2),继续检测信道。但若重传16次仍未成功,则停止重传而向上级报错。

以太网每发送完一个帧,一定要把已发送的数据帧在暂时保存下来,如果在争用期内检测出发生了碰撞,那么还要再推迟一段时间把这个暂时保留的帧重传一次。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK