【计算机网络 | 第五篇】计网之链路层

目录

一、数据链路层概述

二、链路层的三个问题

1、封装成帧

[● 帧(Frame)](#● 帧(Frame))

[● 最大传输单元MTU(Maximum Transfer Unit)](#● 最大传输单元MTU(Maximum Transfer Unit))

[● 以太网V2的MAC帧简要概述](#● 以太网V2的MAC帧简要概述)

[● PPP帧简要概述](#● PPP帧简要概述)

2、透明传输

3、差错检测

4、CRC循环冗余校验

CRC举例:

[三、Ethernet V2标准](#三、Ethernet V2标准)

[3.1、Ethernet V2帧的格式标准](#3.1、Ethernet V2帧的格式标准)

[3.2、Ethernet V2帧长度标准](#3.2、Ethernet V2帧长度标准)

3.3、以太网MAC帧协议

四、PPP协议

4.1、PPP概述

4.2、PPP帧

结语


那么这一篇章呢,就会用到我们此系列的第二款软件------Wireshark(一种网络抓包软件)这个直接去官网就能找到,且不用注册登录什么的,但要注意下:有些人点进去后发现页面什么都没有,那就说明你的网络抓包库可能太旧了,在这里我推荐一个网络抓包库------Npcap,这个也能在官网下,如有需求,自行下载即可。若还是不行,那在博客上面找找有无其他解决方案。下图为进入后正常界面。

那么现在正式进入我们计算机网络的重中之重------计算机网络端系统体系结构分层,这一篇章我们来讲解一下其中的数据链路层****。但我们讲解的重心其实并不在链路层,而在我们的****网络与传输层上,这两个才是我们的重中之重。

当然,我们的链路层中也有很多的重要的东西,今天呢我就带着大家来 看看这其中的"小九九"。

一、数据链路层概述

**●**链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。

数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

**●**不同类型的数据链路,所用的通信协议可能是不同的

○ 广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)

○ 点对点信道:PPP协议(比如2个路由器之间的信道)

计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能

二、链路层的三个问题

1、封装成帧

我们的数据其实就是10101010110...的一系列1和0我们的数据从应用层开始 +应用层的头 +传输层的头 +IP头,然后把这样的数据包想办法往物理层上传,而物理层其实是只关心电气规范,也就是什么样的电压代表高,什么样的电压代表低。现在我们的问题是如何让数据从物理层传过去对方收到后,如何看懂这一系列的1和0。

也就是说,现在我们需要在这一堆0和1组成的数据前或后再加上一些数据使得接收端能看懂哪些是我们上层传来的数据,从而才能让接收端不断的收收收。但此处的内容要求是由厂家自己来定的,而不像我们TCP/IP,UDP都是已经规定好了的协议。

当然我们这个头不止会有从哪开始从哪结束的标志,还会有一些状态,一会我们会看到。

**●**帧(Frame)的数据部分,就是网络层传递下来的数据包(IP数据包,Packet)

但此处我们的这个IP包能过于大吗 ,如果太大的话,那么我们在传输的过程中先不说极其占用网络资源环境, 首先如果这么长的数据中要是有一个小点错了,那么我们这个包不就全错了吗,那接收端就得要求重发,这个效率是极低的,所以我们定义了一个重要的概念------MTU。

**●**最大传输单元MTU(Maximum Transfer Unit)

○ 每一种数据链路层协议都规定了所能传送的帧数据长度上限

○ 以太网的MTU为1500字节

**●**以太网V2的MAC帧简要概述

我们可以看到(从右往左看),接收端首先就会看到我们的目的地址和源地址 ,然后就可以看到我们的类型了,那么这个类型到底是什么意思呢,我们现在来讲解:

现在假如我们有两种包,一种是HTTP协议的包一种是QUIC的包 ,那么我们现在将这个两个包发给接收端,当接收端现在收到了其中的一种包,那接收端怎么知道这个包该发到哪个服务上呢,于是我们现在我们就在包前的帧中存了一个类型F ,我们假如这个类型占了2个bit ,那么我们就可以用00来表示HTTP,01表示QICQ,10表示SSH,11表示xxx(任意),那么此时我们就可以让接收端知道这个包该往哪发了。

然后,我们再看,发现我们以太网V2的MAC帧总共最小值也得是64B,请记住这个值,我们要是学过网络层,就会发现其实如果哪怕我们从应用层发来的内容最终在链路层不够64B,那么我们的链路层是会补上这个值的。现在我们有了这个想法过后,我们通过一个案例来看看这个现象

可以看到,我们现在抓的这个包即为一个只有54B的包,我们看右边的信息,我们前六位就是目的地址,再后面六位就是源地址,那么最后两位就是我们的类型了,这里代表着我们应该给IPv4也就是网络层里,如果这里是ARP的话,那么我们就应该交给管理ARP的一个软件了(这里只是想提醒下我们交给的不一定是哪一层,也有可能是其他的软件或者其他),除了这14B数据剩余的40B就都是我们下面其他协议与数据本身构成的了,那肯定有人会问了那上面那个FCS去哪了。这个FCS其实代表着校验,那么其实我们抓包软件抓到的包肯定都是校验成功了的,故我们就会去掉这块的数据,但其实我们发的包是有58B字节的,而不够64B的8个B也被我们链路层自己填充了。

**●**PPP帧简要概述

**●**封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。

○ 帧的首部和尾部中包含有一些重要的控制信息。

○ 帧首部和尾部的作用之一就是帧定界。

○ 并不是每一种数据链路层协议的帧都包含有帧定界标志。

可以看到我们现在就没有任何的MAC地址了,不过我想强调的是这块的协议其实就是刚才我们以太网V2中讲的"类型" ,且此处我们可以看到PPP帧是有开始和结束标志的 ,在跟我们一开始那张图进行比较,我们一开始看到的是我们链路层通用的规则是都有帧开始和结束,但我们发现刚才的以太网就没有。其实,我们以太网是有一种特殊的做法,是物理层指定以太网必须这么做,但原因是学电子才会涉及的,在此不多赘述。此处我们只看下是怎么做的。

后面的前同步码 就相当于是跑步中的预备 ,而当识别到帧开始定界符 就说明可以看我们帧的内容了。

2、透明传输

那么透明传输 就是为了上层会担心下层因为帧结束符与数据载荷一模一样导致提前截断数据的情况。

● 面向字节的物理链路使用字节填充的方法实现透明传输。

我们会在重复的标志前加上ESC标志,这个标志可以理解为我们ASCII码中的控制字符,接收端一看到我们的ESC就会将后面的特殊字符识别为数据而非原意。就跟我们c语言中的 "\n" 一样,当看到这个标志后,它就会把后面的n自动识别为转义字符而非单纯的"\+n"。

● 面向比特的物理链路使用比特填充的方法实现透明传输。

可以看到当我们在正常数据中发现五个连续的1后,我们就加了一个0,这样不就绝对不不会冲突了吗?****(此处确实只要是5个连续的1就加0不管后面是不是 第6个1)

依旧是一道练手的考研真题,HDLC协议就是我们上面讲的面向比特的物理链路,答案是A。

3、差错检测

● FCS是根据数据部分 + 首部计算得出的

也就是我们刚讲过的东西,注意此处FCS一定是在后面放的但在以后我们网络层和传输层学的协议中差错检测是可以在中间放的。

当然校验方法有很多种,在此只简单说几种:

奇偶校验------

**现在有一串数1010111001?(?就是校验位)****本意就是数据 + 校验位后,1的个数为奇数那么就是奇校验,那么偶校验也是同理,**我们接收端只需要数1的个数即可,关于此处的算法就是异或运算,这个也是学硬件那边的,在此只作提示。奇校验其实现在还是有很大问题的,出错两位以上就会校验失败,容错率非常低,已经几乎不再使用了,也没必要用,我们目前经常使用的也就是我们的CRC校验了。

4、CRC循环冗余校验

● 数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。

● 基本思想:

○ 收发双方约定好一个生成多项式G(X)。

○ 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输。

○ 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。

● 发送方CRC操作

● 接收方CRC操作

CRC举例:

考虑到可能光看图片并没有看的太懂,这里我就再说下举例内容。

G(x) = , 那么我们生成多项式各系数组成的比特串就为1*1/1*1/1*0/1*1最终为1101,可以看到我们X的次方是多少,那么系数对应到比特串位后就有几个0,然后对于"构造被除数"不用想这么复杂,你就想1101不是有3位吗(从第一个1后面开始数)那么我们在后面补3个0最后才能对上,然后就是二进制的除法其实就是进行异或运算,这个商的算法就是看我们位数的个数,也就是如果你现在被除数有足够的拿出来位数和除数相等的数那就商1,若小于就商0并拿我们之前补的那几个0再进行查看,此时如果够那就商1,还不够那就说明余数不为0那就说明传输过程产生了错误(如上图中下面那个)。

这就是CRC的过程。

三、Ethernet V2标准

● 以太网帧的格式有

○ Ethernet V2标准 (使用最多)

○ IEEE的802.3标准

● 为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节

这里就是我们刚才没讲完的原因:也就是冲突问题,现在假如有3台设备A,B,C,但此时线路只有一根,我们让A向B发数据包,此时如果数据包太短,那么A已经向B发送完了自己的包,而B接收过程中,此时如果C也想向B发包那么A是不会阻拦的,那么就导致了最终A的包没发完就被C给截胡了的情况。

● 用交换机组建的网络,已经支持全双工通信,不需要再使用CSMA/CD协议,它传输的帧依然是以太网帧

3.1、Ethernet V2帧的格式标准

此处跟一开始讲的差不多,相当于又进行了二次整理

● 格式说明

○ 首部:目标MAC + 源MAC + 网络类型

○ 以太网帧:首部 + 数据 + FCS

○ 数据的长度至少是:64 - 6 - 6 - 2 - 4 = 46字节

3.2、Ethernet V2帧长度标准

● 当数据部分的长度小于46字节时

数据链路层会在数据的后面加入一些字节填充

接收端会将添加的字节去掉

● 长度总结

○ 以太网帧的数据长度:46 ~ 1500字节

○ 以太网帧的长度:64 ~ 1518字节

3.3、以太网MAC帧协议

● 接收方可能收到的无效MAC帧包括以下几种:

MAC帧的长度不是整数个字节

通过MAC帧的FCS字段的值检测出帧有误码

MAC帧的长度不在64 ~ 1518字节之间

接收方收到无效的MAC帧时就简单将其丢弃,以太网的数据链路层没有重传机制。

四、PPP协议

4.1、PPP概述

● 点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议。

● 点对点协议PPP是因特网工程任务组(Internet Engineering Task Force,IETF)于1992年制定 的。经过多次修订,目前PPP已成为因特网的正式标准[RFC1661,RFC1662]。

● 点对点协议PPP主要有两种应用:

○ 因特网用户

○ 广域网路由器链路

4.2、PPP帧

标志(Flag)字段:PPP帧的定界符,取值为0x7E。

地址(Address)字段 :取值为0xFF,预留(目前没有什么作用)。

控制(Control)字段 :取值为0x03,预留(目前没有什么作用)。

协议(Protocol)字段:其值用来指明帧的数据载荷应向上交付给哪个协议处理。

结语

那么关于计网有关链路层的讲解就到这里了。

我是YYYing,后面还有更精彩的内容,希望各位能多多关注支持一下主包。

无限进步, 我们下次再见。

系列上期内容:【计算机网络 | 第四篇】路由与NAT技术

系列下期内容:暂无

相关推荐
一代明君Kevin学长2 小时前
记录一个上手即用的Spring全局返回值&异常处理框架
java·网络·python·spring
Xの哲學3 小时前
Linux自旋锁深度解析: 从设计思想到实战应用
linux·服务器·网络·数据结构·算法
软件小滔3 小时前
我使用MAC WiFi Explorer Pro完成了一次家庭网络“大扫除”
网络·macos·智能路由器·mac·应用推荐·wifi explorer
Q_21932764553 小时前
基于STM32的智能家居安防系统设计
网络·stm32·智能家居
活蹦乱跳酸菜鱼3 小时前
MAC 发出的一个帧(MAC Frame)及其完整的帧格式
网络·macos
云安全干货局3 小时前
游戏服务器遭DDoS瘫痪?高防IP部署全流程+效果复盘
网络·人工智能·高防ip
一颗青果3 小时前
TCP全连接队列与抓包
网络·tcp/ip·github
上海云盾-高防顾问3 小时前
CC攻击的分类与演进:从代理攻击到僵尸网络的技术剖析
网络·安全
首席拯救HMI官3 小时前
【拯救HMI】HMI容错设计:如何减少操作失误并快速纠错?
大数据·运维·前端·javascript·网络·学习