计算机网络快速入门--3--数据链路层

数据链路层,关心的问题是一个局域网,如何层一个点传到另一个点,对研究该层来说,物理层是透明的。

这里写图片描述

数据链路与链路的区别是除了物理线路之外,还有协议。


封装成帧

封装成帧:就像我们说话一样,一句话有开始也有结束,那么我们在传输一段数据的时候,这时候也需要将其添加开始的标志和结束的标志。

这里写图片描述

如上图所示,有帧首部和帧尾部,帧首部用一个特定的标识,帧尾部也用特殊的标识。其中数据部分长度有MTU最大不能超过1500。
当数据是可以打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符号。这个特殊的帧定界符是键盘不可输入的ASCII码符。
帧首部用SOH表示,十六进制是01,帧尾部用EOT表示,十六进制是04。

透明传输

当数据非ASCII码的时候,这时候就可能在数据中出现跟帧定界符一样的,比如,如果在数据部分中出现了跟EOT一样的数据,那么,就会被将数据中的EOT设置为结束标识。那么EOT后的部分就会丢失。

这里写图片描述

字节填充法
学过编程语言的应该会知道,我们用双引号引用一句话,那么如果再双引号中还有其他双引号,这时应该怎么办?我们的做法是,在双引号前面加一个\来表示这不是定界符。” \”helloword\” “。表示的是”helloword”。
那么在数据部分的标识符前面加上转义标识即可。我们用ESC标识,十六进制为1B,我们称这种方法为字节填充法。

这里写图片描述

差错检测

在数据的传输过程中,有可能会产生差错,1变成0,0变成1,我们将产生差错的比特与总比特的比值称为误码率。它与信噪比有很大关系。
我们为了减少和尽量避免传输过程中产生的差错,我们使用一种叫做循环冗余检验的方法CRC。
如下图所示,这里要传输的数据是101001,我们将其对1101做模2运算,除得的余数即为FCS,我们将这个FCS放到要传输的数据101001后面,那么就变成了101001001,一起传过去,对方收到这个数据之后,也与1101做模2运算,如果余数为0,就证明传过来的数据没有问题。
模2运算。既相同为0,不同为1,比如1010与1101,做模2运算,相加得0111。
细心的读者可能会发现,我们在做模2运算的时候,在后面加了3个0,给出的规律是,如果除数是n位,那么就要在后面加n-1个0。

这里写图片描述

我们使用CRC校验方法得出了FCS这个余数,事实上,生成FCS的方法有很多种,这里我们主要介绍CRC校验方法。
CRC不纠错,遇到有错的数据就丢失,至于这个丢失了的数据产生的丢包的问题,数据链路层并不关心,这个由上层的协议解决,并且,在数据传输的过程中,传输的数据的顺序可能乱了,或者可能传重复了,这个数据链路层都不关心,它只保证无比特传输差错就好。
这里值得留心的是,CRC校验并不能保证100%的无比特传输差错,比如说,如果有好几个比特都发生了错误,这时候,余数也刚好为0。只是这种概率很小。
一般情况下,我们将余数用一个多项式表示,比如说,P(X)=X^3+X^2+1,这表示1101。

PPP协议

PPP协议我们常见到,比如说家里的那种ADSL宽带上网,就是点对点的PPP协议。

这里写图片描述

上面就是我们常用的PPPOE连接,要拨号,从一个点直接与另一个点相连接,可以记账。


PPP帧
PPP帧是面向字节,所有的PPP帧都是字节的整数倍。

这里写图片描述

上图介绍了PPP帧的格式,F表示帧的开始,AC表示地址,协议有几种类型,比如说,我们使用0X0021表示IP数据报,0X8021表示控制数据,事实上,这里的A和C在实际中并没有什么用,因为PPP协议是点对点的协议。根本不需要知道对方的地址就能传给对方。

如果将PPP协议细分,又能分成三种协议,
NCP—专门用来分配IP地址
LCP—用来验证身份
HDLC—就是我们前面说的那些,封装成帧,透明传输,差错检测。

字节填充
PPP协议也需要有帧首部和祯尾部,当然,祯定界符也有可能出现在数据部分,那么这时,我们这不使用转义字符,而是将数据部分的0X7E全部写成0X7D,0X5E,0X7D写成0X7D,0X5D,ASCII码的控制字符前加0X7D,
当数据被对方接收的时候,这时候就逆向解析即可。
0比特填充
当数据PPP帧的数据部分连续出现5个1的时候,就在后面加一个0,比如0011111111001100,那么将其变成00111110111001100,当接收方收到这个数据的时候,如果遇到5个连续的1,那么就要去掉后面的0。因为,如果是5个连续的1,有可能会被误认成F,从而导致帧定界错误。

