文章目录
- 一、数据链路层功能概述
- 二、封装成帧和透明传输
- 三、差错控制(检错编码)
- 四、差错控制(纠错编码)
- 五、流量控制与可靠传输机制
- 六、停止-等待协议
- 七、后退N帧协议(GBN)
- 八、选择重传协议(SR)
- 九、信道划分介质访问控制
- 十、ALOHA协议
- 十一、CSMA协议
- 十二、CSMA/CD协议
- 十三、CSMA/CA协议
- 十四、轮询访问介质控制
- 十五、局域网基本概念和体系结构
- 十六、以太网
- 十七、无线局域网
- 十八、VLAN基本概念与基本原理
- 十九、广域网及相关协议
- 二十、链路层设备
一、数据链路层功能概述
封装成帧:其实就是帮我们从物理层过渡到链路层,我们物理层传输的是一个一个比特,我们在链路层就是要把比特封装成帧,就是把几个比特放到一个帧里面。这就是数据链路层的一个传输单位,或者说传输单元
透明传输:不管我们封装好的帧里面的比特是怎么样的一个组合,都可以把它顺利的传输过去,所以表现的就像链路层看不见它传输的帧里面到底是什么样的比特序列。就像是"透明"一样。
差错控制:我们的链路层在传输的过程中,可能会发生一些差错,这些差错主要是由于噪声引起的,那导致的结果就是位错和帧错。
位错------比特发生了错误(即1,0),解决办法就是使用检错编码或者纠错编码,检错编码顾名思义就是能检查出来它有问题,纠错编码就是指不仅能检查出有问题,还能纠正错误。
对于检错编码,如果发现错了,解决办法就是后面重传一个帧
帧错------比如帧丢了,帧重复,帧乱序。这样的错误我们可以通过定时器和编号机制来检查它是否出错。
如果发现错了,解决办法还是一样,后面重新传输一个帧。
流量控制:它其实就是在控制发送方的流量。比如发送一个帧,我们需要掌握一定的速度,这样才能避免帧丢失或者帧收不到的情况。
可靠传输:这里与其说是链路层的一个功能,不如说它是链路层的一个特点。
为了实现流量控制和可靠传输,我们引入了一个滑动窗口机制,这个我们后面会具体讲。
两种链路/信道:也可以说成两种通信方式,分为"点对点(广域网)"和"广播(局域网)"两种通信方式
对于广播信道来说,我们需要进行介质访问控制。也就是说,如果我们大家处在一个局域网里面,我要给你发送信息,怎么样才能够避免别人要发的信息和我这个信息发生碰撞,从而导致你收不到。
为了解决上述问题,就需要介质访问控制,让所有人可以有序的使用这个广播信道,才能保证信息的不丢失,或者其他问题。
介质访问控制有两种:静态划分信道、动态划分信道
链路层设备:交换机、网桥
无确认无连接服务:通常用于实时通信,或者是误码率比较低的信道。也就是原主机在发送数据的时候,不用事先和目的主机建立好一个链路的连接。而且目的主机在收到数据帧的时候,也不需要返回确认的结果。如果帧丢失了,直接交给上一层处理。这种方式其实是不负责任的,但是为了实时通信,更快的通信,就会有这种服务。
有确认无连接服务:这种也是事先不用建立连接,但是目的主机在收到数据的时候必须返回一个确认,如果原主机发现在规定时间内没有收到这个确认信号,就需要把没有收到确认的帧再重新传输一次。这样就可以提高数据链路层的可靠性了。这种服务适合误码率相对较高的信道。
有确认面向连接服务:这种就是最可靠的,事先要建立好连接,同时接收端的机器人收到这个帧之后需要返回一个确认帧。
ps:有连接一定有确认
二、封装成帧和透明传输
透明传输在组帧上的一些应用如下:
1.字符计数法:比较简单,但也容易出问题。它的方法就是用帧首部的一个计数字段,也就是第一个字节来标明帧内字符数。
这种方法的缺点就是鸡蛋在一个篮子了,假如我第1帧第一个字节出错了,后面就全错了。
2.字符填充法:
SOH就是帧首部的第一个标志开始的字节,EOT是帧尾部的结束字节。
有了这两个字节,我们接收端就可以判断从哪里接收帧,从哪里接收结束。
但是这种情况只出现在传送的帧是文本文件组成的时候,因为文本文件是指我们从键盘上输入这样一个文件,我们知道,键盘上的每一个键都对于一个ASCII码,键盘上的ASCII码和SOH还有EOT这8比特是不会有交集的。所以无论我们在键盘上敲什么,放到数据里面,都可以放在帧里面传输过去。就可以实现透明传输。
如果我们要传的是非ASCII码的文本文件组成,比如说二进制代码的程序或者图像,这样数据部分里面可能就会出现两个定界符SOH和EOT所对应的比特组合了。假如我们数据部分有一个和EOT一样对应的比特组合,如下图,那接收端就可能会提前认为帧结束了。
因此需要使用字符填充法来实现透明传输,也就是通过一种方法使接收端在看到这个和EOT结束字符一样的比特组合时,也会把它看作正常数据接收,直到遇到真正的帧结尾。
字符填充法的具体实现过程:
现在有如下的原始数据,要进行字符填充
字符填充的过程就是在控制信息的字符前加一个转义字符。加上这个字符就告诉了接收端,你不用管我后面跟着的东西是什么了,你正常接收,直到遇到真正的结束字符。
到了接收端这边,接收端会先扫描到SOH然后开始接收帧,接下来看到ESC,它就知道是转义字符,为了实现透明传输,再把这个ESC给去掉,剩下的就是真实数据了。
字符填充法简言之:在发送端填充转义字符,在接收端去掉转义字符。
3.零比特填充法:这种方法允许数据帧中包含任意个数的比特。
如下图,下面是一个帧,它和字符填充法的区别在于:零比特填充法的首部和尾部的标志符是一样的,都是0111 1110
那如果在数据部分,也出现了和标志符一样的组合怎么办?
归纳起来就是四个字:5110,就是遇到5个1,添加1个0
4.违规编码法:它其实是在物理层比特编码的时候实现透明传输的一种方法。
由于曼彻斯特编码都是前低后高,或者前高后低。我们这把高定义为1,低定义为0。在曼彻斯特编码中,每一个码元(比特)对应的电平要么是10要么是01
不可能有11和00两种,那我们可以把11和00这两种不可能的电平来标志起始和终止。
三、差错控制(检错编码)
奇校验码:在n-1位信息元之前加上1位校验元,使得1的个数是奇数
偶校验码:在n-1位信息元之前加上1位校验元,使得1的个数是偶数
举个例子:
因为是奇校验,所以我们各个选项总共1的个数应该是奇数个
A有4个1,肯定错
B有4个1,肯定错
C有4个1,肯定错
D有5个1,不一定对
所以选D
CRC循环冗余码:
对于CRC编码的方式,我们只需要3步就可以解决,
第一步:准备待传的有效数据,而待发送的数据是一系列比特的组合,每个小的组合都是等长的,假设是d位。每段都是1个组
第二步:对于每一个组,都加上冗余码,再构成一个数据链路层的传输单元------帧
d位后加的r位帧检验序列(冗余码)是如何确定的?首先我们要引入一个规则。
规则就是双方商定的一个除数,也叫做生成多项式,是r+1位的。
一般题中给的生成多项式就是1101这种
但是有时候也会给你x^3^ +x^2^ + 1,
这种你先把各阶补齐是x^3^ +x^2^ + 0*x^1^ +1,然后系数提出来,是1101
有时候对于这个多项式,会提到一个"阶"的概念,阶就是最高位的幂,比如x^3^ +x^2^ + 1的阶就是3
生成多项式题目会具体给出来。
拿到了除数,也拿到了要发送的d位数据,怎么求r位的FCS?
首先,我们要在发送的d位数据后,加上r位的0,这个r位就是生成多项式位数-1。然后再用FCS去除生成多项式
注意,这里的除法不是十进制的除法,是模二除法。
模二除法就是加法不进位,减法不退位。就相当于异或(同0异1)
第三步:接收方接收到了这样一个d加r位的数据,它是怎么检验的呢?
我们拿d+r位的数据,对约定好的生成多项式进行模二除看它是否余数为0
举个例子:
四、差错控制(纠错编码)
海明码:
首先是确定校验码的位数r,然后把校验码插入到数据位数中
ps:奇偶校验码和CRC循环冗余码是在最低位附加上一位或者几位校验码,但是海明码需要根据一定规则在数据位上安插上这个校验码。
再然后就是要求出校验码的值,最后就是检错和纠错。
海明距离(也称海明距、码距):
如果码距为1,传输过程中有1位出错,比如000变成了001,而000也是编码系统中的有效编码,你是不知道有没有出错的。
如果码距为2,传输过程中有1位出错,比如0000变成了0001,这样我们是可以检查出有错误的。因为码距是2啊,你0000和0001只有1位不同,码距变成1了。
码距为2这里能检错,但是不能纠错,因为我接收方收到是0001,我知道是错误的,但我不知道原先是哪位出错了,可能原先数据是1001,也可能是0000等等
以此类推,如果码距为3,我们可以检查出1位错,也可以检查出2位错。
而对于纠错,如果码距为3的编码中,该编码系统中任何两个编码只发生一位错,最后结果肯定是不一样的,那么接收方也就不会迷惑这个编码是由谁出错了。所以码距为3,可以纠正1位错,但是无法纠错2位错。
海明码要检查d位错,需要码距d+1。
海明码要纠正d位错,需要码距2d+1。
ps:上述具体推倒公式不用深挖,记住会用即可。
纠错法一:你画三个圆,把校验码序号写到圆的外侧部分。
然后把外侧的数字做加法,写到两圆交替处:
1+2=3
1+4=5
2+4=6
最后空心处是三圆重合处,写上1+2+4=7
我们知道4567和1357是有有错的,重合部分是5和7。那可以知道是5和7是有错的。但是别忘了还有一个条件2367是没有错的,所以7没错,最后结论就是5出错了。
纠错法二:
五、流量控制与可靠传输机制
传输层 流量控制:两个主机之间
链路层流量控制:两个相邻结点之间
六、停止-等待协议
T~D~:发送方发送一个数据帧的发送时延
RTT:往返时延
T~A~:确认帧的发送时延
七、后退N帧协议(GBN)
停等协议:发送窗口等于接收窗口,都是1
GBN后退N帧协议:发送窗口n个,接收窗口1个
SR选择重传协议:发送窗口和接收窗口都可以为n个
GBN协议工作流程:
首先发送方发生0号帧,把0号帧放到链路上,同时发送方还要copy一个0号帧副本,我们这里用橙色表示:
0号帧传输过程中,1号帧也可以发送,因为只要在发送窗口里有这个帧,就可以发送
发着发着,0号帧到达了接收方,接收方收到0号帧之后返回一个确认帧
接收方接收到这个ACK 0的确认帧就知道0号帧接收方已经正确接收了。
接下来接收方和发送窗口都会进行一个窗口前移的任务。
接收方收到1个帧就可以前移1位,发送方收到1个确认帧也可以前移一位。
假如现在发送方123号帧全部发出来,接收方不用逐一去确认,他可以直接确认3号帧。
返回一个ACK3就表示3号帧及前面的全部正确接收,然后发送方把滑动窗口移动3个格子。
首先要算一下甲把发送窗口的数据全部发送出去要多久,也就是甲的发送延迟
窗口尺寸 * 帧长=1000 * 1000 * 8b
(这里把帧长换成比特)
接下来再除甲的发送速率,因为我们这里没有给发送速率,只给了信道带宽,我们就可以近似的来算。100Mb/s=100 * 10^6^ b/s
那么甲要把自己窗口的数据全部发送出去要80ms
而甲在发送了第一个帧之后,什么时候才能收到该帧的确认呢?
也就是传播延迟+甲发送第一个帧的发送时长=2 * 50ms+ (1000 * 8b)/(100 * 10^6^)=100.08ms
所以甲发送完自己窗口的所有数据之后此时为80ms,还没有收到第一个帧的确认,因为还没有到100.08ms。然后到收到确认帧之后,甲才能往前移动。
接下来就是和前面一样的循环步骤了。
所以最大平均数据传输速率为1000 * 1000 * 8b /100.08ms=80mb/s
答案选c
八、选择重传协议(SR)
我们前面学的GBN协议的最大特点就是累计确认,也就是说它不用每个帧都需要回复一个确认。比如回复一个3号帧的确认,就表示3号帧及其以前的都确认了。
但是于此带来了一个问题,有了累计确认,如果出现问题就会有批量重传的情况。
比如现在传12345帧,只有3帧丢失了。那么GBN协议就算收到45帧它也不会要,它会让发送方从3帧重新传。这样就会有问题了,我45帧有没有问题,你干嘛要我重传呢?
对于上述问题,SR协议进行了进一步的优化。
发送方和接收方的数据有如下的几类
这里接收方的6号帧已经确认会先缓存一下返回一个ACK6,但是这时候不移动滑动窗口,等收到5号帧的时候,然后接收方的滑动窗口往后移动两格
(一开始滑动窗口在5号那里,6号已经就绪,只要5号到位,就可以直接移动两格,也就是56号均到位)
九、信道划分介质访问控制
两个节点的通信可能被其他结点的通信而干扰,链路层就需要采取一定的措施来使两个节点之间的通信互不干扰,这种措施就叫做介质访问控制。
静态划分信道:
还没有开始通信前,先把信道划分一下。或者先和所有人规定一下怎么通信。
动态划分信道:
在通信过程中遇到冲突,遇到冲突时再及时解决。
这小节主要讲静态划分信道,动态划分信道后面会分开详细讲
假设线路传输速率是8000b/s
那么对应时分多路复用的每一个用户(假设一共4个用户),一个人最高只有2000b/s
而STDM假设1s线路最高传输速率是8000b/s,那每个人最高也是8000b/s
因为这里是谁先来,谁先上。一个人完全可以占用一个STDM帧,而不需要想TDM那样发一个要再等别人。
十、ALOHA协议
纯ALOHA协议:不监听信道,不按时间槽发送,随机重发。想发就发
纯ALOHA协议就是想发就发。
如上图所示,纯ALOHA协议是非常随机的,每一个站点(主机),他们都是在任何一个时间都可以发送数据帧的。
上图的T0规定的是一个数据帧的长度,我们通常说一个帧的长度应该用比特来衡量,但是这里的T0是指一个数据帧发送时间。
这里的发送时间既包括了传输时间,也包括了传播时间。也就是一个帧从发送开始到发送成功为止,这样一段时间叫做T0,那我们现在假设每一个站点,他所发送的T0都是相同的。
对于站点1,它在第一时间发送了1号数据帧,在T0时间内没有别的数据帧和他发生冲突,那它就发送成功了
对于站点2,它在某个时间段发送数据帧,但是有一段与站点N-1发送的数据帧冲突了。
我们知道它们在同一时间内发送数据有一个冲突现象,但是对于这两个站点来说它们是不清楚的,因为它并没有在这个发送数据的时候进行一个监听,所以他不知道有没有发送冲突。
如何才能检测冲突呢?就是等我们的站点把数据帧发送完毕之后,接收方会收到一个发生冲突的错误帧,那因此接收方就会返回一个NAK否定确认帧,或者说干脆不返回一个确认帧。这样发送方经过一个时间,也就是我们之前讲的类似超时时间。如果经过一个超时时间还没有接收确认帧,就知道这个帧在发送路上冲突了,那样就会重发。
时隙ALOHA协议:控制想发就发的随意性
因为纯ALOHA协议过于随性,导致我们的数据帧发送的成功率非常低,那这里我们形容数据帧发送的成功率用吞吐量来形容。
我们把时间分成若干个相同的时间片,这个时间片就对应我们讲的一个时间槽T0
我们每一个站点在发送帧的时候,只能在一个时间片或者时间槽的开始发送。如果现在某站点想发送,但是还没到时间片开始,它就不能发送,必须等到时间片开始。
第一种情况,这个站点发送的帧很顺利,很成功,那么发送过程中就是一个T0时间内没有其他的站点同时发送消息,也就是没有发送冲突。那这个帧就算是成功发送了。
第二种情况,如果发生碰撞这个节点就会在时隙结束之后,也就是一个T0之后,发送方发现产生了碰撞(接收方没给他返回一个确认帧)。那遇到冲突之后,我们就需要进行一个超时重传,,重传还是要在一个时隙(时间片)开始的时候进行重传。
十一、CSMA协议
十二、CSMA/CD协议
十三、CSMA/CA协议
十四、轮询访问介质控制
等待延迟:比如第四个主机要发送数据,前3个主机都不需要发送,但是第四个主机仍然需要等前三个轮询结束才可以。
单点故障:最上面的节点故障了,没法进行轮询,那么下面四个节点一个也发送不了数据
上图是令牌传递协议,它常用的是一种网络是令牌环网,在逻辑上是环形结构,在物理上是星型的。
上图令牌环网中有4个ABCD主机,还有一个TCU转发器,它其实是我们在传递数据帧时的一个传递接口,它可以传递所有经过的帧,而且为接入站发送和接收数据提供一个接口,其实就是一个转发的作用。
而令牌传递协议,顾名思义要有一个令牌,这个令牌是一个特殊格式的MAC控制帧,不包含任何信息。就是由几个比特构成的短小的数据帧,它可以控制信道的使用,确保同一时刻只有一个结点独占信道。
可以看出,这个令牌传递协议结合了随机访问控制协议中的独占带宽的优点,也结合了我们信道划分MAC协议的一个优点,就是不会发生碰撞,不会发生冲突,主要是因为每一次只有一个主机,它会掌握这个令牌,只要它掌握这个令牌,其他人就不能发送数据。
十五、局域网基本概念和体系结构
目前总线型是实战最好的,也是最常用的
记住上面划红线的即可
十六、以太网
无差错接收:比如你要发送的是1010,那我接收也要按照1010接收,如果我发现通过一些差错检测的方法,比如奇偶校验的方法发现你这个帧出错了,那这个帧就丢弃
可靠传输:只要你发的帧我都要接收,不管是帧丢失、重复都是可靠传输需要解决的问题,这些可靠传输是由传输层来实现的,而这种无差错接收是由以太网实现的
适配器:它是把计算机和外界的有线局域网进行一个连接,比如我们上网通信,就需要这个关键的通信适配器 ,通信适配器通常是上图这样的板子,它是在主机箱内插入的一块网络接口板 。它也称为网络接口卡,也就是我们常说的网卡,但是由于现在计算机主板上都已经嵌入了适配器,所以我们就不会再单独的去使用网卡了,因为已经嵌入好了。
适配器上会装有处理器和存储器两种主要结构,其中存储器又包括RAM和ROM
ps:RAM是随机存储器,ROM是只读的,了解即可
ROM上会有计算机硬件地址,也就是MAC地址,就是我们在数据链路层标志每一个主机,每一个设备的唯一标识符。
在局域网中,硬件地址又称为物理地址或者MAC地址,实际上就是一个标识符,就像我们身份证一样,每人都有一个专属身份证,而且这个身份证是全球唯一的,通过这个身份证就可以找到你这个人。在我们计算机网络中,通过一个给定的MAC地址就可以确定某个设备。
MAC地址是每个适配器都有一个全球唯一的48位二进制地址,前24位代表厂家,后24位厂家自己指定。我们的电脑在生活中地理位置是经常变的,但是它的物理地址,也就是MAC地址是没有变的,因为网卡还是那个网卡。
我们之前说过,以太网有两个标准,自然对应的MAC帧就有两个形式。
我们现在最常用的MAC帧主要是V2这种格式。
首先是网络层的ip数据报,到链路层这块就需要对数据报进行一个封装。而封装我们之前讲过,对链路层的封装是要加头加尾的。加头就是目的地址、源地址、类型,加尾就是FCS。
为了能够使得接收端可以迅速的实现位的同步,也就是让发送方和接收方能保持一个发送和接收的同步,我们就需要把这个从MAC层往物理层传递的帧前面加一个8字节的前导码。
前导码:前7个字节是同步码,是由1010组成的。最后1个字节前面都是1010,后面两位是11
10是为了让发送方和接收方能进行一个时钟的同步,后面两个11是发送方告诉接收方现在可以开始准备接受MAC帧。
ps:前导码病不是以太网MAC帧的一部分
下面来看以太网MAC帧包括哪些部分:
目的地址:接收方的地址,有三种情况:
单播地址,指的是有一个专有的MAC地址,假如说我们要发送给一个固定的主机,那这个主机的MAC地址就是我们的目的地址。
广播地址,指的是全1的(全F的),这样的地址就会发送给所有的主机,那这些所有的主机看到这样的地址全都会接收下来。
多播地址,这个了解即可。
源地址:发送方的地址
类型:指明我们上面的网络层使用的是什么协议,以便我们把收到的MAC帧数据上交给上一层的协议。
数据:这个是最关键的部分了,数据部分的长度是可变的,46~1500字节,
我们在链路层这章最开始讲过一个mtu,就是链路层最大的数据传送单元1500字节,
而46是源于我们前面讲的CSMA/CD协议提到的最小帧长,以太网最小帧长是64字节,可以看到当前的MAC帧已经有目的地址、源地址、类型以及后面的FCS,它们6+6+2+4总共是18字节,64-18=46字节。为了保证MAC帧是有效的帧,就可以使用CSMA/CD协议,所以我们要保证数据的字节部分数据长度最小是46字节。
FCS:就是之前讲的CRC循环冗余校验的一个4字节的帧检验序列FCS。可能有同学有疑问,数据链路层加头加尾,既然头部有一个帧开始定界符,为什么没有帧结束定界符?
原因是我们以太网使用的编码形式是曼彻斯特编码,曼彻斯特编码的一个特点就是在每一个比特位都有2个码元,如下图。所以我们在发送数据的时候可以感受到电压的变化,而不发数据就感受不到电压的变化了,那我们就可以认为以太网帧是结束了。
那我们在结束位置前4个字节,就可以确定数据结束的位置了。并且每一个发送帧之间都会有一个最小间隔,也就是每一个发送帧之间会有一个最小间隔,也就是每一个帧并不是紧挨着发送的,发送完一个帧会稍微停一会然后去发送新的帧,因此就会有一个空白的时间。这个空白的时间我们检测不到电压的变化,就说明这个地方没有发送数据了。
十七、无线局域网
802.11是无线局网的通用标准,是由IEEE所定义的无线网络通信的一个标准,因此802.11它所规定的全部内容全都是围绕无线局域网的。由上图可以看出802.11下属还有很多个小标准,都是在802.11的基础上进行额外的扩充及完善。
无线局域网覆盖范围通常是几千米,wifi可能就是一间屋子这样小的空间。
wifi就是802.11b和802.11g两个标准,注意区别无线局域网。
重点记忆MAC帧头
举个例子:
现在有两台主机A和B,它们之间要进行通信。
A附近有基站AP1,B附近有基站AP2,现在A要给B通信,A会先把它的信息通过电磁波发给AP1,AP1再发给AP2,最后由AP2发给B。
ps:AP是指无线接入点,也称为基站,这个接入点顾名思义就是我们的设备,或者我们主机想要访问的网络。
另外,全国是有很多基站的,我们手机在运动过程中,它在基站中的数据也是会更新的。就像我们坐高铁,你到另一个城市,会收到另一个城市的信息。这是因为你刚到这个城市,你离这个城市的基站比较近了,所以你的手机号会被注册到这个基站中去。
目的地址、源地址:这个很容易理解,就是实际通信中两个设备的物理地址。结合下图来说就是目的地址是B的MAC地址,源地址SA就是A的MAC地址。因为我们这里讨论的都是链路层的MAC帧,MAC帧里面肯定都是MAC地址。
发送端、接收端:发送端如上图的AP1,接收端如上图的AP2。
十八、VLAN基本概念与基本原理
1.缺乏流量隔离:指的是即使我们把组流量局域化到一个单一的交换机中,广播流量仍然会跨越整个机构网络,这种情况我们都是用交换机进行链接的。如果某个主机发送广播帧,那所有的网络中的主机都可以收到。(ARP、RIP、DHCP协议都会用到广播的形式,所以在这种协议的应用下,我们常会遇到泛洪的现象)
2.管理用户不便:比如A工作组的某主机想去B工作组,就需要改变物理布线。但我们实际肯定是希望改动越小越好,如果只需要在软件身上改动是最好的,所以这是第二个弊端。
3.路由器成本较高:如果一个大的局域网中有很多组,我们希望给它们隔离开来,就需要有多个路由器来解决,那路由器的成本就上去了。
所以就有了下面要说的VLAN,VLAN又称为虚拟局域网是一种将局域网内设备划分成与物理位置无关的逻辑组的技术
VLAN本质还是一个局域网,只不过我们对这个交换机进行了简单的处理,让他能够有更高的能力将局域网内设备划分成与物理位置无关的逻辑组的技术。这些逻辑组有共同的需求,每一个VLAN是一个单独的广播域或者说不同的子网。
相当于我们对交换机进行了VLAN划分,之后他连接的几个主机就可以处在不同的VLAN中,如下图一个交换机有一个VLAN1和VLAN2
比如说A主机发送了一个广播帧,只有在这样一个广播域中的B主机能收到。由于CD主机和A主机并不是一个虚拟局域网,所以CD不会收到A主机发来的广播帧,所以每一个VLAN是一个单独的广播域。你也可以理解成一个不同的子网,这就是VLAN的基本概念。
并且,我们不仅可以在一个交换机所连接的主机上进行划分,还可以在一个大的局域网中进行划分。如下图,橙色我们规定是VLAN1,黑色我们规定是VLAN2
如上图,现在A和C通信,也就是两个不同的虚拟局域网之间通信是无法直接实现的。交换机上默认生成的VLAN是互不相同的,AC本质是两个不同子网,不同子网是需要借助路由器(或者具有三层路由选择和交换的交换机才行)。
那A和B怎么通信呢?或者说A给B发送了一个广播帧怎么就没有进入到C和D中呢?首先我们交换机会有一个转发表,基于MAC地址和它的端口有这样一个映射。
但是由于我们的交换机现在还有虚拟局域网的功能,所以还有一个交换机的VLAN表。VLAN表有一个VLAN ID:表示处在哪个虚拟局域网中,端口和转发表一样。
举个例子:现在A主机发送一个广播帧,交换机就知道A主机也就是1号端口是从VLAN1来的,如果要转发,交换机会查看VLAN表,发现VLAN ID是1的只剩下2号端口,就只有2号端口可以接收消息。
再举个例子,现在A只想给B发送数据帧,那他首先会查看转发表,然后发现B这个端口是二号端口,那接下来再去确认一下VLAN表看2号端口是不是和A是一个虚拟局域网VLAN中,如果是就转发。
VLAN表除了VLAN ID和端口构成的,还有一个比较常见的,叫做基于MAC地址的VLAN技术。这个其实就是把端口号具体化了。
比较常用的还是刚刚的那种,也就是VLAN ID和端口的那种。
如果我们现在交换机和交换机之间想要发送一个数据帧,怎么实现?
简单来说就是贴标签
比如说下图的A主机要发送数据给E主机,那么首先A主机会准备好一个帧,这个帧就是我们之前在链路层学过的普通的以太网帧。
到了交换机这里它就会知道是A主机的帧,它是从VLAN1中过来的,因此就会在这个帧上附加一个字段(一个标签tag),让tag=1表示从A主机1号端口发来的以太网数据帧,它属于VLAN1
接下来,包含这个VLAN1的新的数据帧就会通过这个链路发给交换机2,为什么在这个链路中没有把标签去掉呢?
因为在交换机与交换机之间连接的端口常用trunk端口,trunk端口不需要对标签去掉tag,直接把包含了tag的标签发过去。
发到交换机2,它就会知道是属于虚拟局域网1的,那么接下来就只会发给这个虚拟局域网1当中1个主机。然后再结合一些其他的MAC地址字段,就可以知道是要发给E还是F。
贴标签也就是给原先的MAC帧加入一个4字节的VLAN标记,也就是刚才说的tag
VLAN标记的前2字节是表面是IEEE 802.1Q帧,也就是说我们原先的MAC帧如果经过VLAN标记的插入后,就变成了802.1Q帧这个东西,了解即可。
然后接下来4位是没有用的,
还剩下12位则是VLAN标识符,也就是tag那个东西,它唯一表示该以太网帧属于哪个VLAN。
用户主机和交换机之间的交流和通信,这个中间的帧一定是普通的MAC帧,而不是802.1帧。只有在经过了这个交换机的时候,交换机内部才会给它打一个标签。如果后面又需要连另一个交换机,则通过一个主干线的trunk端口发出去,此时的帧才是带有标记的,也就是802.1帧。
接下来这个帧进入交换机之后要选择从哪个端口输出,如果选定主机之后,就需要把刚才的标签去掉。
知识小结 :
通过对交换机的改编,我们可以形成不同的逻辑工作组,也就是一个个VLAN。每一个VLAN是一个广播域,广播域可以传送广播帧,但是广播帧不能发送给其他的虚拟局域网。除非你有路由器或者三层的具有路由选择的交换机才行。
另外,VLAN有两种实现方式,一种是基于端口的,也就是VLAN表中是VLAN ID和端口ID
另一种是基于MAC地址的,也就是VLAN表中是VLAN ID和MAC地址。
比较常用的是第一种。
然后我们还知道了,在不同虚拟局域网中怎么进行通信,以及怎样在同一个虚拟局域网,即使是跨交换机如何通信------即打标签,也就是对原有的普通MAC帧添加4字节的标识符,最重要的是后面的12位,这12位是VID,也就是虚拟局域网的ID,根据这个ID就可以确定这个数据帧属于哪个局域网。
十九、广域网及相关协议
F:
PPP协议是以字节为单位的,第一个字节和最后一个字节是7E(十六进制),7E写成二进制就是01111110,它是标志字段,也是帧定界符。
当然了,很可能在信息部分存在8个位(1字节),它和帧定界符是一样的,这里就需要透明传输,加一个转义字符了。简言之,只要在信息部分遇到了和帧定界符一样的数据,我们就在前面加一个转义字符,到了接收端,再把插入的转义字符删掉即可。
A:
A表示address地址字段,地址字段用全1表示,也就是2个F
C:
和地址字段一样,其实并没有特别大的意义,现实中使用也没有什么意义,了解即可
协议:标识信息部分是什么类型?是IP数据报、LCP数据报还是网络层控制数据等等。这里了解即可。
FCS:这个是为了实现差错检测的,使用CRC循环冗余校验算法,在后面插了一个2字节的帧检验序列FCS
可以看出PPP协议,它的帧格式是以字节为单位的。所以它传输的数据都是整数个字节,所以我们又说PPP协议是面向字节的一种协议。
二十、链路层设备
我们知道主机和集线器的距离不能超过100m,如果超了那么失真就会非常严重,所以这个距离是很短的。而为了使得距离比较远的主机进行通信我们就需要把以太网扩展一些。
我们采用的第一种方式就是通过光纤,一个是因为光纤非常长,另一个是因为光纤损耗很小。所以我们可以通过光纤的方式来扩展我们以太网的范围,使我们两台主机进行通信的距离变得更远。
还有一种方法,我们可以利用集线器,再把很多个集线器组合起来。这样每一个集线器构成的区域叫做冲突域,冲突域是指在这个物理层设备所连的主机之内如果进行通信,同一时间内只能有一台主机发送信息,如果有两台主机发送信息就会发生冲突或者碰撞。
把各个集线器连接到一个主干集线器上,这样就可以使某一个集线器和其他冲突域中的计算机进行通信了,就形成了一个大的冲突域。所以主干集线器也是扩展以太网的方式。
但是由于冲突域变大了,里面主机变多,冲突的可能性也随之增加。
所以下面介绍可以减少冲突,还能扩大以太网范围的方法:
网桥是交换机的前身,现实生活中用网桥都很少了,大部分是交换机。
上图的网桥就是把几个以太网连接起来了,这样就构成了一个更大的以太网。
而原先的以太网(冲突域)也称为网段
网桥的优点:
1.过滤通信量,增大吞吐量
网桥是工作在数据链路层的一个链路层设备,它可以把各个冲突域分割开。
可以看到上图网桥的两端都是冲突域,
但是如果网桥换成集线器,换成一个物理层的设备,就没有这种过滤通信量,或者说分隔冲突域的功能了。可以看到上图中不同网段的通信是不会进行彼此之间的干扰的。
举个例子,现在A和B通信,那C和D,E和F也是可以同时通信的,它们之间不会互相干扰。如果你是换成物理层设备同时连着6台主机,那这6台主机是不可以同时通信的。
而经过了网桥这种链路层设备连接之后,每个冲突域内都可以进行单独的通信。比如A和C也可以进行通信,因为网桥把以太网进行了一个扩展。
举个例子,假设每个网段的数据传输速率(带宽)是10MB/S,那么这三个网段合起来的最大吞吐量就是30MB/S
当然,如果我们把这个网桥换成物理层的设备,那么整个网络就是一个碰撞域(冲突域),当A和B通信时,其他的都不能通信,那整个碰撞域的最大吞吐量仍然是10MB/S
2.扩大了物理范围
这个很容易理解,A甚至可以和F通信了
3.提高了可靠性
可靠性是指当网络出现一个故障时,通常只会是一个网段受到影响。
举个例子,现在AB的主干线坏了,那对于其他两个冲突域没有啥影响。
4.可以互联不同物理层、不同MAC子层、不同速率的以太网
关于自学习,其实就是在通信的过程中我们逐步的丰满转发表,我们举个例子:
现在A要给B发送一个数据帧,那A发送的数据帧会在这个网段中广播出去
左边这个网桥在收到数据后,会先按源地址,也就是先按照A的Mac地址查找转发表。发现这个转发表中并没有A的地址,于是就先把A的地址和收到帧的接口1写入到转发表中
这样如果后面A再发数据,而且是经过左边网桥1号接口处理的话,我们就知道应该从1号端口发到网段中了。
接下来再按照目的地址B来查找转发表,发现转发表中没有B的地址,于是通过除了1接口外的所有接口转发出去,目前只有2个接口,于是从左边网桥的2号接口出去。
转发出来的帧经过CD,但是CD发现并不是给自己的,所以它们并不会处理而是直接丢弃
再往下,帧走到右边的网桥的1号接口,那么这个右边网桥(我们给它记为2号网桥)会按照同样的方式处理这个帧。
首先网桥2的转发表中先找源地址A,但是没有找到,于是就把A及接口1写进转发表
接下来网桥2再看自己的转发表中有没有包含目的地址B的,但是发现还是没,因此网桥2就会从2号接口发出去
这样A和B的通信过程在上图就已经结束了。
现在我们F要给C发一个数据帧,我们来看一下是如何运作的
F发出1个数据帧,流经E,再流向网桥2的2号接口,网桥2会先检查帧的源地址,发现转发表里面没有F,那就会把F写入,然后对应接口是2
网桥再检测转发表中有没有目的地址C的,发现没有,于是从网桥2的1号接口出去。
经过DC,再流到网桥1的2号接口。
到目前为止,C其实已经收到了来自F的帧,但是发送还没有停止。数据帧从1号网桥的2号接口进入到1号网桥。
然后1号网桥再一次对帧进行处理,首先看数据帧的源地址F,发现没有,写入转发表
然后网桥再检测目的地址C,发现转发表没有C,于是再把这个帧继续发送下去
下面我们再来看另一种网桥:源路由网桥
我们实际的复杂网络就类似一个迷宫,迷宫的出口和入口就类似于发送的源站和目的站。
源路由网桥的工作原理就是源站以广播的方式向目的站发送一个发现帧,源站会以广播的方式把帧放到链路上进行传播。
当发现帧到达目的站,发现帧会原路返回。如果有n种路径从终点站走到源站,它会告诉起点,有多少种路由选择方案,这些路由选择方案中选择一个路由最少/时间最短的。
假设我们已经知道了某条路是路由最少/时间最短的,我们就把这条路径的信息作为最佳路由信息放在帧的首部,以后只要发送数据帧,源站和目的站是以前记录的这条,那就直接选择这条最优方案。
再来看一种网桥
多接口网桥------以太网交换机
我们知道网桥通常只有2个端口,如果我们要扩展这个以太网就需要很多网桥这样就很浪费了。所以我们随着技术发展,网桥的接口也变得越来越多了。
这样的网桥就变成了我们所说的以太网交换机。交换机和网桥是一样的原理,每一个端口都是一个冲突域,需要注意的是,以太网交换机可以独占传输媒体带宽。
举个例子,现在有个冲突域带宽是10Mb/s,现在有4个主机用集线器连接,那他们每一个人能分到的带宽也就只有2.5Mb/s
但是如果我们用的是以太网交换机,也是用10Mb/s,那不管是集线器还是单个主机,都是10Mb/s
接下来来看以太网交换机的两种交换方式。
第一种是直通式交换机,第二种是存储转方式交换机,其实还有第三种(前两种结合起来)。
直通式交换机是只检查帧的目的MAC地址,这个目的MAC地址长度是6字节。检查之后就立刻转发,所以它的时延是非常小的。但是问题就是它的可靠性低,它并不会对数据帧进行错误的检查,也无法支持具有不同速率的端口的交换。
存储转方式交换机刚好是把直通式交换机的缺点进行改正。它是将帧放到高速缓存,并且检查这个帧是不是正确的,如果正确就会转发,如果错误就把这个帧丢弃。于是这种交换方式就提高了系统的可靠性,也可以支持不同速率端口的交换。相应的代价就是延迟较大。
交换机的自学习和网桥几乎是一样的
广播域的判断很简单,你就看有没有路由器。
如果图中有路由器,那路由器左边一个广播域,右边一个广播域。
如果图中没有路由器,那构成的就是一个广播域。
对于冲突域,物理层设备是无法分隔冲突域的,所以集线器所连的主机都算是一个冲突域
而以太网交换机是链路层设备,链路层设备只要有一个端口都算一个冲突域
所以共有4个冲突域。