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

简介:

以太网的数据链路层

在数据链路层,以太网负责以太网编址,这通常称为硬件编址或 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,如需转载请自行联系原作者

相关文章
|
2天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据在云端
【9月更文挑战第4天】在数字化时代,云计算已成为企业和个人存储和处理数据的首选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算的基本原理,网络安全的重要性,以及如何在使用云服务时保护数据安全。我们将从云服务的基本概念出发,深入讨论网络安全的关键技术,最后提供一些实用的建议,帮助您在使用云服务时确保数据安全。
20 6
|
11天前
|
数据采集 存储 机器学习/深度学习
豆瓣评分7.6!Python大牛教你如何采集网络数据
网络数据采集大有所为。在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,已经成为满足个性化网络数据需求的最佳实践。你在浏览器上看到的内容,大部分都可以通过编写Python 程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。 今天给小伙伴们分享的这份手册采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。
|
10天前
|
存储 安全 网络安全
云计算与网络安全:保护云端数据的关键技术
【8月更文挑战第28天】在数字化时代,云计算服务成为企业和个人存储、处理数据的首选。然而,随之而来的网络安全挑战也日益严峻。本文将深入探讨如何通过先进的网络安全技术来保护云服务中的数据安全。我们将从基础的云服务模型开始,逐步深入到网络安全的核心策略和最佳实践,旨在为读者提供一套完整的解决方案,确保他们的数据在云端得到充分的保护。
|
10天前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
9天前
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
|
11天前
|
存储 安全 网络安全
云计算与网络安全的博弈:保护数据在虚拟世界中的安全移动应用开发之旅:从新手到专家
【8月更文挑战第27天】随着云计算技术的飞速发展,企业和个人用户越来越多地将数据和服务迁移到云端。然而,这一转变同时带来了新的安全挑战。本文旨在探讨云计算环境下的网络安全问题,并分析如何通过技术和策略保障信息安全。我们将从云服务的基础知识出发,逐步深入到网络安全和信息安全的高级概念,最后讨论如何实施有效的安全措施来抵御网络威胁。文章不仅涵盖了理论框架,还提供了实际案例分析,旨在为读者提供一套全面的云计算安全指南。
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护数据的关键策略
在数字化时代,网络安全和信息安全成为维护个人隐私和企业资产的前沿防线。本文深入探讨了网络安全漏洞的根源、加密技术的应用以及提升安全意识的重要性。通过分析最新的网络攻击案例和防御措施,我们旨在为读者提供一套实用的知识体系,以识别和防范潜在的网络威胁。
|
7天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据在云中
【8月更文挑战第31天】在这篇文章中,我们将深入探讨云计算和网络安全之间的关系。我们将讨论云服务的安全性,以及如何通过实施强大的网络安全策略来保护您的数据。我们还将提供一些代码示例,以帮助您更好地理解这些概念。无论您是企业还是个人用户,这篇文章都将为您提供有关如何在云计算环境中保护自己的信息的宝贵见解。
|
7天前
|
数据采集 存储 JavaScript
构建你的首个Python网络爬虫:抓取、解析与存储数据
【8月更文挑战第31天】在数字时代的浪潮中,数据成为了新的石油。了解如何从互联网的海洋中提取有价值的信息,是每个技术爱好者的必备技能。本文将引导你通过Python编程语言,利用其强大的库支持,一步步构建出你自己的网络爬虫。我们将探索网页请求、内容解析和数据存储等关键环节,并附上代码示例,让你轻松入门网络数据采集的世界。
|
7天前
|
存储 安全 网络安全
网络安全与信息安全:保护数据的关键策略
【8月更文挑战第31天】在数字时代,网络安全和信息安全成为维护个人隐私和企业资产的前线。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供实用的代码示例来加强理解。我们将从基础概念出发,逐步引导读者了解如何识别和防范网络威胁,同时强调培养良好的安全习惯的必要性。通过本文,你将获得保护数据不受威胁的实用知识和技能。
下一篇
DDNS