带带弟弟彻底搞懂链路层(一)

简介: hey guys,大家好啊,这里是 cxuan 计算机网络连载系列的文章第 12 篇文章。本篇文章我来跟你计算机网络中的数据链路层相关知识。

微信图片_20220416161830.png

hey guys,大家好啊,这里是 cxuan 计算机网络连载系列的文章第 12 篇文章。本篇文章我来跟你计算机网络中的数据链路层相关知识。

下面我们把关注点放在数据链路层,如果没有数据链路层,计算机网络也就不复存在;这就好比大楼没有了地基,人没有了腿;所以,数据链路层的知识也固然重要,不少小伙伴只把关注点放在 TCP 和 IP 这两个协议上,这是一种狭隘的思想,需要及时纠正,计算机网络可不只有 TCP 和 IP。下面 cxuan 就和你聊聊计算机中的数据链路层。

数据链路层

数据链路层,按照 OSI 七层模型来划分的话,就属于物理层的上层

微信图片_20220416161833.png

数据链路层是一种协议层,它有很多协议。数据链路层用于跨物理层在网段节点之间传输数据,通常指以太网、无线局域网等通信手段。数据链路层提供了在网络的两个实体之间传输数据的功能,并且提供了差错检测用于纠正物理层中发生的错误。

关键概念

在数据链路层中,链路层地址有很多不同的称谓:LAN 地址、物理地址或者 MAC 地址,因为 MAC 地址是最流行的术语,所以我们一般称呼链路层地址指的就是 MAC 地址。

下面我们就来认识一下数据链路层的几个关键概念

打包成帧

打包成帧(framing): 在每个网络层数据报在传输之前,几乎所有的链路层协议都会将数据报用链路层封装起来。数据链路层从网络层获取数据后将其封装成为 ,如果帧太大的话,数据链路层会将大帧拆分为一个个的小帧,小帧能够使传输控制和错误检测更加高效。

帧就是 0 1 序列的封装。

一个帧由 Header、Payload Field、Trailer 组成,网络层数据报就封装在 Payload Field 字段中。根据不同的物理介质,每个帧的结构也不同。帧的组成如下

微信图片_20220416161837.png

帧中主要涉及的内容如下

  • 帧头(Frame header):它包含帧的源地址和目的地址。
  • 有效载荷(Payload Field):它包含要传递的数据和信息。
  • 尾部标记(Trailer):它包含错误检测和错误纠正位。
  • 标记(Flag):它标记了帧的开始和结束。

Flag 位位于帧的开头和结尾,两个连续的标志指示帧的结束和开始

微信图片_20220416161841.png

帧的类型主要有两种,固定大小的帧和可变大小的帧。

  • 固定大小的帧(Fixed-sized Framing):表示帧的大小是固定的,帧的长度充当帧的边界,因此它不需要额外的边界位来标识帧的开始和结束。
  • 可变大小的帧(Sized Framing):表示每个帧的大小是不固定的,因此保留了其他机制来标记一帧的结束和下一帧的开始。它通常用于局域网,在可变大小的帧中定义帧定界符的两种方法是
  • 长度字段(Length Field): 使用长度字段来确定帧的大小。它用于以太网(IEEE 802.3)
  • 结束定界符(End Delimiter): 经常用于令牌环

链路接入

链路接入主要指的是 MAC 协议,MAC(Medium Access Control) 协议规定了帧在链路上的传输规则。我们知道,数据链路层是 OSI 标准模型的第二层,数据链路层向下还能够细分,主要分为 The logical link control (LLC) 层和The medium access control (MAC) 层。

微信图片_20220416161847.png

LLC 层又叫做逻辑控制链路层,它主要用于数据传输,它充当网络层和数据链路层中的媒体访问控制(MAC)子层之间的接口。LLC 层的主要功能如下

  • LLC 的主要功能是发送时在 MAC 层上多路复用协议,并在接收时同样地多路分解协议。
  • LLC 提供跳到跳的流和差错控制,像是路由器和路由器之间这种相邻节点的数据传输称为 一跳
  • 它允许通过计算机网络进行多点通信。