局域网的数据链路层

局域网具有以下优点。
具有广播功能,从一个站点可以很方便的访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件。另一方面提高系统的可靠性、可用性。

媒体共享技术
频分复用,时分复用,波分复用,码分复用,这个在前面的物理层讲过的。
动态媒体接入控制。
随机接入、受控接入。

我们将局域网下的数据链路层进一步划分,那么可以分成LLC和MAC层

以太网尽最大努力的交付数据,采用无连接的方式。

CSMA/CD协议

多点接入–表示许多主机可以接入到在一根总线上
载波监听–一个站在发送数据之前,会监听有没有人在发送数据,如果有就不发。
碰撞检测–边发送边监听有没有其他主机也在发送数据,如果其他主机也在发送数据就可能会产生碰撞。那么是如何检测到是否发生碰撞呢?事实上,是根据电压是否超过某个门限值来判断是否发生碰撞的。一旦发生碰撞,那么双方都应该停止发送数据,等待一段时间之后,再发送数据。
下面我们来分析,如果以太网在传输过程中碰撞了会怎么办?请看下图

这里写图片描述

那么A最迟检测到与B发生碰撞是在哪个时间呢?

最早检测到即刚准备发送数据就碰撞了,也就是在A点自身发生的碰撞,那么最迟检测到发生碰撞是在B点碰撞,然后碰撞的数据返回A点就能检测到是否发生了碰撞,这时候,这个时间为2τ
也就是说,我们在发生碰撞之后,退避时间是以2t为计算单位。

CSMA/CD协议只能进行半双工通信,这这机制使得以太网的平均通信量远小于最大通信量。

CSMA/CD协议的争用期

上面讲了最迟2τ检测到发生彭碰撞,2τ是51.2us,我们称这个时间为争用期,对于10Mb/s的以太网, 可以发送512个bit,这也就意味着,如果A在向B发送数据的过程中,如果已经发送了512bit没有发生碰撞,那也就证明以后发生的数据都不会发生碰撞。512bit即64字节。

所以CSMA/CD协议就规定,最小发送字节为64字节,小于64字节的帧都被当成了无效帧。如果短了怎么办呢?那么就在后面添0即可。

退避算法

上面讲了争用期,也就是最迟检测到发生碰撞的时间,那么如果发生了碰撞,应该隔多长时间再发送数据呢?



我们知道,最迟检测到发生碰撞的时间为2τ,那么如果A再向B发送数据的时候,可以立即发送,让B等待2τ,也可以A等待2τ,让B立即发送。由于A和B是平等的,我们无法规定,谁应该先发送,谁应该后发送,那么就产生了一种随机的算法,我们称退避算法。


退避算法是这么做的,退避时间取q*2τ,重点是这个q的取值,q=random[0,1,…,(2^k-1)],这里的k应该取值为   MIN[重传次数,10],重传次数指的是,发生的碰撞次数,如果第一次发生碰撞,那么q就在0-1取一个整数值,然后等待0*2τ或者1*2τ的时间,如果再次发生了碰撞,就放大k的值。

集线器

集线器是以太网早期使用的一种设备,现在比较少见了,看这个图我们就应该能明白集线器的原理了。

这里写图片描述

使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是CSMA/CD协议,并共享逻辑上的总线。
集线器就向一个多接口转发器,本身没有识别功能,它只是单纯的负责转发。也就是说集线器工作在物理层。

以太网的信道利用率

一个帧从开始发送到发送成功,前面经过若干次碰撞之后得到的时间为n*2t,假设发送成功的时间为T0(数据长度/发送速率),当发送完最后一个比特传送完成之后,还需要经过t的时候才能到达接收点。

如果向让信道利用率越大,那么t与T的比值就应该越小,a=t/T,当a趋向于0的时候证明以太网的信道利用率越高,我们可以尝试的想象它所代表的意思,当T一定的时候,t越小,那么a就越小,也就是说T一出门就能传送到目的地。这也就意味着,我们要尽量让T大一些,而t小一些,而T取决于帧的大小,t取决于两个站点的距离,也就是说,我们要尽量增大帧的长度,减小两个站之间的距离。

这时候,我们可以得出以太网的极限信道利用率,Smax = T0/(T0+t)=1/(a+1),也就是说,这种情况,没有产生任何的碰撞。

MAC地址

