网络编程(三)数据链路相关知识

简介: 网络编程(三)数据链路相关知识

数据链路,指OSI参考模型中的数据链路层,有时也指以太网、无线局域网等通信手段。

各个设备之间在数据传输时,数据链路层和物理层都是必不可少的。数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范。

MAC地址

MAC地址用于识别数据链路中互连的节点。以太网、无线LAN、蓝牙等设备都是使用的相同规格的MAC地址。


MAC地址长48比特,在使用网卡(NIC)的情况下,MAC地址一般会被烧入到ROM中。因此,任何一个网卡的MAC地址都是唯一的,在全世界都不会有重复(凡事有例外:微机板自己设置MAC;虚拟机分配的MAC等不能确保不重复)。

image.png

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

半双工与全双工通信

半双工是指,只发送或只接收的通信方式。它类似于无线电收发器,若两端同时说话,是听不见对方说的话的。而全双工不同,它允许在同一时间既可以发送数据也可以接收数据。类似于电话,接打双方可以同时说话。

共享介质网络与非共享介质网络

从通信介质的使用方法上看,网络可分为共享介质型和非共享介质型。

共享介质网络

指由多个设备共享一个通信介质的一种网络。最早的以太网和FDDI就是介质共享型网络。在这种方式下,设备之间使用同一个载波信道进行发送和接收。为此,基本上采用半双工通信方式,并有必要对介质进行访问控制。

非共享介质网络

是指不共享介质,是对介质采取专用的一种传输控制方式。在这种方式下,网络中的每个站直连交换机,由交换机负责转发数据帧。此方式下,发送端与接收端并不共享通信介质,因此很多情况下采用全双工通信方式。


最近它也成为了以太网的主流方式。通过以太网交换机构建网络,从而使计算机与交换机端口之间形成一对一的连接,即可实现全双工通信。


该方式还可以根据交换机的高级特性构建虚拟局域网(VLAN,Virtual LAN)、进行流量控

制等。当然,这种方式也有一个致命的弱点,那就是一旦交换机发生故障,与之相连的所有计算机之间都将无法通信。

交换集线器(以太网交换机)

这是一种将非介质共享型网络中所使用的交换机用在以太网中的技术,交换集线器也叫做以太网交换机。

以太网交换机就是持有多个端口的网桥,它们根据数据链路层中每个帧的目标MAC地址,决定从哪个网络接口发送数据。这时所参考的、用以记录发送接口的表就叫做转发表(Forwarding Table)。

自学过程

上面提到的转发表不需要人工在交换机上面进行设置,可以自动生成。


数据链路层的每个通过点在接到包时,会从中将源MAC地址以及曾经接收该地址发送的数据包的接口作为对应关系记录到转发表中。以某个MAC地址作为源地址的包由某一接口接收,实质上可以理解为该MAC地址就是该接口的目标。因此也可以说,以该MAC地址作为目标地址的包,经由该接口送出即可。这一过程也叫自学过程。

交换机的转发方式
1、存储转发

存储转发方式检查以太网数据帧末尾的FCS位后再进行转发。

因此,可以避免发送由于冲突而被破坏的帧或噪声导致的错误帧。

2、直通转发

不需要将整个帧全部接收下来以后再进行转发。只需要得知目标地址即可开始转发。

因此,它具有延迟较短的优势。但同时也不可避免地有发送错误帧的可能性。

VLAN

为了减少实际网络拓扑的修改,可以使用带有VLAN功能的交换机。

VLAN技术附加到网桥/2层交换机上,就可以切断所有VLAN之间的所有通信。因此,相比一般的网桥/2层交换机,VLAN可以过滤多余的包,提高网络的承载效率。

简单VLAN

如下图所示,是一个简单的VLAN,该交换机按照其端口区分了A、B两个网段,从而区分了广播数据传播的范围、减少了网络负载并高了网络的安全性。然而异构的两个网段之间,就需要利用具有路由功能的交换机(如3层交换机),或在各段中间通过路由器的连接才能实现通信。

image.png

TAG VLAN(定义了IEEE802.1Q的标准)

TAG VLAN中对每个网段都用一个VLAN ID的标签进行唯一标识。

在交换机中传输帧时,在以太网首部加入这个VID 标签,根据这个值决定将数据帧发送给哪个网段。

image.png

以太网

在众多数据链路中最为著名、使用最为广泛的莫过于以太网(Ethernet)(以太网(Ethernet)一词源于Ether(以太),意为介质。在爱因斯坦提出量子力学之前,人们普遍认为宇宙空间充满以太,并以波的形式传送着光。) 。

现在,以太网已成为最具兼容性与未来发展性的一种数据链路。

早期以太网结构

初期使用多台终端使用同一电缆的共享介质型的连接方式。

image.png

现代以太网结构

终端与交换机之间独占电缆的方式实现以太网通信。

image.png

以太网分类

下图展示以太网介质,不做详细介绍:

image.png

以太网帧格式

以太网帧前端有一个叫做前导码(Preamble)的部分,表示一个以太网帧的开始,也是对端网卡能够确保与其同步的标志。

前导码如下所示:

image.png

以太网帧本体的前端是以太网的首部,它总共占14个字节。分别是6个字节的目标MAC地址、6个字节的源MAC地址以及2个字节的上层协议类型。

image.png

相关文章
|
4月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
414 0
|
5月前
|
机器学习/深度学习 数据采集 传感器
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
179 0
|
6月前
|
数据采集 存储 算法
MyEMS 开源能源管理系统:基于 4G 无线传感网络的能源数据闭环管理方案
MyEMS 是开源能源管理领域的标杆解决方案,采用 Python、Django 与 React 技术栈,具备模块化架构与跨平台兼容性。系统涵盖能源数据治理、设备管理、工单流转与智能控制四大核心功能,结合高精度 4G 无线计量仪表,实现高效数据采集与边缘计算。方案部署灵活、安全性高,助力企业实现能源数字化与碳减排目标。
175 0
|
7月前
|
Python
LBA-ECO CD-32 通量塔网络数据汇编,巴西亚马逊:1999-2006,V2
该数据集汇集了1999年至2006年间巴西亚马逊地区九座观测塔的碳和能量通量、气象、辐射等多类数据,涵盖小时至月度时间步长。作为第二版汇编,数据经过协调与质量控制,扩展了第一版内容,并新增生态系统呼吸等相关计算数据,支持综合研究与模型合成。数据以36个制表符分隔文本文件形式提供,配套PDF说明文件,适用于生态与气候研究。引用来源为Restrepo-Coupe等人(2021)。
140 1
|
3月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
173 0
|
4月前
|
机器学习/深度学习 数据采集 运维
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
|
6月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
162 4
|
7月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
9月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
274 22
|
9月前
|
存储 数据库 Python
利用Python获取网络数据的技巧
抓起你的Python魔杖,我们一起进入了网络之海,捕捉那些悠游在网络中的数据鱼,想一想不同的网络资源,是不是都像数不尽的海洋生物,我们要做的,就是像一个优秀的渔民一样,找到他们,把它们捕获,然后用他们制作出种种美味。 **1. 打开魔法之门:请求包** 要抓鱼,首先需要一个鱼网。在Python的世界里,我们就是通过所谓的“请求包”来发送“抓鱼”的请求。requests是Python中常用的发送HTTP请求的库,用它可以方便地与网络上的资源进行交互。所谓的GET,POST,DELETE,还有PUT,这些听起来像偶像歌曲一样的单词,其实就是我们鱼网的不同方式。 简单用法如下: ``` im
165 14