一、数据链路层
主机H1向H2发送数据
路由器在转发分组时使用的协议栈只有下面的三层,数据进入路由器后要先从物理层上到网络层,在转发表中找到下一跳的地址后,再下到物理层转发出去
数据链路层使用的信道主要有以下两种类型:
- 点对点信道:使用一对一的点对点通信方式
- 广播信道:使用一对多的广播信道方式,广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送
1、使用点对点信道的数据链路层
1)、数据链路和帧
点对点信道的数据链路层在进行通信时的主要步骤:
1)结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧
2)结点A把封装好的帧发送给结点B的数据链路层
3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报交给上面的网络层;否则丢弃这个帧
2)、数据链路层要解决的三个基本问题
1)封装成帧
- 封装成帧就是在一段数据的前后分别添加和尾部,然后就构成了一个帧
- 首部和尾部的一个重要作用就是进行帧定界
2)透明传输
发送端的数据链路层在数据中出现控制字符SOH或EOT的前面插入一个转义字符ESC。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充或字符填充
如果转义字符也出现在数据当中,那么应在转义字符前插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个
3)差错检测
比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1,这就叫比特差错
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率,误码率与信噪比有很大的关系
为了保证数据传输的可靠性,数据链路层使用循环冗余检验CRC的检错技术
在发送端,先把数据划分为组,假定每组k个比特,现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位
这n位冗余码可用以下方法得出:用二进制的模2运算进行 乘M的运算,这相当于在M后面添加n个0。得到的(k+n)位的数除以收发方先商定的长度为(n+1)位的除数P,得出商是Q而余数是R(n位)
上图案例中,M=101001,除数P=1101,得出余数为001,这个余数作为冗余码拼接在数据M的后面发送出去。这种为了进行检错而添加的冗余码常称为帧检验序列FCS。因此加上FCS后发送的帧是101001001
在接收端把接收的数据以帧为单位进行CRC检验:把收到的每一个帧都除以同样的除数P,然后得到的余数R
如果在传输过程中无差错,那么经过CRC检验后得到的余数R肯定是0(如果出现误码,余数仍然是0的概率非常非常小)
- 若得出的余数R=0,则判定这个帧没有差错,就接受
- 若余数R≠0,则判定这个帧有差错,就丢弃
2、点对点协议PPP
1)、PPP协议的特点
互联网用户通常都要连接到某个ISP才能接入到互联网,PPP协议就是用户计算机和ISP进行通信时所用的数据链路层协议
PPP协议有三个组成部分:
- 一个将IP数据报封装到串行链路的方法。PPP既支持异步链路,也支持面向比特的同步链路
- 一个用来建立、配置和测试数据链路连接的链路控制协议LCP
- 一套网络控制协议NCP
2)、PPP协议帧格式
首部的第一个字段和尾部的第二个字段都是标志字段F,规定为0x7E(0x标识后面的字符是用十六进制表示的),标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符
首部中的地址字段A规定为0xFF,控制字段C规定为0x03。这两个字段并不起什么作用
PPP搜捕的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。若为0xC021,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这是网络层的控制数据
信息字段的长度是可变的,不超过1500字节
尾部中的第一个字段是使用CRC的帧检验序列FCS
字符填充:
-
将信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D,0x5E)
-
若信息字段中出现一个0x7D的字节,则将其转变成为2字节序列(0x7D,0x5D)
-
若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变
零比特填充:
PPP协议用在SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)。这时PPP协议采用零比特填充方法来实现透明传输
在发送端,只要发现有5个连续1,则立即填入一个0。接收端对帧中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除
3)、PPP协议的工作状态
1)当用户拨号接入ISP时,路由器的调制解调器对拨号做出确认,并建立一条物理连接
2)PC机向路由器发送一系列的LCP分组(封装成多个PPP帧)
3)这些分组及其响应选择一些PPP参数,和进行网络层配置,NCP给新接入的PC机分配一个临时的IP地址,使PC机成为因特网上的一个主机
4)通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接。最后释放的是物理层的连接
3、使用广播信道的数据链路层
1)、局域网的数据链路层
局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限
局域网具有如下的一些主要优点:
- 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源
- 便于系统的扩展和逐渐演变,各设备的位置可灵活调整和改变
- 提供了系统的可靠性、可用性和生存性
共享信道在技术上有两种方法:
1)静态划分信道
- 频分复用
- 时分复用
- 波分复用
- 码分复用
这种划分信道的方法代价较高,不适合于局域网使用
2)动态媒体接入控制
又称为多点接入,其特点是信道并非在用户通信时固定分配给用户,分为:
- 随机接入:特点是所有的用户可随机地发送消息。但如果恰巧有两个或更多的用户在同一时刻发送消息,那么在共享媒体上就要产生碰撞,使得这些用户的发送都失败。因此,必须有解决碰撞的网络协议
- 受控接入:如多点线路探询
2)、CSMA/CD(载波监听多点接入/碰撞检测)协议
- 多点接入:总线型网络,许多计算机以多点接入的方式连接在一根总线上
- 载波监听:用电子技术检测总线上有没有其他计算机也在发送。不管在发送前,还是在发送中,每个站都必须不停地检测信道。在发送前检测信道,是为了获取发送权。如果检测出已经有其他站在发送,则自己就暂时不许发送数据,必须要等到信道变为空闲时才能发送。在发送中检测信道,是为了及时发现有没有其他站的发送和本地发送的碰撞
CSMA/CD协议特性:
使用CSMA/CD协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)
每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率
争用期:
最先发送数据帧的站,在发送数据帧后至多经过时间2τ(端到端往返时间)就可直到发送的数据帧是否遭受了碰撞
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
- 以太网的端到端往返时延2τ称为争用期,或碰撞窗口。通常,取51.2μs为争用期的长度
- 对于10Mb/s以太网,在争用期内可发送512bit,即64字节
- 以太网在发送数据时,若前64字节未发生冲突,则后续的数据就不会发生冲突
最短有效帧长:
- 如果发生冲突,就一定是在发送的前64字节之内
- 由于一检测到冲突就立即停止发送,这时已经发送出去的数据一定小于64字节
- 以太网规定了最短有效帧长为64字节,凡长度小于64字节的帧都是由于冲突二异常中止的无效帧
二进制指数退避算法:
发生碰撞的站在停止发送数据后,要推迟一个随机时间才能再发送数据
-
确定基本退避时间,一般取值争用期2τ
-
定义参数k:k=Min[重传次数,10]
-
从整数集合[0,1,2…,(2k-1)]中随机地取出一个数,记为r,重传所需的时延就是r倍的基本退避时间
-
当重传16次仍不能成功时即丢弃该帧,并向高层报告
3)、以太网的信道利用率
一个帧从开始发送,经可能发生的碰撞后,将再重传数次,直到发送成功且信道转为空闲时为止,是发送一帧所需的平均时间
占用信道时间=发送时间 +传输时间τ
要提高以太网的信道利用率,就必须减小τ与 之比,
- 当a->0时,表示只要一发生碰撞,就立即可以检测出来,并立即停止发送,因而信道利用率就很高
- a越大,表明争用期所占的比例增大,每发生一次碰撞就浪费许多信道资源,使得信道利用率明显降低
在理想化的情况下,以太网上的各站发送数据都不会发生碰撞,即总线一旦空闲就有某一个站立即发送数据
发送一帧占用线路的时间是 ,而帧本身的发送时间是 。可以计算出理想情况下的极限信道利率用 为:
4)、以太网的MAC层
每个网卡有一个全球唯一的MAC地址,也称为硬件地址或物理地址,共由48位二进制组成,前24位标识厂家,后24位厂家指定
适配器(网卡)从网络上每收到一个MAC帧就首先用硬件检查MAC帧中的目的地址
- 如果是发往本站的帧则收下,然后再进行其他的处理
- 否则就将此帧丢弃,不再进行其他的处理
发往本站的帧包括以下三种:
- 单播帧(一对一),即收到的帧的MAC地址与本站的硬件地址相同
- 广播帧(一对全体),即发送给本局域网上所有站点的帧
- 多播帧(一对多),即发送给本局域网上一部分站点的帧
MAC帧的格式:
以太网规定了最短有效帧长为64字节,数据字段的最小长度最短为46字节(最小长度64字节-18字节的首部和尾部)
无效的MAC帧:
- 帧的长度不是整数个字节
- 用收到的帧检验序列FCS查出有差错
- 收到的帧的MAC客户数据字段的长度不在46-1500字节之间。MAC帧首部和尾部的长度共有18字节,可以得出有效的MAC帧长度64-1518字节之间
对于检查出的无效MAC帧就简单地丢弃,以太网不负责重传丢弃的帧
帧间最小间隔为9.6μs,相当于96bit的发送时间(一个站在检测到总线开始空闲后,还要等待9.6μs才能再次发送数据),这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做接收下一帧的准备
4、扩展的以太网
以太网上的主机之间的距离不能太远(例如,10BASE-T以太网的两台主机之间的距离不超过200米),否则主机发送的信号经过铜线的传输就会衰减到使CSMA/CD协议无法正常工作
1)、在物理层考虑扩展
主机使用光纤和一对光纤调制解调器连接到集线器,光纤调制解调器的作用就是进行电信号和光信号的转换。由于光纤带来的时延很小,并且带宽很宽,因此使用这种方法可以很容易地使主机和几公里以外的集线器相连接
一个学院的三个系各有一个10BASE-T以太网,可通过一个主干集线器把各系的以太网连接起来,成为一个更大的以太网
用集线器扩展局域网的优点:
- 使原来属于不同碰撞域的局域网上的计算机能够进行跨碰撞域的通信
- 扩大了局域网覆盖的地理范围
用集线器扩展局域网的缺点:
- 碰撞域增大了,但总的吞吐量并未提高
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来
2)、在数据链路层考虑扩展
在数据链路层扩展局域网是使用网桥,网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发
网桥具有过滤帧的功能,当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口
以太网的交换机实质上就是一个多接口的网桥
自学习算法:
A先向B发送一帧,从接口1进入到交换机。交换机收到帧后,先查找交换表,没有查到应从哪个接口转发这个帧。接着,交换机把这个帧的源地址A和接口1写入交换表中,并向除接口1以外的所有接口广播这个帧。C和D将丢弃这个帧,因为目的地址不对。只B才收下这个目的地址正确的帧
- 若从A发出的帧从接口x进入了某网桥,那么从这个接口出发沿相反方向一定可把一个帧传到A
- 网桥每收到一个帧,就记下其源地址和进入网桥的接口,作为转发表中的一个项目
- 在建立转发表时是把帧首部中的源地址写在地址这一栏的下面
- 在转发帧时,则是根据收到的帧首部中的目的地址来转发的。这时就把在地址栏下面已经记下的源地址当做目的地址,而把记下的进入接口当作转发接口
使用网桥扩展以太网的优点:
- 过滤通信量
- 扩大了物理范围
- 提高了可靠性
- 可互连不同物理层、不同MAC子层和不同速率的局域网
使用网桥扩展以太网的缺点:
- 存储转发增加了时延
- 在MAC子层并没有流量控制功能
- 具有不同MAC子层的网段桥接在一起时时延更大
- 网桥只适合于用户数不太多和通信量不太大的局域网,否则有时还会因广播过多的广播信息而产生网络拥塞。这就是所谓的广播风暴
3)、虚拟局域网
虚拟局域网VLAN是由一些局域网网段构成的与物理位置无关的逻辑组
- 这些网段具有某些共同的需求
- 每一个VLAN的帧都有一个明确的标识符,指明发送这个帧的工作站是属于哪一个VLAN
虚拟局域网只是局域网LAN给用户提供的一种服务,并不是一种新型局域网
10台计算机分配在三个楼层中,构成了三个局域网,即:
:( , , , ), :( , , ), :( , , )
但这10个用户划分为三个工作组,也就是说划分为三个虚拟局域网VLAN。即:
:( , , , ), :( , , ), :( , , )
一个VLAN=一个广播域=逻辑网段(子网)
5、高速以太网
100BASE-T以太网:
100BASE-T以太网可在全双工方式下工作而无冲突发生,因此,不使用CSMA/CD协议,MAC帧格式仍然是802.3标准规定的
保持最短帧长不变,但将一个网段的最大电缆长度减小到100m,帧间时间间隔从原来的9.6us改为现在的0.96us
吉比特以太网:
吉比特以太网允许你在1Gb/s下全双工和半双工两种方式工作,使用802.3协议规定的帧格式,在半双工方式下使用CSMA/CD协议,与10BASE-T和100BASE-T技术向后兼容
当吉比特以太网工作在全双工方式时,不使用载波延伸和分组突发
推荐学习资料:
韩老师讲高校《计算机网络原理》:https://www.bilibili.com/video/BV1Tb411x7CE?p=1