网络基础 : 以太网数据封装

简介:

以太网的数据链路层

在数据链路层,以太网负责以太网编址,这通常称为硬件编址或 MAC 编址。以太网还负责把来自网络层的分组封装成帧。

以太网编址

以太网编址使用固化在每个以太网网卡(NIC)中的 MAC (Media Access Control,介质访问控制)地址。MAC (硬件)地址长 48 位,采用十六进制格式。

OUI(Organizationally Unique Identifier,组织唯一标识符)是由 IEEE 分配给组织(厂商)的,它包含 24 位,而组织给其生产的每个网卡都分配一个唯一的全局管理地址,该地址长 24 位。查看上图您会发现最高位是 I/G(Individual/Group) 位:如果它的值为 0,我们就可以认为相应的地址为某台设备的 MAC 地址,很可能出现在MAC 报头的源地址部分;如果它的值为 1,我们就可以认为相应的地址要么是以太网中的广播地址或组播地址,要么是令牌环和 FDDI 中的广播地址或功能地址。
接下来是 G/L 位(全局/本地位,也称为 U/L 位,其中 U 表示 universal):如果这一位为 0,则表示相应的地址为全局地址,由 IEEE 分配;如果为 1,则表示相应的地址为本地管理地址。在以太网地址中,右边 24 位为本地管理(制造商分配)的编码,特定制造商在生产第一个网卡时,通常将这部分设置为 24 个 0,然后递增,直到 24 个1。

以太网帧

数据链路层负责将比特合并成字节,再将字节封装成帧(frame)。在数据链路层我们使用帧封装来自网络层的分组,以便通过特定类型的介质进行传输。
以太网工作站的职责是,使用 MAC 帧格式彼此传递数据帧。它利用 CRC(Cyclic Redundancy Check,循环冗余校验)提供错误检测功能,记住,仅仅是检测,不是纠错。
下图说明了 802.3 帧和以太网帧的格式:

注意:使用一种帧封装另一种帧称为隧道技术。

下面详细介绍各个字段。
前导码
交替的 0 和 1,在每个分组的开头提供 5MHz 的时钟信号,让接收设备能够跟踪到来的比特流。
帧起始位置分隔符(SFD)/同步
前导码为 7Byte,而 SFD(同步)为 1Byte。SFD 的值为 10101011,其中最后两个1让接收方能够识别中间的 0 和 1 交替模式,进而同步并检查到数据开头。
目标地址 (DA)
包含一个 48 位的值,且 LSB(Least Significant Bit,最低有效位)优先。接收方根据 DA 判断到来的分组是否是发送给特定节点的。目标地址可以是单播地址、广播地址或组播 MAC 地址。广播地址全为 1(十六进制格式下全为F),广播发送给所有设备,而组播只发送给网络中一组类似的节点。
源地址(SA)
SA 是一个 48 位的 MAC 地址,用于标识传输设备,也使用 LSB 优先格式。在 SA 字段中,不能包含广播地址或组播地址。
长度或类型
802.3 帧使用长度字段,而 Ethernet_II 帧使用类型字段标识网络层协议。802.3 不能标识上层协议,只能用于专用 LAN,如 IPX。
数据
这是网络层传递给数据链路层的帧,其长度为 46-1500 Bytes。
帧校验序列(FCS)
FCS 字段位于,用于存储 CRC(Cyclic Redundancy Check,循环冗余校验)结果的帧的帧尾。CRC 是一种数学算法,创建每个帧时都将运行它。作为接收方的主机收到帧并运行 CRC 时,其结果必须相同,否则接收方将认为发生了错误,进而将帧丢弃。

数据封装

主机通过网络将数据传输给另一台设备时,数据将经历封装:OSI 模型的每一层都使用协议信息将数据包装起来。每层都只与其在接收设备上的对等层通信。
为了通信和交换信息,每层都使用 PDU(Protocaol Data Unit,协议数据单元)。PDU 包含在每一层给数据添加的控制信息。这些控制信息通常被添加在数据字段前面的报头中,但也可能被添加在报尾中。
OSI 模型每一层都对数据进行封装来形成 PDU,PDU 的名称随报头提供的信息而异。这些 PDU 信息仅在接收设备的对等层被读取,然后剥离,然后数据被交给下一层。
下图显示了各层的 PDU 及每层添加的控制信息:

