不论是考研还是找工作,计算机网络都是必须学的一部分。本文是根据【湖南科技大学—计算机网络】课程,整理所得。大家可以将本笔记作为课程的补充,如果你没有看过该课程,也推荐你继续往下看。⭐码字不易,求个关注⭐
链路:就是从一个结点到相邻接点的一段物理链路,而中间没有任何其他的交换结点。
数据链路:是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路层以帧为单位传输和处理数据。
封装成帧是指:数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧定界
帧头和帧尾中包含有重要的控制信息,帧头和帧尾的作用之一就是帧定界
PPP帧在帧头和帧尾进行帧定界:
以太网V2的MAC帧进行帧定界时,需要添加前导码,每个帧之间存在帧间间隔(96比特时间):
透明传输: 是指数据链路层对上层交付的传输数据没有任何限制(即使控制字符在帧数据中,也当做不存在去处理)。
面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。
即在控制字符前面加上转义字符ESC 。
面向比特的物理链路使用比特填充的方法实现透明传输。
比如在每五个1之后加上一个0。
帧的传输效率
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。每一种数据链路层协议都规定了帧的数据部分的长度上限。即最大传送单元MTU(Maximum Transfer Unit)。
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错。这称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率(BER)。
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
差错检测码(FCS)如下所示:
下面介绍两种差错检测方法:
使用差错检测技术,接收方的数据链路层就可检测出帧在传输过程中是否产生了误码,之后的具体操作,还要看数据链路层向上层提供的服务类型。
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做。
可靠传输服务:想办法实现发送方发送什么,接收方就能收到什么。
一般情况,有线链路误码率低,不要求数据链路层向上提供可靠传输服务。而无线链路要求数据链路层向上层提供可靠传输服务。
接下来介绍三种可靠传输实现机制:三种可靠传输实现机制的基本原理并不仅限于数据链路层,而是可以应用到计算机网络体系结构的各层协议中。
为了让接收方能够判断收到的DATA分组是否重复,需要给数据分组编号。由于停等特性,只需要一个比特编号就够了。
为了让发送方判断收到的ACK分组是否重复,需要给ACK分组编号,所用的比特量与数据分组编号所用比特数量一样。数据链路层实现停止-等待协议可以不用给ACK分组编号。 因为数据链路层一般不会出现分组迟到的情况。
停止等待协议的信道利用率
信道利用率=TD/TD(数据帧发送时延)+RTT(往返时延)。
当往返时延RTT远大于数据帧发送时延TD时,信道利用率非常低,于是产生了另外两种协议。
问:说说你对停止等待协议的理解?
停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。主要包括以下几种情况:无差错情况、出现差错情况(超时重传)、确认丢失和确认迟到。
发送方维持一个发送窗口,凡是位于发送窗口内的分组都可以连续发送出去,不需要等待对方确认。接收方可接受未按序到达且落在窗口内的分组,并且进行逐一确认。
点对点协议(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分组成:
对各种协议数据报的封装方法(封装成帧)、链路控制协议LCP(用于建立、配置以及测试数据链路的连接)、一套网络控制协议NCPs(其中的每一个协议支持不同的网络层协议)。
共享信道要着重考虑的问题之一就是如何协调多个发送和接收站点对一个共享传输媒体的占用,也就是媒体接入控制MAC(Medium Access Control)
可以采用多种方法解决媒体接入控制的问题,比如静态划分信道或动态接入控制。
复用就是通过一条物理线路同时传输多路用户的信号,来充分利用传输媒体的带宽。
频分复用FDM
频分复用的所有用户同时占用不同的频带资源并行通信。
码分复用CDM
码分复用CDM主要用于多址接入,人们更常用CDMA(码分多址)。
先不严格区分多址和复用的概念。
多址:多点接入,处理的是动态分配信道给用户,在暂时占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。
复用:将单一媒体的频带资源划分为多个子信道,这些子信道相互独立,互不干扰。
而FDMA、TDMA、CDMA可以分别看成是FDM、TDM、CDM的应用。
使用CDMA的每一个站首先被指派一个m bit的码片序列。
一个站如果要发送比特1,则发送自己的m bit码片序列,发送0则发送自己的m bit码片序列反码。
码片序列的挑选原则:
总线型局域网使用的协议:CSMA/CD协议;无线局域网使用的协议:CSMA/CA协议。
以前的CSMA/CD协议曾经用于各种总线型以太网中。现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CD协议。
载波监听 多址接入 /碰撞检测协议
多址接入MA:多个站连接在一条总线上,竞争使用总线。
载波监听CS:每一个站在发送前先要检测一下总线上是否存在其他站点在发送帧(先听后说)。检测到总线空闲96bit就发送这个帧;检测到总线忙,则继续检测并等待总线转为空闲96bit,然后发送这个帧。
碰撞检测CD:每个站在发送帧时边检测边发送(边说边听)。一旦冲突,立即停止发送,等待随机时间,重新再发送。
争用期
主机最多经过2t的时长就可以检测本次发送是否遭受碰撞。因此,以太网端到端往返传播时延2t称为争用期或碰撞窗口。(t:以太网单程端到端传播时延)
最小帧长
以太网的最小帧长确保了主机可以在帧发送完成之前就检测到该帧的发送过程是否遭遇了碰撞。
以太网规定最小帧长为64字节,即512bit(512bit的传输时间即为争用期)。
如果发送了一段帧,经过了争用期还没有检测到碰撞,那么说明这次发送肯定没有发生碰撞;
如果收到长度小于64字节的帧,说明收到的是由于碰撞而异常终止的无效帧。
截断二进制指数退避算法
若发生多次碰撞,就表明可能有较多的主机参与竞争。使用退避算法可使重传需要推迟的平均时间随重传次数而增大(动态退避),从而较小发生碰撞的概率。
如图所示:(退避时间=基本退避时间2t x 随机数r)
碰撞达到10次以后,随机数稳定在0-1023之间。当重传达16次仍不成功时,就丢弃该帧。
帧发送/接收流程
帧发送:先载波监听——碰撞检测——检测后的处理(退避算法等)。
帧接收:确认帧长——确认MAC地址——确认CRC检错码
载波监听 多址接入 /碰撞避免协议
在802.11无线局域网中,仍然可以使用CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞。
但是在无线局域网中,不能使用CD,其一是对硬件的要求非常高,其二是无线电波可能存在隐蔽站问题,进行碰撞检测意义不大。如图:
无线局域网使用CSMA/CA协议,碰撞检测CD变为碰撞避免CA。由于不能避免所有的碰撞,并且无线信道误码率较高,所以还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收。
802.11的MAC层定义了两种媒体接入控制方式:
帧间间隔IFS
802.11标准规定,所有的站点必须在持续检测到信道空闲一段时间后才能发送帧,这段时间称为帧间间隔IFS。
帧间间隔的长短取决于发送帧的类型,高优先级等待时间较短,反之亦然。
常用的两种帧间间隔如下:
短帧间间隔SIFS和DCF帧间间隔DIFS
CSMA/CA协议退避算法
在执行退避算法时,站点会为退避计时器设置随机的退避时间:
当退避计时器的时间减小到0,就开始发送数据。
当退避计时器的时间未减小到0,信道忙状态,就会冻结退避计时器的数值,等待信道空闲并且经过DIFS时间,继续启动退避计时器。
退避算法图示:
虚拟载波监听
除了RTS帧和CTS帧会携带通信要持续的时间,数据帧也能携带通信需要持续的时间,这就称为802.11的虚拟载波监听。
由于利用虚拟载波监听机制,站点只需要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听信道上的信号,因此虚拟载波监听机制能减少频闭站带来的碰撞问题。
MAC地址属于数据链路层。
IP地址和ARP协议属于TCP/IP体系结构的网际层,但是它们与MAC地址存在一定关系。
MAC地址是以太网的MAC子网所使用的地址。当多个主机连接在一条广播信道上,想要实现两台主机的通信,每个主机就必须有一个唯一的标识,就是数据链路层地址。
所以在主机发送的帧中必须携带标识发送主机和接受主机的地址,由于这类地址属于媒体接入控制MAC,因此这类地址被称为MAC地址(物理地址、硬件地址)。
注:MAC地址一般被固化在网卡的EEPROM中。严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
共六字节,48位。
多播MAC地址(第一个字节的前四个比特的十六进制数不能整除2即为多播地址,1,3,5,7,9,B……等):
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
在数据包转发过程中,源IP地址和目的IP地址始终保持不变;而源MAC地址和目的MAC地址逐段链路(或逐个网络)改变。
IP地址与MAC地址的变化如图所示:
在B给C发送数据包的过程中,B知道C的IP地址,但是B不知道C的MAC地址,那么B在数据链路层封装MAC帧时,就无法填写目的MAC地址。
这时,就需要通过地址解析协议ARP来获取主机C的MAC地址。
每台主机会有ARP高速缓存表,主机B给主机C发送数据包时,会先在自己的ARP高速缓存表中查找主机C的IP地址——MAC地址(目的地址)。如果没有对应的IP地址,主机B就会发送ARP请求报文(封装在广播MAC帧中):
主机B将C的IP地址放入ARP高速缓存中。
ARP的作用范围:逐段链路或逐个网络使用。
除了ARP请求和相应外,ARP还有其他类型的报文(例如检查IP地址冲突的无效ARP、免费ARP等);ARP没有安全验证机制,存在ARP欺骗(攻击)问题。
以太网交换机通过自学习算法逐渐建立起帧交换表,正是这样,它是一种即插即用的设备。
以太网帧交换表中的每条记录都有自己的有效时间,到期会删除。
以太网交换机自学习和转发的流程如下:
当一条链路出现故障时,添加冗余链路可以提高以太网的可靠性,但是也会产生相应问题:
- 广播风暴
- 主机收到重复广播帧
- 交换机的帧交换表震荡
以太网交换机使用生成树协议STP,可以在增加冗余链路提高网络可靠性的同时,避免网络环路的出现带来的各种问题。
使用以太网生成树协议:
区别一:
集线器在进行单播时,仅仅只是简单的转发比特,而交换机可以找到目的MAC地址对应的接口号,然后通过接口转发帧。
如图所示:
区别二:
在连接两个HUB连接的星型网络时,集线器HUB扩大了广播域,也同时扩大了碰撞域(冲突域)。而使用交换机来连接,可以扩大广播域,同时也可以隔离碰撞域(冲突域)。
如图所示:
随着交换式以太网规模的扩大,广播域相应扩大,巨大的广播域会带来很多弊端:广播风暴、难以维护和管理、潜在的安全问题等。
分离广播域可以采用两个方法:使用路由器和采用虚拟局域网VLAN技术。
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组技术,这些逻辑组具有某些共同的需求。
如图所示:
主要采用IEEE 802.1Q帧 和 交换机的端口类型两种方式实现虚拟局域网
VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网属于哪一个VLAN。VID的有效取值范围是1~4094。
802.1Q帧是由交换机来处理的,而不是用户主机来处理的。当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧。