数据链路层的功能:
实现数据在一个网络之间的传输。因此,为了实现这个功能就有了以下多个概念:
数据链路的组成:
链路:从一个节点到一个相邻节点的一段物理线路,而中间没有任何其他交换节点。
数据链路:数据链路的构成由把实现通信协议的硬件和软件加到链路上构成的。
数据链路以帧为单位传输和处理数据。
数据链路层的三个重要问题:
封装成帧:
封装成帧是把网络层交付的协议数据单元,添加帧头和帧尾的操作,称为封装成帧,主要目的是为了在链路上以帧为单元传输数据,从而实现数据链路层本身的功能。
在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。
发送方会基于发送的数据和检错算法计算出检错码,并放在帧尾。
接收方主机根据数据链路层放在帧尾的检错码和检错算法来判断传输过程是否有错误。
接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃。
丢弃有误码的帧后,会进行其他措施来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本,来实现发送方发送什么,接收方就能接收到什么。
可靠传输时数据链路层中最基本、最重要的问题。
不可靠传输:
在丢弃有误码的帧后,不进行任何其他处理,接收方不一定能够收到发送方发送的东西。
以上三个问题都是使用点对点信道的数据链路层来举例的。
如果使用广播信道的数据链路层除了包含上面三个问题外,还有一些问题要解决:
常用的解决方法是编址方法:将帧的目的地址添加在帧中一起传输。
例如以太网V2的MAC帧,在其帧头就有目的地地址和发送主机源地址。
随着技术的发展,交换技术的成熟,
在有线(局域网)领域 使用点对点链路和链路层交换机的交换式局域网取代了共享式局域网
在无线局域网中仍然使用的是共享信道技术
封装成帧是把网络层交付的协议数据单元,添加帧头和帧尾的操作,称为封装成帧,主要目的是为了在链路上以帧为单元传输数据,从而实现数据链路层本身的功能。
在物理层中会将构成帧的各比特,转换成电信号交给传输媒体,为了便于接收方数据链路层从物理层交付比特流中提取出一个一个的帧,因此需要帧头跟帧尾来做一个帧定界,来实现从比特流中提取出一个一个的帧。
例如在ppp帧的格式中,在帧头和帧尾各有一个帧定界编制,由1子节组成,其01111110和01111110所包裹的数据就是一个帧,数据链路层可以识别这个帧定界从而提取出一个帧。
但是也存在没有帧定界标志的数据链路层协议:
前导码:其前导码由两部分组成:
前同步码:作用是使接收方的时钟同步
帧开始定界符:表明其后面紧跟着的就是MAC帧
其帧的提取由物理层添加的前导码来识别开始,并且按照稳定的时钟周期,在每一帧的结束会由96比特发送时间的间隔,以此来识别一个帧的结束。
透明传输:
封装抽象出具体的传输逻辑,只暴露出传输的功能。
在此指的是数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
在传输数据过程中可能会出现数据比特流与帧定界标志符一样的情况,造成误读定界标志导致传输错误。
在这种情况下,说明数据链路层对于数据有了一个要求:不能存在与定界符一样的数据编码。这就代表着对上层交付的数据有了限制,这就不是透明传输。
因此为了实现透明传输,需要在数据链路层对数据进行处理,实现透明传输的功能。
因此在数据链路层中就会有对数据的处理来实现透明传输功能,例如:字节填充、比特填充,主要思路是在每一个传输数据中出现的定界符进行转义,防止误读。
子节填充:在面向字节的物理链路中适用,主要步骤:
通过在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
比特填充:适用于面向比特传输的物理链路,使用步骤:
在数据链路层中发送帧前扫描帧的数据部分,若出现连续的5个1,将后续的一个1换成0(因为帧定界标志符为01111110)。
在接收方数据链路层接收帧时,帧的数据部分,若出现连续的5个1,将后续的一个0换成1。
实际的通信过程中都不是理想的,在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。
在一段时间内,传输错误的波特率站比特总数的比率称为误码率BER(Bit Error Rate)。
使用差错检测码来检测数据在传输过程中是否出现差错是数据链路层的一个重要问题。
如图所示的FCS就是检错码,可以让接收方使用检错码和检错算法检验传输数据是否出现错误。
在发送的数据中添加1个奇偶检验位,在接收方根据1的个数来判断是否出现错误。
例如传输过程中添加1个1后,整体的1的个数为奇数,在传输过去后根据1的个数判断是否出现传输错误,但是当传输错了偶数个1时不能判断出来。
因此这种判断存在很大的局限性。在数据链路层中不使用。
循环冗余检验是一种可靠性非常高的校验方法。
主要有以下几步:
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后方一起传输
- 接收方通过生成多项式来计算收到的数据是否出现误码
发送方处理:
整体做除法,根据约定的多项式次数,在待发送数据后面添加多项式最高项次数个零。然后进行除法,最后生成的余数就是冗余码,其长度应该和多项式最高次数相同。
其中除数就是生成多项式的各项系数构成的比特串。
接收方处理:
已接受数据加上余数,同生成多项式各项系数构成比特串进行除法,若余数为零则无误码,余数不为零则有误码。
生成多项式举例:
由此可见,生成多项式系数构成的比特串比生成多项式最高项次数的个数要多一。因此除数的个数应该比发送方构建被除数时添加的零的个数多一个。
常用的生成多项式:
例子:
根据差错检测技术,接收方的数据链路层可以检测出帧在传输过程中是否出现了误码。
接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃。
此时有两种情况:
丢弃有误码的帧后,会进行其他措施来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本,来实现发送方发送什么,接收方就能接收到什么。
可靠传输时数据链路层中最基本、最重要的问题。
不可靠传输:
在丢弃有误码的帧后,不进行任何其他处理,接收方不一定能够收到发送方发送的东西。
一般情况下,有线链路的误码率比较低,为了减小开销,不要求数据链路层向上提供可靠传输服务。即使出现了误差,可靠传输的问题由其上层解决。
对于无线链路,误码率较高,因此要求数据链路层必须向上层提供可靠传输服务。
比特差错知识传输差错中的一种,从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序、分组冲重复。
路由器输入队列由于空间不足,主动丢弃收到的分组,造成分组丢失。
由于传输过程中选择失序的问题,接收方实际收到的数据与发送方发送的分组顺序不同造成分组失序。
分组在传输过程中由于某种原因在线路中滞留,导致一定时间内没有到达接收方,触发发送方超时重传机制,最终导致接收方收到了两个相同分组,造成分组重复。
TCP/IP4层结构中的以太网便不要求数据链路层实现可靠传输。
停止等待协议有4个最基本原则:
在每个数据发送后,接收方接到后会发送ACK(确认)信号确认无误收到,发送收到ACK信号后便开始发送下一个数据。
接收方检测收到数据出现误码后,会发送NAK(否认)信号,发送方接收到NAK信号后会重新发送缓存区中的数据。
因此,在此过程中,发送方与接收方一直处于一种停止等待对方的过程,在此过程中要进行确认与否认,这也是停止-等待协议的最基本原则。
2. 超时重传:
3. 确认丢失:
4. 确认迟到:
此原则可以避免:接收方发送ACK信号后,由于传输问题出现ACK信号迟到,导致发送方没收到确认信号,重传分组,同时开始传输下一个分组,此时ACK到达,但是此时超时重传的分组已经发送出去,接收方接收到后会发送一个一样的ACK信号。
在点对点通信中,传输的时钟周期比较固定,很少出现确认迟到的情况,可以不用给确认分组编号。
TD:发送时间,发送时延
RTT:往返时间
当往返时延RTT远大于数据帧发送时延TD时(卫星电路),信道利用率非常低
若出现重传,信道利用率还要减低
因此就出现了另外两种协议:回退N帧协议GBN、选择重传协议SR
回退N帧协议可以理解为停止等待协议的一种优化,在相同的时间内,使用停止-等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方,可以发送多个数据分组。
发送窗口即每次可以连续发送的个数,个数由数据链路协议决定,有n个比特数据参与编号既有2^n次方个发送窗口大小。
选择发送的窗口数量一般要小于发送限定窗口。
接收窗口为1.
若发送窗口的取值为1,则变成停止等待协议。
发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去
分组经过互联网传输正确到达接收方,没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,在通过互联网的传输正确到达了发送方
发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理
累计确认:接收方不一定要对收到的数据分组逐个发送确认,而可以在收到几个数据分组后(由具体实现),对按序到达的最后一个数据分组发送确认,ACKn表示序号为n及以前的所有数据分组都已正确接收。
优点:
即使确认分组丢失,发送方也可能不必重传
减小接收方的开销
减小对网络资源的占用
缺点:
不能向发送方及时反映出接收方已经正确接收的数据分组信息
对于有差错情况:
在传输过程中,5号数据分组出现错误,接收方在接收5号分组时通过其检错码发现了错误。
于是丢弃该分组,而后续到达的分组通过对比序号发现序号不匹配,接收方就选择不接受他们,将他们丢弃,并且回传按序接受的最后一个正确数据分组,发送ACK4,每丢弃一个分组就发送一个最后正确数据分组信号。
当收到重复的ACK4时,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传,具体收到几个重复确认就立刻重传,根据具体实现决定。
如果收到这4个重复的确认并不会触发发送立刻重传,一段时间后。超时计时器超时,也会将发送窗口内以发送过的这些数据分组全部重传。
为什么叫回退n帧?
在5序号缺失后,此时确认的信号为4号帧,此时已经正确发送的6,7,0,1号帧全部选择丢弃,回退到已经确认的第n号帧,因此叫回退n帧协议。
三个知识点:
回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议
在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议
当通信线路质量不好时,回退n帧的效率会不比停止等待协议好。
为什么要将发送窗口的序号设置为小于取值范围上限?
在实际传输过程中,假设所有的分组都被接收,此时发送一个ACK7,但是ACK7在传输过程中丢失。
此时发送方到一定时间后触发超时重传机制,重新发送0-7编号分组。
此时接送方接收到后,会比对分组序号,发现分组序号符合当前窗口选择接收。
但是此时0-7分组实际上已经接收过了,此时就出现了差错。
很明显,若发送窗口长度大于限定长度,会导致不能识别新旧数组。
一个数据分组的误码就会导致其后续多个数据分组不能被接收方接收而丢弃,尽管他们并没有错误。
这必然会导致发送方对这些数据分组的超时重传,这时对通信资源的极大浪费。
基于此,为了进一步提高传输性能,就提出了选择重传协议。
对于选择重传协议,在回退n帧协议的基础设,为了进一步提高传输性能,可设法只重传出现无法的数据分组。因此,接收窗口的尺寸WR不应在等于1,应该大于1,以便接收方先收下失序到达但无误码并且序号落在接收串口内的那些数据分组,等到所缺分组收齐后再一起送交上层。
对于选择重传协议,为了使发送方仅重传出现差错的分组,接收方不能再采用累计确认机制,而要选择对每个正确接收到的数据分组进行逐一确认。
举例:
发送方将发送窗口内数据0123发送给接收方,且此时2号分组出现丢失。
此时接收方能正确接收0,1 序号分组,并且发送ACK0,ACK1。并且此时接收窗口向前滑动。
3. 此时接收方接收3号数据分组,并且发送ACK3,但是由于此时2号分组没有收到,不能向后滑动创建,只能继续接收剩余窗口。此时发送方会对发送窗口中的3号数据做已确认标记,防止超时重发。
此时发送方收到ACK0,ACK1,将窗口向后滑动,并且将4,5号数据发送出去。
接收方接收到4,5号分组后,回传ACK4,ACK5
2号数据触发超时重传机制,此时将2号数据发送过去,接收方接收到后回传ACK2,并且此接收方有序并且已确认数据已经连续,向后滑动窗口。
发送方接收到ACK2信号后,所有发送窗口都满足确认,并且已经连续,发送窗口也向后滑动。
依次类推,最后完成所有分组传输。
条件限定:
具体原因与上面回退n帧协议窗口尺寸问题类似。
若不满足要求会导致不能识别新旧分组问题。
小结:
点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议
PPP协议是因特网工程任务组IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]
PPP协议是数据链路层使用的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议
PPPoE 是为宽带上网的主机使用的链路层协议
PPP协议也广泛应用于广域局域网路由器之间的专用线路。
PPP协议是目前用用最广泛的点对点数据链路层协议。
PPP协议为在点对点链路传输各种协议数据报中提供了一个标准办法,主要由三部分组成:
关于透明传输的思路在上面3.2已有讲解,不再重复赘述。
简单来说:
举例:
面向子节的异步链路采用插入转移字符的子节填充法:
面向比特的同步链路采用填充比特字符的比特填充法:
在PPP协议中的FCS是一个两字节的帧检验序列FCS字段,可以使用循环冗余校验CRC来计算该字段的取值。
接收方每收到一个PPP帧,就进行过CRC校验,若CRC校验正确,就接收这个帧,否则,就丢弃这个帧。
使用PPP协议的数据链路层向上不提供给可靠服务。
数据媒体接入控制(Medium Access Control)简称MAC,其要着重考虑的问题就是如何协调多个发送和接收站对一个个共享传输媒体的占用,也就是解决冲突的问题。
信道复用:
频分复用FDM:
时分复用TDM:
波分复用(WDM)
波分复用就是光的频分复用。
光信号传输一段距离后会衰减,所以要用掺铒光纤放大器放大光信号
码分复用(CDM):
码分复用,由于该技术主要用于多址接入,人们更常用的名词时码分多址CDMA(Code Division Multiple Access)
同理:频分复用(FDM)和时分复用(TMD)都可用于多址接入,相应的名词是频分多址(FDMA)和时分多址(TMDA)
与FDM和TDM不同,CMD的每一个用户可以在同样的时间使用同样的频带进行通信。
由于个用户经过特殊挑选的不同码型,因此个用户之间不会造成干扰。
CMD最初是用于军事通信的,因此这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易于被敌人发现
关于码片和相关计算请看我的这篇文章:
计算机网络码分多址CDMA及计算例题(简单易懂)
受控接入:
由于市场竞争已经退出历史舞台。
集中控制:
分散控制:
值得注意的是:
随机接入:
以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网(Ethernet)的技术标准
以太网采用无连接的工作方式,对发送的数据帧不进行编号,也不要求对方发回确认。目的站收到有差错帧就把它丢弃,其他什么也不做
最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。
但是在多个主机公用一个总线时,避免不了会出现碰撞的问题。如何协调总线上个主机的工作,尽量避免碰撞是一个必须解决的重要问题。
因此就出现了载波监听多址接入/碰撞检测 CSMA/CD协议。用于解决碰撞问题。
随机接入分为总线型局域网和无线型局域网。
总线型局域网使用的是CSMA/CD协议。
无线型局域网使用的是CSMA/CA协议。
总线型CSMA/CD协议:
首先是多址接入MA:
载波监听CS:
其中,96比特时间是发送96比特需要的时间,其作用是可以检测出一个帧的结束。
同时也是的其他站点都能有机会平等竞争信道并发送帧。
在多址接入的基础设,若想发送数据,要先听后写,在检测信道是否空闲96比特时间,若是才申请发送数据。
但是实际上:总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。
当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。
当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
所谓“碰撞”就是发生了冲突。因此碰撞检测 也称 冲突检测。
在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。
每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
在B发送帧的过程中,还是要进行边发送边检测(边说边听),若检测到碰撞立即停止发送,而后退避一段随机时间。
在以太网中还采取一种叫强化碰撞的措施:
这里再引入一个CSMA/CD协议工作中的争用期或碰撞窗口的概念
首先在图中先参数:
τ : 以太网单程端到端传播时延,也就是比特端到端传输花费的时间。
因此由图可以看出,当发生碰撞时,最长需要2τ的时间就能检测到本次是否发生碰撞(也就是碰撞点在最远端)。
因此,以太网中,端到端的往返传播时延2τ称为争用期或碰撞窗口。
也就是说在这段时间才有可能发生碰撞,若这段时间没有发生碰撞,则不再会发生碰撞。
CSMA/CD中最小帧长的概念:
在这种情况中,若A发送信号,并且在信号发送到C端前已经发送完毕,于是A不再进行碰撞检测。
但是在C处发生碰撞,导致D收到有差错的帧。
但是此时A并不知道发生了碰撞。
为了避免这种情况,就要求帧长不能太短,也就引出了最小帧长的概念。
CSMA/CD中最大帧长的概念:
在此传输情况中,A发送了一个很长的帧,占用了大量时间,造成B、C无法传输数据,并且可能会造成某一端的缓冲区满的情况。
因此便提出了最大帧长的概念。
以太网版本的MAC帧为例:
CSMA/CD中的截断二进制指数退避算法:
首先明确退避时间的取值:
为何要随机取数,原因就是为了尽量避免退避时间相同,再次重新发送数据引发新的冲突。
退避时间取值举例:
若重传16次都失败,说明同时发送帧的主机太多,于是丢弃该帧,并向高层报告。
CSMA/CD中的信道利用率概念:
多个争用期2τ时间 + 发送时间To + 发送到最远端时间 τ。
此时其信道利用率为:
To / 平均时间。
可以看出此时的信道利用率还是比较低的。
考虑一种理想情况:
此时就提出了极限信道利用率的概念。
CSMA/CD中的帧发送流程图:
CSMA/CD中的帧接收流程图:
无线型局域网 CSMA/CA协议:
在无线局域网中能不能使用CSMA/CD协议呢?
在无线局域网中,每个主机的作用域有限,不能做到像总线型局域网中信号传遍总线的情况。
因此难以进行碰撞检测。
因为考虑到能有其他高优先级的帧要发哦是那个数据,若有高优先级要发送,先让高优先级发送。
SIFS是最短帧间间隔,用来分隔开属于一次对话的各帧,再这段时间内,发送站点应该要从发送方式,转换为接收方式。
对于发送过程中其他信道检测到信道忙:
CSMA/CA的退避算法:
退避算法的工作流程图:
CSMA/CA协议的信道预约和虚拟载波监听:
除源站和目的站意外得其他各站,在收到CTS帧后就会推迟接入到无线局域网中,这样子就可以保证原则和目的站之间得通信不会收到其他站得影响。
如果RTS帧发生碰撞,源站就收不到CTS帧,此时需使用退避算法重传RTS帧。
由于RTS帧和CTS帧都很小,发生碰撞、碰撞产生得开销以及本身得开销都很小,而对于一般得数据帧,其发送时延往往大于传播时延,因此碰撞概率很大。因此用很小的代价进行预约往往是值得得。
802.11标准规定了3中情况供用户选择:
802.11的虚拟载波监听机制:
MAC地址是以太网的MAC子层所使用的地址,数据数据链路层
IP地址是TCP/IP体系结构网际层所使用的地址
ARP协议属于TCP/IP体系结构网际层,起作用是已知设备所分配到的IP地址,使用APR协议可以通过该地址获取到设备的MAC地址。
对于点对点信道来说,由于数据是直接传输到目标主机的,不存在主机识别的问题,因此不需要用到地址。
使用广播信道的主机,由于发送数据时是广播给所有主机,数据链路层必须使用地址来区分主机。
当多个主机连接再同一个广播信道上,想要实现两个主机之间的通信,则每个主机必须有一个唯一的标识,即一个数据链路层地址。
在每个主机发送帧中必须携带标识发送主机和接收主机的地址,由于这类地址是用于媒体接入控制(Medium Access Contr),因此这类地址被称为MAC地址。
一般MAC地址被固化在网卡中(网络适配器)的电可擦只读存储器EEPROM中,因此MAC地址也被称为硬件地址。
MAC地址有时也被称为物理地址,但是MAC是数据数据链路层的内容。
MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标志。
MAC地址的格式:
其表示方法:
在ieee官网中,可以根据MAC地址查询到地址的相关信息,例如厂商,生产地址等等。
在MAC地址中,第一子节的b0和b1字符由特殊的含义。如图所示。
注意,在剩余46位全部取1时,就是广播地址FF-FF-FF-FF-FF。此时发送的是广播消息。
关于无效的MAC帧:
- 数据字段的长度与长度字段的值不一致;
- 帧的长度不是整数个字节;
- 用收到的帧检验序列 FCS 查出有差错;
- 数据字段的长度不在 46 ~ 1500 字节之间。
- 有效的 MAC 帧长度为 64 ~ 1518 字节之间。
对于检查处无效的MAC帧就简单地丢弃,以太网不负责重传丢弃的帧。
MAC地址的发送顺序:
单播MAC地址发送例子:
主机B给主机C发送单播帧,主机B首先要构建该单播帧,在帧首部中的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部的其他字段、数据载荷以及帧尾部,就构成了该单播帧。
此时A接收该单播帧,发现该单播帧的目的MAC地址与自己的MAC地址不匹配,丢弃该帧
此时C接收该单播帧,发现该单播帧的目的MAC地址与自己的MAC地址匹配,接受该帧,并将该帧交给其上层处理
广播MAC地址发送例子:
主机B首先要构建该广播帧,在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该广播帧
发送该广播帧
3. 主机A和C都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,主机A和主机C都接受该帧,并将该帧交给上层处理
多播MAC地址发送例子:
发送过程:
构建该多播帧,在帧首部中的目的地址字段填入该多播地址,源地址点填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该多播帧
可以看出主机B属于两个多播组,主机C也属于两个多播组,而主机D不属于任何多播组
主机B和C发现该多播帧的目的MAC地址在自己的多播组列表中,主机B和C都会接受该帧
主机D发现该多播帧的目的MAC地址不在自己得多播组列表中,则丢弃该多播帧
IP地址属于网络层的范畴,不属于数据链路层的范畴。
下面内容讲的是IP地址的使用,详细的IP地址内容在网络层中介绍。
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
网络编号:标识因特网上数以百万计的网络
主机编号:标识同一网络上的不同主机
0.254 0.1等便是主机编号。
因特网中不同的网络的网络编号必须不同!
MAC地址不具备区分不同网络的功能,IP地址可以区分不同网络。
数据包转发过程中IP地址与MAC地址的变化情况:
IP地址在传输过程中不会发生变化。
MAC地址在发送过程中沿着主机的传输而变化。
在此例子中可以看出,在传输过程中可以知道IP地址,但是不知道其MAC地址是什么。
此时就引出了ARP地址。
在每一个主机中都有一个高速缓存表,可以记录IP地址和MAC地址的对应信息。
很明显,在此例中无法找到。
此时,就需要主机B需要发送ARP请求报文广播,来获取主机C的MAC地址。
符合请求IP地址的主机会把自己的MAC地址通过ARP相应报文发送给请求主机。
主机B接收到回复信息后会把IP地址和MAC地址放在ARP中保存下来,并且此时将原来构建中的帧构建好并发送出去。
在ARP中有两种类型的数据,动态和静态:
动态:自动获取,生命周期默认为两分钟
静态:手工设置,不同操作系统的生命周期不同。
由于ARP协议的适用是逐段链路进行的,因此ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用。
早期的计算机网络中,常用的是总线型以太网。
但是随着网络的发展被逐渐淘汰,出现了两种新型以太网结构:
传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。
采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。
集线器是也可以看做多口中继器,每个端口都可以成为一个中继器,中继器是对减弱的信号进行放大和发送的设备
集线器的以太网在逻辑上仍是个总线网,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行
集线器HUB在物理层扩展以太网:
使用集线器扩展:将多个以太网段连成更大的、多级星形结构的以太网,会扩大碰撞域。
- 使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信。
- 扩大了以太网覆盖的地理范围。
- 碰撞域增大了,但总的吞吐量并未提高。
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
在这里引出了碰撞域的概念:
碰撞域:
碰撞域(collision domain)又称为冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。
碰撞域越大,发生碰撞的概率越高。
以太网交换机:
在集线器中,数据是以广播的形式发送,而在交换机中,会发送到目的主机中,因此其效率要高很多。
在单播情况下,集线器会像总线型一样把信号全部转发出去,而交换机只会发送给目标主机。
在广播情况下,二者无明显区别。
对于处理冲突的对比:
多台主机同时给另一台主机发送单播帧
集线器以太网:会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机
交换机以太网:会将它们缓存起来(存储转发),然后逐个转发给目的主机,不会产生碰撞
对于扩展以太网的对比:
对于集线器,会把信号发送给整个碰撞域中。
对于交换机,会直接发送给目标主机。
对于广播情况:
对于多个单播:
集线器扩展中,多个单播会导致冲突。
交换机扩展中,多个单薄由于交换机具有存储转发功能,不会导致冲突。
碰撞域对比:
在交换机中,可以实现扩大广播域而不扩大碰撞域,用路由器实现。
自学习和转发帧的示例:
- A 先向 B 发送一帧。该帧从接口 1 进入到交换机。
- 交换机收到帧后,先查找(图中左边)交换表。没有查到应从哪个接口转发这个帧给B。
- 交换机把这个帧的源地址 A 和接口 1写入交换表中
- 交换机向除接口 1 以外的所有的接口广播这个帧,寻求帧地址
- 接口 4到接口 2,先查找交换表。没有查到应从哪个接口转发这个帧给 B
- 交换机把这个帧的源地址 A 和接口 1 写入交换表中
- 除B主机之外与该帧的目的地址不相符,将丢弃该帧
- 主机B发现是给自己的帧,接受该帧
1 . B 向 A 发送一帧。该帧从接口 3 进入到交换机。
2. 交换机收到帧后,先查找(图中左边)交换表。 发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A。
3. 主机 A 发现目的地址是它,就接受该帧
4. 交换机把这个帧的源地址 B 和接口 3 写入(图中左边)交换表中
对于E发送到A:
- E 向 A发送一帧
- 交换机收到帧后,先查找(图中右边)交换表。发现(图中右边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口2转发出去。于是就把这个帧传送到接口 2 转发给 接口 4。
- 交换机把这个帧的源地址 E 和接口 3 写入(图中右边)交换表中
- 接口 4 到 左边的交换机,先查找(图中左边)交换表。发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A。
- 交换机把这个帧的源地址 E 和接口 4 写入(图中左边)交换表中
- 主机 A 发现目的地址是它,就接受该帧
对于G发送给A:
主机 A、主机 G、交换机 1的接口 1就共享同一条总线(相当于总线式网络)
- 主机 G 发送给 主机 A 一个帧
- 主机 A 和 交换机接口 1都能接收到
- 主机 A 的网卡收到后,根据帧的目的MAC地址A,就知道是发送给自己的帧,就接受该帧
交换机 1收到该帧后,首先进行登记工作- 然后交换机 1对该帧进行转发,该帧的MAC地址是A,在(图中左边)交换表查找MAC 地址有 A
- MAC 地址为 A的接口号是1,但是该帧正是从接口 1 进入交换机的,交换机不会再从该接口 1 讲帧转发出去,因为这是没有必要,于是丢弃该帧
考虑到可能有时要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个表项都设有一定的有效时间。过期的表项就自动被删除。
以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。
总结:
由于在实际使用过程中,可能会出现线路故障导致无法通信。
此时就提出了一个问题:
可以选择通过添加冗余链路来提高以太网的可靠性。
但是冗余链路会带来负面效应:网络环路。
广播风暴指的是由于网络形成环路,网络信号广播会在环路之间不停往返进行,导致大量消耗网络资源。
同理,还会导致主机收到重复的广播帧,导致交换机的交换表震荡。
为了解决以上问题,避免出现网络环路,便引出了生成树协议(STP)。
STP可以保证,不管交换机之间采用怎么样的物理连接,交换机都能自动构建出一个在逻辑上没有环路的网络,其逻辑拓扑结构必须是树形的,也就是生成最小生成树。关于最小生成树可以看:
当网络拓扑发生变化时,交换机都会自动进行生成树的重新计算。
虚拟局域网VLAN是一种将局域网内设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有共同的需求。
这种技术的出现是为了避免广播域过大,每次发送广播都需要发送到整个广播域造成的浪费网络资源和CPU资源的问题。
网络中会频繁出现各种广播:
分割广播域的方法有两种:
对于VLAN有以下知识点:
- 利用以太网交换机可以很方便地实现虚拟局域网 VLAN (Virtual LAN)。
- EEE 802.1Q 对虚拟局域网 VLAN 的定义: 虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。
- 同一个VLAN内部可以广播通信,不同VLAN不可以广播通信
- 虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。
- 由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源。
交换机的端口有三种:
Access端口:
打完标签后,与标签号相同的端口就会接收该帧,并且接收后进行去标签接收。
对于VLAN的实现,可以通过划分VLAN后,修改ACEES端口的PVID:
从而可以实现广播域的划分。
Trunk端口:
在Trunk端口中:
Trunk端口相当于Access端口的跨交换机版,具体的操作与Access相同,不再进行赘述。
华为交换机私有的Hybrid端口类型:
虚拟局域网技术有以下优点:
- 改善了性能
- 简化了管理
- 降低了成本
- 改善了安全性
如果觉得文章写的还不错,麻烦点个赞支持一下,欢迎评论,互相交流学习。