软件开发速学计网:数据链路层

前言,数据链路层我也写得不全,要学全看这,韩立刚老师的课,绝对有趣,而我这是参考慕课网:编程必备基础中的网络篇,都是软件的,不是很全,但是对于搞软件的我觉得够了。有错请指出

1. 封装成帧

“帧”是数据链路层的基本单位。

发送端中网络层的一段数据(数据报)发送到数据链路层中后,在数据报的前后添加特定标记形成“帧”,也可称“数据帧”。

接收端在数据链路层根据前后特定标记识别出“帧”。

在这里插入图片描述

  • 帧首部和帧尾部都是特定的控制字符(比特流)

2. 透明传输

因为要的数据仅是帧数据,接收方会把首尾部的帧标记去掉,假如帧数据中有这些特定的比特流要怎么解决,这就提出了透明传输。

在这里插入图片描述

“透明”在计算机中常说的:对用户透明,指的是(可能代码或其他功能)具体实现用户不需要知道,用户只需要用就行。说法有多种,也可以说是封装;对于网络来说,物理层所做的工作对于数据链路层是透明的,仅需要提供接口给数据链路层就可以了。是一种实际存在的事物却看起来又不存在一样。

不要跟现实世界的“透明”混淆了,现实世界的透明的含义恰恰相反。

透明传输:无论是什么报文(帧数据)都可以传输(即是控制字符在帧数据中),因为在数据链路层会解决比如帧数据中有EOT的问题。所以我们只管传报文,不用在意报文里面是否包含EOT问题。这就是报文中有EOT的处理问题对我们是透明的。

可以说说数据链路层究竟是怎么处理的(了解即可):即在报文中包含EOT的前面添加转义字符。
在这里插入图片描述
ESC:转义字符。接收方在识别到EOT时,先判断EOT前面是否有ESC,有的话则说明不是帧尾部。

这跟我们编程中的“\”一样,比如要打印“\n”,而“\n”是换行符(规定的控制字符),那么可能需要转义:“\\n”,才打印“\n”。

3. 差错检测

物理层只管传输比特流,无法控制是否出错。所以数据链路层负责“差错检测”的工作。

差错检测有两种:奇偶校验码和循环冗余校验码CRC。

3.1 奇偶校验码

在比特流的尾部添加一位比特位来检测该比特流是否出错。

在这里插入图片描述

但是,假设出现如下图的情况,那么在检测的时候就会成功,这就是该方法的缺陷:即在传输的过程可能会出现顺序错误但是计算出的结果还是跟携带的比特位一样,或者丢失了某些数据,最终形成的数据中计算出的结果也跟携带的比特位一样。

在这里插入图片描述

所以就有循环冗余校验码CRC。

3.2 循环冗余校验码CRC

一种根据传输或保存的数据而产生固定位数校验码的方法。

学习它的前提知识需要知道模“2”除法:即二进制下的除法。与算术除法类似,但是该除法不借位,实际是 异或操作

异或有四条公式,用xor表示异或操作:

  • 0 xor 0 = 0
  • 0 xor 1 = 1
  • 1 xor 1 = 1
  • 1 xor 1 = 1

即只需要记住常说的一句话:异或操作,相同为0,不同为1

在这里插入图片描述

循环冗余校验码CRC的生成主要有三个步骤:(看不懂没事,了解先,然后直接看例子)

  1. 选定一个用于校验的多项式G(x),多项式一般题目会给,并在数据尾部添加r个0。
  2. 将添加r个0后的数据,使用模“2”除法除以多项式的位串。
  3. 得到的余数填充在原数据r个0的位置得到可校验的位串。

例子1:对于生成多项式G(x)=x^4+x^3+x^2+1,计算报文110的可校验位串。(例子来自360百科)

1.根据用于校验的多项式G(x)来计算,并在数据尾部添加r个0:

在这里插入图片描述

可以知道r就是最高阶数。

  1. 将添加r个0后的数据,使用模“2”除法除以多项式的位串。

在这里插入图片描述

  1. 得到的余数填充在原数据r个0的位置得到可校验的位串。

在这里插入图片描述

最终将该可校验的位串发送到接收方,接收方在数据链路层会根据多项式(双方协议所规定好的,我们不用理,了解)计算出位串,然后将发送来的可校验的位串除以多项式的位串,然后根据余数判断出错:

  • 假设余数为0,那么说明报文无错。
  • 假设余数不为0,那么说明报文有错。

在这里插入图片描述

CRC的错误检测能力与位串的阶数r有关,即添加越多的0,那么检测能力越强。当r=1时,会退化为奇偶校验。

多项式不是随便自己想的,实际上多项式是双方约定的,即有协议来规定。根据下面的图:了解就行。

在这里插入图片描述

4. MTU

MTU:最大传输单元MTU(Maximum Transmission Unit)

数据链路层的数据帧也不是无限大的,因为数据帧过大或过小都会影响传输的效率。以太网MUT一般为1500字节。

过小影响效率的解释:比如数据帧有1500字节都拆成1个字节分别发送,那么就要发送1500次。虽然发送时延减少了,但是需要重复1500次,那么就会影响传输效率。

路径MTU:

在这里插入图片描述

MTU在网络层会涉及到。

问题:在路径MTU中如果当前发送帧为1500字节,可是下一个小型网络只能接受1000字节,会如何处理?

回答:路径MTU指的是发送方到接收方完整路径的最小MTU,这个MTU是可以动态变化的,如果确实发生上面的情况,则可以认为是数据链路层异常,数据会被直接丢弃掉。

5. 以太网协议

5.1 MAC地址

即物理地址、硬件地址。每个设备都拥有一个唯一的MAC地址。像身份证一样。MAC地址共48位(bit),使用十六进制表示。计算机的MAC地址由网卡决定,是不可改变的。集线器、路由器也有MAC地址。

在CMD中输入:ipconfig/all 就可以看到本机所有网络物理设备的MAC地址。

5.2 以太网协议

以太网(Ethernet)是一种使用广泛的局域网技术。是数据链路层中的协议。使用以太网可以完成相邻设备的数据帧传输。

在这里插入图片描述

传输过程:

在这里插入图片描述

如果是未知的情况:
在这里插入图片描述

因为以太网协议只能解决相邻设备的数据传输,下图是需要跨节点传输,这需要网络层的知识来解决:

在这里插入图片描述

6. 总结

  • 数据链路层的三个重要功能:封装成帧,透明传输,差错检测。
  • 数据链路层是以”帧“为基本数据单位,会把网络层发送来的IP数据报的首部和尾部添加上帧标识。也会把物理层发送来的数据帧拆掉首部和尾部的帧标识。(别忘了发送方的网络中的层数据传输是从上到下,而接收方相反)。
  • 数据链路层会在IP数据报添加MAC地址。
  • 透明传输产生的原因和概念。
  • 数据链路层只进行数据的检测,不进行纠正。数据链路层对于错误的数据就直接丢弃掉。检测有两种方法:奇偶校验和循环冗余校验CRC。知道CRC的计算过程。
  • MTU和以太网协议。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值