第三章 数据链路层(上)

基本概念

网络收发模型

 
如图:
在这里插入图片描述

  •        首先是主机H1想要跟主机H2通信,那么需要首先将数据进行封装,先在运输层分段,然后在网络层加上地址,在数据链路层加上MAC地址,封装成帧,在物理层上进行数据传输。
  •        然后到达路由器R1,事实上与H1相连的每一台路由器都会收到这个数据,但是通过路由器数据链路层的检查来确定是不是给自己的。如果是,R1将会继续检查数据帧的网络层地址,然后决定从哪一个端口发出。确定好端口之后,R1会对数据帧进行再次封装,发送给R2,以此类推。
  •        最后到达H2,H2会对数据帧进行拆解,从而得到数据信息。

数据链路层只关心数据是如何封装的,是如何进行传输的。如图:
在这里插入图片描述也就是只关心链路层的问题。

数据链路层的信道类型

  1. 点对点信道:一对一的点对点通信方式。也就是主机跟主机的一对一通信
  2. 广播信道:这种信道采用一对多的广播通信方式,过程比较复杂,连接的主机较多。比如学校的大型机房,通过集线器连接起来的通信方式。

链路与数据链路

  1. 链路(link)是一条点对点的物理线路段,中间没有其他的点。一条链路仅仅是一条通路的一个组成部分。
  2. 数据链路(data link)除了物理线路外,还必须有通信协议来控制这些数据的传输。如果把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

在这里插入图片描述

  • 在数据链路层传输的就是帧。
  •        我们来看下过程,网络层添加完IP地址之后,进入到数据链路层,这个时候,数据链路层会加上帧头和帧尾如图(1010和0110),然后在物理层以比特流的方式传输,到达目的主机之后,目的主机的数据链路层会自动识别出帧头和帧尾,然后进行处理。

数据链路层的三个基本问题

  1. 封装成帧
  2. 透明传输
  3. 差错控制

封装成帧

简单理解

  •        封装成帧:我们在对话的时候是一句话一句话的说出来,倾听者知道从哪里开始断句,同样计算机在传输数据的时候,源主机通过把数据封装成帧,得让目的主机知道,这个帧从哪开始,从哪结束。

定义:

  • 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个数据帧。确定了帧的界限。
  • 首部和尾部的重要作用就是进行帧定界。

透明传输

  • 若传输的数据是ASCLL码中“可打印字符(95个)”集时,没有问题。
  • 若传输的数据还包含“可打印字符”之外的字符时,就会出问题了。

什么问题呢?

  •        想想,数据链路层是把数据加头加尾来封装成帧(比如0010,1001),但是如果数据段里面也含有1001,那么目的主机在解析时很可能没有解析到真正的尾部而得到一个不完整的数据帧。那就数据错误了。
    怎么解决呢?

用字节填充法解决透明传输的问题

  •        我们想想,大学的时候都学习过C语言这门课程,在学习到转义字符时我们是如何处理的呢?我们可以在特殊字符的前面加上一个‘\’来表示接下来的数据有特殊的功能,那么如何输出‘\’呢,我们需要在前面再加一个‘\’,也就变成了‘\\’,就OK了。
  •        同样在解决这个问题的时候,也是同样的原理。如图:在这里插入图片描述
  • 发送端的帧头为SOH,帧尾为EOT,在进行封装的时候,帧头和帧尾不做处理,但是在原始数据中间,出现SOH和EOT的时候,立刻在前面加上ESC,代表转义字符,让目的主机知道ESC后面的数据为原始数据,不做任何处理;如果遇到ESC时,那么在ESC前面再加上一个ESC进行标记。然后就可以传输了。
  • 接收端在对数据帧进行分析的时候,遇到帧头就开始处理,遇到ESC时直接丢掉ESC(如果两个ESC连续,则丢掉第一个ESC,保留后面内容),然后后面的数据不做处理,直到遇到真正的EOT结束。
  • 这个过程就叫做透明传输,在传输的过程中,我们对原始数据加一些字符,别人并不知道。不影响数据的正确性。

差错控制

  • 传输过程中可能会产生比特差错,1可能变成0,0也有可能会变成1。
  • 在一段时间内,传输错误的比特占所有比特总数的比率称之为误码率。
  • 误码率与第一章讲的信噪比有很大的关系。

那么怎么检验传输的一段数据是否发生错误呢,这里就引入了循环冗余检验(CRC)的思路了。具体的步骤就不做详细说明了。抽象描述一下:

  •        一段比特流除以一个除数之后,就会得到一个商,还有一个余数(FCS)。如果余数为0,代表没有出错,非0,就有错误,直接扔掉。两台计算机在通信的时候,以哪一个数作为除数,是两台计算机的数据链路层协议来实现的,用户不用关心,交给网卡就好了。
  •        从上面的描述,可以发现CRC是一种无差别的检验,在数据链路层它只负责接收和扔掉数据,并不会要求对方重新传输,只有在目的主机接收到数据之后,发现数据少了一个数据帧,它会要求源主机重新传输数据。

两种情况下的数据链路层

  1. 使用点到点信道的数据链路层
  2. 使用广播信道的数据链路层

使用点到点信道的数据链路层

PPP协议(点到点协议)使用场合

  • 全世界使用最多的数据链路层协议就是点对点协议(PPP协议)。
  • 用户使用拨号电话线接入因特网时,使用的也是PPP协议。

PPP协议的组成

  • 1992年制定了PPP协议。经过1993年和1994年修订,PPP协议成为因特网的正式标准。

  • PPP协议有三个组成

  •        数据链路控制协议可以用于异步串行和同步串行介质。

  •        使用LCP(链路控制协议)建立并且维护数据链路连接。这个协议非常关键,它会检验我们的身份,会检验我们的宽带是否到期等等,只有它通过,用户才可以继续上网。

  •        网络控制协议(NCP)允许在点到点连接上使用多种网络层协议。
    如图:在这里插入图片描述
     
    PPP协议的格式(重中之重)
    先看图片:在这里插入图片描述
    一个PPP协议帧包含以上的内容:

  • 先看开头和末尾的F,分别占用一个字节,也就是帧头和帧尾为7E(比特流为01111110)。

  • 接下来是A和C,分别占用一个字节,A(FF)代表目的主机,是一个固定不变的序列,C(03)也同样代表一个固定不变的序列。

  • 接下来两个字节,一共16位比特流,标识信息部分是什么类型的数据,如下图:在这里插入图片描述每一个标识码代表不同的数据类型。

  • 接下来就是信息部分,数据里面很可能会出现7E,作为结束符。那么怎么避免了,就用到了上一小节说到的转移字符(字节填充或者零比特填充法),来避免这个问题的出现。

  • 然后就是FCS,帧检验序列,用来检验这一条数据帧是否出现差错。占用两个字节。事实上,帧检验序列越长,检验的准确度越高。比如说十进制数据100100,我们用2检验,以及用100检验的效果就不一样,如果数据变为100110,用2检验的话数据依然没有错误,但是用100检验,这个数据就出现了错误。同理二进制也是如此。
     

PPP协议不使用序号和确认机制

  • 在数据链路层出现差错的概率不大时,使用比较简单的PPP协议比较合理。
  • 在因特网环境下,PPP的信息字段放入的数据是IP数据报。数据链路层的可靠传输并不能保证网络层的传输也是可靠的。
  • 帧检验序列FCS字段可以保证无差错的接受。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺的碎冰冰~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值