本章接着前一章学习的网络层,更加深入来到下一层数据链路层。
链路层概述
首先来一张数据报传输过程的例子,帮助理解数据报是如何从发送端到达目的端的,中间发生了怎样的过程,来看下面这张图:

如上图所示的公司网络中,思考从无线主机向服务器发送一个数据报,该数据报将实际通过6段链路:
- 发送主机与WIFI接入点之间的Wifi链路;
- 接入点与链路层交换机之间的以太网链路;
- 链路层交换机与路由器之间的链路;
- 两台路由器之间的链路;
- 路由器和服务器链路层交换机之间的链路;
- 交换机和服务器之间的以太网链路;
在通过特定链路时,传输结点将数据报封装在链路层帧中,并将该帧传送到链路中。
链路层提供的服务
- 成帧
- 链路接入
- 可靠交付,链路层的可靠交付通过是通过确认和重传取得,这里应该联想传输层的TCP协议提供的可靠传输服务。
- 差错检测和纠正
链路层在何处实现
链路层的主体部分是在网络适配器中实现的,也就是我们说的网卡,它实现的服务有:成帧、链路接入、差错检测等。
差错校验和纠技术
链路层接到上层的应用数据后,加上自己的首部组成链路层数据报,放在链路中进行传播。传播中可能发生错误,因此需要有差错检测机制来发现链路层首部和应用数据的错误。差错检测可能并不能找到所有的错误,因此链路层可能向上层交付一个有差错的数据报,但是这种事情的发生概率比较低
差错检测常用的 3 种技术分别是:奇偶校验、检验和方法、循环冗余检测
- 奇偶校验 方法是其中最简单的一种。如果要发送 d 比特的数据,在这些数据的最后附加一个比特,共 d+1 比特,附加的比特使得所有的比特位中的 1 的个数是偶数。这样,当接收方收到数据后,只需要检查 d+1 比特的数据中的 1 的个数是不是偶数,如果不是则必定在传输过程中发生了错误;但是如果是,也并不意味着一定没有发生错误,因为有可能在两个地方发生了比特翻转使得 1 的个数仍为偶数,当然这样的事情发生的概率是比较低的
上面这样的奇偶校验方法是一维奇偶校验,后来还出现了 二维奇偶校验 方法。将所有的数据分为 i 行 j 列,对每一行附加一个比特,对每一列也附加一个比特,这样总共就附加了 i+j+1 比特。每一行和每一列的附加比特都让行和列的数字 1 的数量是偶数。当某一个比特数据发生错误后,我们发现在第 n 行和第 m 列的数字 1 的个数不是偶数,那么发生错误的数据就是 n 行 m 列的数据,这样我们就能把该比特数据翻转到另一个值,我们就纠正了数据错误,这种能力叫做 前向纠错。二维奇偶校验同样能发现多于一个比特的数据错误,但这种情况下就不能纠正错误了
- 英特网检验和(Internet checksum) 是另一种差错监测方法。从它的英文名称就可以看出,它是把二进制数据当做整数进行求和来检测差错的。比如,将数据按 16 比特分为多个整数,将所有整数求和,把和取反码就得到了检验和。把检验和附加在报文中。接收方收到数据和检验和后,同样按照 16 比特的分组把所有整数求和并取反码,如果得到的数全是 1 说明数据传输没有发生错误;而如果有一位是 0 就说明错误发生了
之前学习运输层时我们知道运输层的协议多是用检验和法,而链路层协议通常会用下面介绍的 CRC 方法。检验和方法相对于 CRC 来说偏弱一些,而因为运输层协议通常是由软件实现,因此运输层选择了偏弱但是计算更加快速的检验和方法。而链路层因为更加贴近底层硬件,而硬件专门对 CRC 提供支持,因此链路层选用了更强的 CRC
- 循环冗余检测(Cyclic redundancy Check, CRC) 是链路层使用的差错检测技术。这个方法国语复杂,我也并没有看懂,这里就不详细记录了
多路访问链路和协议
多路访问问题 研究如何协调多个发送和接受节点对同一个共享广播信道的访问。当两个或多个节点在信道上同时发送数据时,他们

最低0.47元/天 解锁文章
545

被折叠的 条评论
为什么被折叠?