该图说明了如何对上层用户数据进行转换,以便通过网络传输。然后,数据被交给传输层,而传输层通过发送同步分组来建立到接收设备的虚电路。接下来,数据流被分割成小块,传输层报头被创建并放在数据字段前面的报头中,此时的数据块称为数据段(一种PDU)。我们可以对每个数据段进行排序,以便在接收端按发送顺序重组数据流。
接下来,每个数据段都交给网络层进行编址,并在互联网络中路由。为让每个数据段前往正确的网络,这里使用逻辑地址(如IP地址)。对于来自传输层的数据段,网络层协议给它添加一个控制报头,这样就生成了分组或数据报。在接收主机上,传输层和网络层协同工作以重建数据流,但它们不负责将 PDU 放到本地网段上--这是将信息传输给路由器或主机的唯一途径。
数据链路层负责接收来自网络层的分组,并将其放到网络介质(电缆或无线)上。数据链路层将每个分组封装成帧,其中帧头包含源主机的硬件地址。如果目标设备在远程网络中,则帧将被发送给路由器,以便在互联网络中路由。到达目标网络后,新的正被用来将分组传输到目标主机。
要将帧放到网络上,首先必须将其转换为数字信号。帧是有 1 和 0 组成的逻辑编组,网络层负责将这些 0 和 1 编码成数字信号,供本地网络中的设备读取。接收设备将同步数字信号,并从中提取 1 和 0 (解码)。接下来,设备将重组帧,运行 CRC,并将结果与帧中 FCS 字段的值进行比较。如果它们相同,设备从帧中提取分组,并将其他部分丢弃,这个过程称为拆封。分组被交给网络层,而网络层将检查分组地址。如果地址匹配,数据段被从分组中提取出来,而其他部分将被丢弃。数据段将在传输层处理,而后者负责重建数据流,然后向发送方确认,指出接收方收到了所有信息。然后传输层将数据流交给上层应用程序。
在发送端,数据封装的过程大致如下:
    1. 用户信息被转换为数据,以便通过网络进行传输。
    2. 数据被转换为数据段,发送主机和接收主机之间建立一条可靠的连接。
    3. 数据段被转换为分组或数据报,连接地址被添加在报头中,以便能够在互联网络中路由分组。
    4. 分组或数据报被转换为帧,以便在本地网络中测试。硬件(以太网)地址被用于唯一标识本地网段中的主机。
    5. 帧被转换为比特,并使用数据编码方法和时钟同步方案。
下图解释了数据封装的过程:

传输层使用端口号标识虚电路和上层进程,如下图所示:

使用面向连接的协议(即TCP)时,传输层将数据流转换为数据段,并创建一条虚电路以建立可靠的会话。接下来,它对每个数据段进行编号,并使用确认和流量控制。如果你使用的是 TCP,虚电路将由源端口号和目标端口号已经源 IP 地址和目标 IP 地址(称为套接字)标识。主机只能使用不小于 1024 的端口号。目标端口号标识了上层进程(应用程序),在接收主机可靠地重建数据流后,数据流将被交给进程(应用程序)。
下面让我们回到数据封装的过程。
给数据块添加传输层报头信息后,便形成了数据段;随后,数据段和目标 IP 地址一起呗交给网络层。(目标IP地址是随数据流一起由上层交给传输层的,它是由上层使用名称解析方法(可能是DNS)发现的。)
网络层在每个数据段的前面添加报头和逻辑地址(IP地址)。给数据段添加报头后,形成的 PDU 为分组。分组包含一个协议字段,该字段指出了数据段来自何方(UDP或TCP),这样当分组到达接收主机后,传输层便能够将数据段交给正确的协议。
网络层负责获悉目标硬件地址(这种地址指出了分组应发送到本地网络的什么地方),为此,它使用 ARP(Address Resolution Protocol,地址解析协议)。网络层查看目标 IP 地址,并将其与主机的 IP 地址和子网掩码进行比较。如果比较表明分组是前往本地主机的,则 ARP 请求被用于请求该主机的硬件地址;如果分组是前往远程主机的,IP 将获悉默认网关(路由器)的 IP 地址。
接下来,网络层将分组向下传递给数据链路层,一同传递的还有本地主机或默认网关的硬件地址。数据链路层在分组前面添加一个报头,这样数据块将变成真(之所以称其为帧,是因为同时给分组添加了报头和报尾,使其类似于书档)。帧包含一个以太网类型(Ether-Type)字段,它指出了分组来自哪种网络层协议。现在,将对帧运行CRC 校验,并将结果放在帧尾的 FCS 字段中。
至此,可以用每次 1 比特的方式将帧向下传递给网络层了,而网络层将使用比特定时规则(bit timing rule)将数据编码成数字信号。网段中的每台设备都将同步时钟,从数字信号中提取 1 和 0,并重建帧。重建帧后,设备运行 CRC,以确保帧是正确的。如果一切顺利,主机将检查目标 MAC 地址和目标 IP 地址,以检查这个帧是不是发送给它的。