如此耳熟的MAC地址,究竟是什么呢?它实际上是一种物理地址,也可以称为硬件地址,在局域网中,我们的一台主机发送一个数据出去,是发送给了该局域网中所有的主机,而数据中镶嵌了目的的mac地址,这时候,收到该数据的计算机就与自己的MAC地址进行比较,如果数据中的目的地址与自身的地址一样,那就选择接收,否则就丢弃。

这个MAC地址通常情况下存储在网卡上,当网卡被生产出来的时候,上面就有了世界上的一个独一无二的MAC地址,这个地址的前24位代表的是厂商,后24为由厂商自己指定,当然这个地址不能重复。


虽然我们计算机在通信的时候一般使用的是网卡上面的MAC地址,但是,如果我们想不适用这个MAC地址而不更改网卡也是有办法了,我们可以查看自己主机的MAC地址是多少,这个方法在DOS下只需要一个命令,即ipconfig /all就能看到本身的MAC地址,在DOS上显示的是物理地址。

当然,你也可以根据需要,更改计算机在通信的时候选用其他MAC地址,当然如果一旦在同一个局域网内,有两个相同的MAC地址,就会发生冲突,导致不能正常上网。我们可以在网络配适器中,右键本地连接,属性,然后配置,再点高级,再点网络地址,根据格式修改即可,这个格式可以参考dos下的ipconfig /all查到的格式。

MAC帧

我们前面了解了PPP的帧,那么MAC帧又长什么样呢?

这里写图片描述

细心的同学应该会发现,除了MAC帧本身以外,在传播的过程中,在前面还加了8个字节,那么这个8个字节是用来干嘛的呢?事实上,一个站在刚接收到MAC帧的时候,由于无法与比特流达成同步,因此MAC帧的最前面的若干位就无法接收,从而导致MAC帧成为一个无效的帧,为了避免这种情况,我们在MAC帧前面加上7个字节的同步码,再加上一个帧的开始定界符,这个符号的前6位的作用于同步码一样,都是010101,而当出现11的时候,表达帧的开始。

目的地址和源地址即为目的MAC地址与源MAC地址,那么类型是什么呢?这个类型代表了数据部分是什么,也就是说,数据部分可以是其他控制协议,也可以是IP数据报,FCS可以通过CRC循环校验得出。

我们知道,局域网内最小bit长度不能小于512bit,也就是64个字节,那么从MAC帧来看,目的MAC地址源MAC地址类型FCS等占用了18个字节,数据部分最小需要46个字节,当然最大也不能超过1500个字节。

细心的同学应该发现了MAC帧没有结束标示,那么,既然没有结束标识,我们的配适器是怎么知道帧结束了呢?由于以太网用的曼彻斯特编码,1上跳,0下跳,也就是说,只有在接收帧的时候,才有跳变,如果没有跳变,就证明接收完了。也就是帧结束了,另外,有人会问要是两个帧刚好连着发怎么办?因为两个帧的最小发送间隔为0.96微秒,所以就不会两个帧连续而无法识别出结尾的问题。

扩展的以太网

早期的扩展以太网

早起的以太网,如果要讲两个单独的以太网向量,是通过一个主干集线器将它们相连的,由于集线器没有任何过滤功能,它只是单纯的负责转发,所以,这种机制将一个一个的小的冲突域变成了一个更大的冲突域,从而导致网络传播效率更低了。

网桥

为了解决上面的冲突域变大的问题,就出现了一种叫做网桥的设备。它具有过滤功能,能向指定的接口发送数据。

这里写图片描述

比如说,如果A要想B发送数据,数据会发送到网桥,网桥知道B在接口1这边,所以就不会转发到接口2那边去了,这一点是跟集线器最大的不同。

能自主学习的网桥

刚刚说了,如果A要向B发送数据,就不会发送到接口2去,那么这是如何实现的呢?
当网桥刚刚装上的时候,网桥也不知道接口1上面有ABC三台电脑,当然也不知道接口2上面有DEF三台电脑,当A向B或者其他主机发送数据的时候,这时候,这个数据会传送到接口1,那么这时候,网桥就将接口1能够收到A的数据记录下来,也就是说,如果以后有谁想要向A发送数据,那么就像接口1转发,当然如果本身是接口1发过来的,就不转发了。
这样第一次记录了A在接口1,那么只要B发了数据出去,就也记录了B在接口1,这时候网桥知道B也在接口1,所以就不会发送到接口2去了,当然第一次在不知道B在接口的情况下,它也会将数据发送到接口2去,一旦确认下来B在接口1,那么就不会转发到其他接口去了。
同样的,如果A想给D,E,F中的一台主机发送数据的时候,A的数据会发送个到网桥,那么如果接口D,E,F给网桥发送过数据,那么就直接转发到接口2,然后数据就能到达DEF,而不会传给接口3或者接口4(这里没有画出来)