MAC 层负责传输介质的流控制和多路复用,它的主要功能如下

  • MAC 层为 LLC 和 OSI 网络的上层提供了物理层的抽象。
  • MAC 层负责封装帧,以便通过物理介质进行传输。
  • MAC 层负责解析源和目标地址。
  • MAC 层还负责在冲突的情况下执行冲突解决并启动重传。
  • MAC 层负责生成帧校验序列,从而有助于防止传输错误。

在 MAC 层中,有一个非常关键的概念就是 MAC 地址。MAC 地址主要用于识别数据链路中互联的节点,如下图所示

微信图片_20220416161851.png

MAC 地址长 48 bit,在使用网卡(NIC) 的情况下,MAC 地址一般都会烧入 ROM 中。因此,任何一个网卡的 MAC 地址都是唯一的。MAC 地址的结构如下

微信图片_20220416161854.png

MAC 地址中的 3 - 24 位表示厂商识别码,每个 NIC 厂商都有特定唯一的识别数字。25 - 48 位是厂商内部为识别每个网卡而用。因此,可以保证全世界不会有相同 MAC 地址的网卡。

MAC 地址也有例外情况,即 MAC 地址也会有重复的时候,比如你可以手动更改 MAC 地址。但是问题不大,只要两个 MAC 地址是属于不同的数据链路层就不会出现问题。

可靠交付

网络层提供的可靠交付更多指的是端系统到端系统的交付,而数据链路层提供的可靠交付更多指的是单端链路节点到节点地的传送。当链路层协议提供可靠交付时,它能保证无差错地经链路层移动每个网络层数据报。链路层提供可靠交付的方法和 TCP 类似,也是使用 确认重传 取得的。

链路层的可靠交付通常用于出错率很高的链路,例如无线链路,它的目的是在本地纠正出错的帧,而不是通过运输层或应用层协议强制进行端到端的数据传输。对于出错率较低的链路,比如光纤、同轴电缆和双绞线来说,链路层的交付开销是没有必要的,由于这个原因,这些链路通常不提供可靠的交付

微信图片_20220416161858.png

差错检测和纠正

链路层数据以帧的形式发送,在发送的过程中,接收方节点的链路层硬件可能会由于信号干扰或者电磁噪音等原因错误的把 1 识别为 0 ,0 识别为 1。这种情况下没有必要转发一个有差错的数据报,所以许多链路层协议提供一种机制来检测这样的比特差错。通过让方节点在帧中包括差错检测比特,让接收节点进行差错检查,以此来完成这项工作。

运输层和网络层通过因特网校验和来实现差错检测,链路层的差错检测通常更复杂,并且用硬件实现。差错纠正类似于差错检测,区别在于接收方不仅能检测帧中出现的比特差错,而且能够准确的确定帧中出现差错的位置。

差错检测和纠正的技术主要有

  • 奇偶校验:它主要用来差错检测和纠正
  • 校验和:这是一种用于运输层检验的方法
  • 循环冗余校验:它更多应用于适配器中的链路层

地址映射

因为存在网络层地址(IP 地址)和 数据链路层地址(MAC 地址),所以需要在它们之间进行转换和映射,这就是地址解析协议所做的工作,更多关于地址解析协议的理解,请查阅

深入理解 ARP 协议

数据链路层的作用

数据链路层中的协议定义了互联网络的两个设备之间传输数据的规范。数据链路层需要以通信介质 作为传输载体,通信媒介包含双绞铜线、光纤、电波等红外装置。在数据分发装置上有 交换机、网桥、中继器 等中转数据。链路层中的任何设备又被称为节点(node),而沿着通信路径相邻节点之间的通信信道被称为 链路(link)。实际上,在链路层上传输数据的过程中,链路层和物理层都在发挥作用。因为在计算机中,信息是以 0 1 这种二进制的形式进行传输,而实际的链路通信却是以电压的高低、光的闪灭以及电波的频谱来进行的,所以物理层的作用就是把二进制转换成为链路传输所需要的信息来进行传输。数据链路层传输也不只是单个的 0 1 序列,它们通常是以 为单位进行的。

