网络协议底层原理(五):数据链路层

一、什么是数据链路
    1. 什么是链路?链路就是从1个节点相邻节点的一段物理线路,无论是无线还是有线的,并且中间没有其他交换节点,如下图所示,下图中每个红框圈出来的,都是一段链路!
      image.png
  • 2.什么是数据链路?数据链路就是在一段链路上传递数据,我们知道传递数据需要事先约定好协议,所以链路上传输数据时,会有对应的通讯协议来控制数据的传输

    1. 不同类型的链路,所遵守的通讯协议是不一样的,如下图所示,计算机到路由器传输数据采用CSMA/CD协议,路由器到路由器传输数据采用PPP协议;(注意这里的协议说的是数据链路层用的协议!!!)
    • 广播信道(把消息广播出去的信息通道),就采用CSMA/CD协议, 例如同轴电缆和集线器组成的链路

    • 点对点信道(把消息单对单传输出去的信息通道),就采用PPP协议,例如两个路由器之间的链路

      不同链路传输数据,采用的协议不同

    1. 只是要数据链路层,无论传输数据时,采用什么协议,都会面临三个问题:封装成帧、透明传输、差错校验,只要解决了这三个问题,我们就能完整的把数据通过数据链路层传输出去,我们来看看前辈们是怎么解决这三个问题的
二、封装成帧
    1. 封装成帧指的是,如何把网络层传递过来的数据,封装成数据链路层传递的数据,数据链路层 数据的单位是: ,所以叫做封装成帧
    1. 前辈们是这么设计的,将网络层传过来的数据(也就是IP数据包),放在中间,两边加上帧开始符帧结束符,组成一帧,要注意的是,每个帧的数据部分都有一个最大传输单元(MTU),也就是上层传递过来的IP数据包,必须小于MTU才行,如下图所示
      image.png
    1. 每种数据链路层的协议都规定了最大传输单元MTU的大小,以太网(也就是CSMA/CD协议)规定的MTU是1500个字节
三、透明传输
    1. 我们传输数据时,要根据帧开始符号帧结束符判断出来哪块数据是一个完整的,如果帧的数据部分出现了帧开始符或者帧结束符怎么办呢,就无法划分出完整的了,针对这种情况,前辈们想出来了一个解决方案,让你不用关心数据是如何转化的,一个完整的帧经过数据链路传输以后,还可以得到完整的帧,我们把这个传输过程成为:透明传输
    1. 前辈们是如何设计透明传输的呢?其实很简单,如下图所示,SOH帧开始符EOT帧结束符,当中间的数据部分出现帧开始符SOH或者帧结束符EOT或者转义字符ESC时,就往这个字节后面插入一个转义字符ESC,判断帧是否结束时,就看下帧结束符前边有没有转义字符就可以了,没有就代表是真正的帧结束符;效果就是:从结点A发出去的帧是怎样的,经过链路传输以后,结点B收到的帧也是怎样的
      image.png
四、差错校验
    1. 差错校验是指:万一传输过程中出现了错误,怎么校验出来呢?例如收到信号干扰导致某个位错误了 ,怎么能知道错误呢?
  • 2.前辈们是这么设计的:在帧的尾部放上了一个字段,叫做FCS,这个字段的值是:通过帧的数据部分+数据链路层的首部组合起来计算出来的一个哈希值,传输过去以后,就再次计算一下FCS,与传递过来的FCS做比较,如果不一致,就认为传输出错了,网卡就会把这个帧扔掉

    image.png

五、以太网帧
    1. CSMA/CD协议,全称是Carrier Sense Multiple Access with Colision Detectio,翻译过来就是载波侦听多路访问/冲突检测,意思就是只要遵守这个协议,就具备载波侦听(监听这个线路有没有数据在传输)、冲突检测(收到的数据是冲突产生的回波,还是真实数据)的能力;(一般在集线器时代,用这个协议比较多;现在用的交换机已经具备了全双工通讯了,也就不需要这个协议了)
    1. 使用CSMA/CD协议的网络可以称为以太网(Ethernet),它传输的是以太网帧
    • 以太网帧的格式有:Ethernet V2标准、IEEE的802.3标准,不同标准的帧的格式不一样

    • 目前以太网使用最多的是:Ethernet V2标准

    1. 为了能检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节
    1. 用交换机组件的网络,已经支持全双工通讯了,不再需要使用CSMA/CD协议了,但是它传输的帧依然是以太网帧,所以交换机组建的网络依然可以叫做以太网
六、以太网的Ethernet V2帧
    1. 以太网帧的Ethernet V2标准格式如下图所示,在数据链路层这一行,最左边是帧的首部,中间是帧的数据部分,最右边是帧的尾部
    • 帧的首部,没有帧开始符,只剩下目标Mac地址、源Mac地址、类型了,类型就是IPv4或者IPv6;

    • 帧的数据部分,是网络层传递过来的数据,如果不够64字节,会自动填充;

    • 帧的尾部,只剩下FCS这个哈希值了,用来进行差错校验的;

image.png
    1. Ethernet V2帧之所以没有帧开始符和帧结束符,是因为以太网采用了曼彻斯特编码,接受帧的过程只要发现信号没有跳变,就认为帧结束了,这是一种通信技术,不在咱们此次研究范围内,了解即可
    1. 以太网的一个标准的Ethernet V2帧就长下面这个样子,由:帧的首部 + 帧的数据部分 + 帧的尾部组成,长度范围是64~1518字节
      image.png
七、PPP帧

PPP帧长下面这个样子,因为是点对点信道,所以不需要源Mac地址和目标Mac地址了,但是多了帧开始符和帧结束符

image.png

八、总结
    1. 相邻物理线路之间传输数据就是数据链路,不同链路之间遵守的通讯协议不同,根据通讯协议,我们可以把常见的数据链路层的帧分为:以太网帧PPP帧,如下所示:
    • 计算机和路由器之间、交换机和路由器之间的数据传输,用的是以太网帧

    • 路由器和路由器之间的数据传输,用的是PPP帧

image.png
    1. 从网络层传递下来的IP数据包,从计算机0计算器1的过程中,会以的形式进行传输,帧的数据部分不会变,变得是帧的首部和帧的尾部,帧的首部和尾部会随着链路不同发生变化,例如:以太网帧就没有帧开始/结束符,PPP帧就没有源Mac地址和目标Mac地址!!!
    1. 以太网帧和PPP帧的区别在于:以太网帧有目标/源mac地址,没有帧开始和帧结束符;PPP帧没有mac地址,多了帧开始和结束符;为什么会有这种差别呢?
    • 以太网帧有目标/源mac地址,而PPP没有?- 是因为以太网帧的协议是广播协议,会给这个网段的所有的设备发送数据,所以要知道目标mac地址才好确认是发给谁;而PPP协议是点对点协议(Ponit to Point Protocol),用于两个路由器直接相连,不需要mac地址就可以传输过期;

    • 以太网没有帧开始结束符,而PPP有? - 是因为以太网使用的是曼特斯特编码,接受的时候发现有信号跳变,就认为帧结束了,所以没有帧开始结束符

    1. 网卡工作于数据链路层和物理层;交换器、集线器工作于物理层;路由器工作于网络层、数据链路层、物理层
    1. WireShark抓包工具,抓到的帧没有FCS,因为FCS会在网卡进行差错校验后扔掉

你可能感兴趣的:(网络协议底层原理(五):数据链路层)