这样看来,使用网桥,能提高网络资源的利用率,减少碰撞。同时还提高了数据的安全性能和可靠性。为什么会提高安全性呢?早期的以太网,会将数据转发到所有的主机,那么这时候,如果其他主机上面装了抓包工具,那么数据就会被偷窃到, 而这里,如果再BC上没有人装抓包工具,那么在自主学习之后,数据是不会向其他接口乱发数据的。(后面再讲如何抓包)

网桥的缺点

网桥也有一些缺点
一方面,网桥在转发之前,需要先查找转发表,这就需要一定的时间,而且,在转发之前,需要执行CSMA/CD算法,即发生了碰撞要退避,都需要一定的时间
另一方面,如上图,如果A在向D发送数据,而B也向D发送数据的时候,这时候要等A先发完,B的可以放到网桥的缓存中中,等A的先发完,再发B的数据。而当用户过多的时候,缓存会越来越大,可能还会不够。时延也更大。

交换机

当网桥接口很多的时候,这时候,计算机就不会汇总到一根线路再接过来了,而是直接接到网桥上,我们这时候不称它为网桥,而是称为交换机,这时候,如果A想D发送数据的时候,更加安全了,因为数据不会再发送到其他接口去了,因为上面接的是主机,这个数据直接发送到了目的主机。

透明网桥

什么是透明网桥呢?我们根据上面那图,可以想象,A在向D发送数据的时候,D根本就不知道中间经过了一个网桥,对于AD来说,等于就是直通的,而网桥是透明的。

这里写图片描述

这里再来看多个网桥相连,它们是如何通过自学习建立转发表的。
假设A想E发送数据,假设E先前没有发送过数据,这时候,A的数据到达网桥1,网桥A在接口1,网桥1不知道E在哪个接口,这时候,他就将数据转发给其他所有接口,这里只要接口2,数据会传送到网桥2的接口1,这时候,网桥2就知道,我以后要发送给A的数据,都应该向接口1那边传,由于E在之前没有发送任何数据出去,这时候,网桥2也会把数据转发到除了接口1的其他所有接口,即接口2。

假设A一开始发送的不是给E的,而是给B的,那么网桥1和网桥2会不会在转发表中添加A的接口呢?事实上,同样的回建立好接口,当A向B发送数据的时候,网桥1由于不知道和数据要传给哪个接口,那么就传给其他接口,这时候,数据就到了接口2,接口2就传到了网桥2的接口1,这时候网桥2也不知道数据传给谁的,这时候,这个数据就会通过网桥2的接口传送出去。

转发的生成树算法

为了防止数据在以太网直接绕圈圈,网桥还使用了一种生成树算法

这里写图片描述

先选一个根交换机,怎么根交换机怎么选呢?在传播数据的时候,根据距离的远近有一个优先级,距离近的优先,当优先级一样的时候mac地址最小的称为根交换机

这里写图片描述

这时候,在向根转发数据的时候,走更近的路线,这就形成了一张拓扑图,从而不会绕圈子。

LAN和VLAN

所谓的LAN就是物理局域网,而VLAN是虚拟局域网,也可以称它为逻辑局域网

这里写图片描述

如上图,第一层的三台电脑组成了一个物理局域网,但是他们属于不同的部门,但是这在一定程度上造成的数据的不安全,如果只想让各部门内部单独共享数据,那么就需要虚拟局域网,让各部门单独在逻辑上组成一个局域网

虚拟局域网的实现办法

这里写图片描述


这里写图片描述

这里有财务部和销售部两个部门,他们接在不同的交换机上面,我们现在需要将财务部划分成一个vlan,销售部划分在另一个vlan,就相当于将两者隔开,然后上下接上了线,(实际上,他们是通过最右边的总线转发数据的。由于不知道是哪一个vlan的数据,所以在转发的时候要在数据前面加上一个标记,这就是在第二章讲过的,统计时分复用)
这里写图片描述


两个交换机通过干道链路进行通信,如果vlan广播数据的时候,它不会发到vlan2,直接发到了干到链路(交换机右边那个孔与第二个交换机右边那个孔相连接的链路),当第二个交换机在干道链路收到数据的时候,根据数据的标记转发到自己交换机中具体的vlan接口中。

交换机上实现安全的接入

交换机可以与端口和MAC地址进行绑定
根据不同的交换机,可以在dos下进行绑定,需要一些命令,这个大家自行百度即可。

猜你喜欢

转载自blog.csdn.net/qq_25956141/article/details/80025867