现在我们知道了数据链路层大概是干啥的,那么只有理论不行,你还得有硬通货,也就是硬件,一切的理论都离不开硬件的支撑。

硬件就可以简单理解为通信介质,在通信介质上会有不同种类的信息传递方式,不过总的来说可以概括为两种:一种是共享介质型网络,一种是非共享介质型网络,下面我们就要聊一聊这两种通信类型。

相关文章
|
小程序 前端开发 JavaScript
微信小程序框架---详细教程
微信小程序框架---详细教程
751 0
|
设计模式 算法 搜索推荐
后端开发中的设计模式应用
在软件开发的浩瀚海洋中,设计模式犹如一座座灯塔,为后端开发者指引方向。本文将深入探讨后端开发中常见的设计模式,并通过实例展示如何在实际项目中巧妙应用这些模式,以提升代码的可维护性、扩展性和复用性。通过阅读本文,您将能够更加自信地应对复杂后端系统的设计与实现挑战。
317 3
|
11月前
|
存储 监控 Java
Java 异步编程常见难题深度拆解与解决方案
本文深入探讨Java异步编程的核心技术与常见难题,涵盖同步与异步的区别、核心接口(Future、Callable、CompletableFuture)的使用,以及回调地狱、任务组合、异常处理、线程池管理等难点的解决方案。通过实际案例与代码示例,帮助开发者掌握异步编程技巧,提升系统性能与资源利用率。同时,文章还提供了性能优化建议与最佳实践,如合理配置线程池、避免过度异步及加强监控日志。适合希望深入理解Java异步编程的开发人员。[点此获取代码示例](https://pan.quark.cn/s/14fcf913bae6)。
354 4
|
10月前
|
监控 安全 Android开发
快手私信跳转微信步骤
快手私信到微信跳转的技术实现方案 1. 技术背景与实现原理
|
安全 调度 Python
探索Python中的并发编程:协程与多线程的比较
本文将深入探讨Python中的并发编程技术,重点比较协程与多线程的特点和应用场景。通过对协程和多线程的原理解析,以及在实际项目中的应用案例分析,读者将能够更好地理解两种并发编程模型的异同,并在实践中选择合适的方案来提升Python程序的性能和效率。
|
数据采集 自然语言处理 数据可视化
优秀python系统案例】基于python Flask的电影票房数据爬取与可视化系统的设计与实现
本文介绍了一个基于Python Flask框架开发的电影票房数据爬取与可视化系统,该系统利用网络爬虫技术从豆瓣电影网站抓取数据,通过Python进行数据处理和分析,并采用ECharts等库实现数据的可视化展示,为电影行业从业者提供决策支持。
1893 2
优秀python系统案例】基于python Flask的电影票房数据爬取与可视化系统的设计与实现
基于毕奥-萨伐尔定律的交流电机的4极旋转磁场matlab模拟与仿真
本课题基于毕奥-萨伐尔定律研究交流电机的4极旋转磁场,对比不同定子半径和2极旋转磁场。通过MATLAB2022a进行仿真,核心程序计算每个导线对空间点的磁场贡献,并绘制磁场分布。毕奥-萨伐尔定律描述了电流元产生的磁场分布,对于理解交流电机中旋转磁场的形成至关重要。
|
消息中间件 负载均衡 Kafka
Kafka学习---2、kafka生产者、异步和同步发送API、分区、生产经验(一)
Kafka学习---2、kafka生产者、异步和同步发送API、分区、生产经验(一)
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用问题之如何查看每个研发现在手上所有任务的甘特图(跨项目)
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。