本文转自sparkdev博客园博客,原文链接:http://www.cnblogs.com/sparkdev/p/5987135.html,如需转载请自行联系原作者

相关文章
|
1月前
|
监控 安全 网络安全
云计算与网络安全:保护数据的关键策略
【9月更文挑战第34天】在数字化时代,云计算已成为企业和个人存储、处理数据的优选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算环境中的网络安全挑战,并提供一系列策略来加强信息安全。从基础的数据加密到复杂的访问控制机制,我们将一探究竟如何在享受云服务便利的同时,确保数据的安全性和隐私性不被侵犯。
63 10
|
2月前
|
存储 安全 网络安全
云计算与网络安全:守护数据,构筑未来
在当今的信息化时代,云计算已成为推动技术革新的重要力量。然而,随之而来的网络安全问题也日益凸显。本文从云服务、网络安全和信息安全等技术领域展开,探讨了云计算在为生活带来便捷的同时,如何通过技术创新和策略实施来确保网络环境的安全性和数据的保密性。
|
7天前
|
存储 安全 网络安全
云计算与网络安全:保护数据的新策略
【10月更文挑战第28天】随着云计算的广泛应用,网络安全问题日益突出。本文将深入探讨云计算环境下的网络安全挑战,并提出有效的安全策略和措施。我们将分析云服务中的安全风险,探讨如何通过技术和管理措施来提升信息安全水平,包括加密技术、访问控制、安全审计等。此外,文章还将分享一些实用的代码示例,帮助读者更好地理解和应用这些安全策略。
|
10天前
|
存储 缓存 Dart
Flutter&鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
本文详细介绍了如何在 Flutter 中使用 Dio 封装网络请求,实现用户登录身份验证及免登录缓存功能。首先在 `pubspec.yaml` 中添加 Dio 和 `shared_preferences` 依赖,然后创建 `NetworkService` 类封装 Dio 的功能,包括请求拦截、响应拦截、Token 存储和登录请求。最后,通过一个登录界面示例展示了如何在实际应用中使用 `NetworkService` 进行身份验证。希望本文能帮助你在 Flutter 中更好地处理网络请求和用户认证。
127 1
|
12天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:从漏洞到加密,保护数据的关键步骤
【10月更文挑战第24天】在数字化时代,网络安全和信息安全是维护个人隐私和企业资产的前线防线。本文将探讨网络安全中的常见漏洞、加密技术的重要性以及如何通过提高安全意识来防范潜在的网络威胁。我们将深入理解网络安全的基本概念,学习如何识别和应对安全威胁,并掌握保护信息不被非法访问的策略。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你提供宝贵的知识和技能,帮助你在网络世界中更安全地航行。
|
15天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据
【10月更文挑战第21天】在这篇文章中,我们将探讨云计算和网络安全的关系。随着云计算的普及,网络安全问题日益突出。我们将介绍云服务的基本概念,以及如何通过网络安全措施来保护您的数据。最后,我们将提供一些代码示例,帮助您更好地理解这些概念。
|
1月前
|
网络协议 Java 程序员
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
31 2
|
1月前
|
SQL 安全 测试技术
网络安全与信息安全:保护数据的艺术
【9月更文挑战第36天】在数字化时代,网络安全和信息安全已成为维护个人隐私和企业资产的基石。本文深入探讨了网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供一份知识宝典,帮助他们在网络世界中航行而不触礁。我们将从网络安全的基本概念出发,逐步深入到复杂的加密算法,最后强调培养安全意识的必要性。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你打开一扇了解和实践网络安全的大门。
34 2
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与神经网络:探索复杂数据的表示
【9月更文挑战第26天】深度学习作为人工智能领域的明珠,通过神经网络自动从大数据中提取高级特征,实现分类、回归等任务。本文介绍深度学习的基础、张量表示、非线性变换、反向传播及梯度下降算法,并探讨其在计算机视觉、自然语言处理等领域的应用与挑战。未来,深度学习将更加智能化,揭示数据背后的奥秘。
|
2月前
|
小程序 开发者
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
下一篇
无影云桌面