数据链路层协议 —— 以太网协议
目录
1.数据链路层解决的问题
2.局域网通信方式
以太网
令牌环网
无线局域网
3.以太网协议
以太网帧格式
对比理解Mac地址和IP地址
认识MTU
MTU对IP协议的影响
MTU对UDP的影响
MTU对TCP的影响
基于以太网协议的报文转发流程
交换机的工作原理
4.ARP协议
ARP协议的作用
ARP协议的格式
ARP协议的工作流程
ARP缓存表
1.数据链路层解决的问题
当网络层IP协议被发明并投入使用的时候,我们发送的报文便有能力在整个网络世界中规划出到达目标主机的路径。当传输层TCP协议、UDP协议被发明并投入使用的时候,我们便能自主选择发送的报文是否需要可靠传输至目标主机。网络层IP协议和传输层TCP协议的配合,就能保证发送的报文准确且可靠地发送至目标主机。
但我们需要明确的是,整个大的网络世界是由无数个小的子网构成的,报文发送的过程是基于一个个子网进行跳转的,子网之间通过路由器进行连接。所以,相隔多个子网的主机之间想要实现准确且可靠地通信,首先要解决的问题就是相互连接的两台设备之间的通信 —— 这就是数据链路层要解决的问题。
相互连接的两台设备肯定是属于同一网段的,同一网段下两台主机之间的通信的问题其实就是局域网通信的问题,所以数据链路层要解决的问题其实就是局域网中相互连接的节点之间通信的问题。
对比理解网络层和数据链路层:
网络层只是提供了路径选择的能力,也就是说报文下一跳跳至哪个结点是由网络层决定的,但是网络层并不关心具体的过程,具体的过程是由数据链路层来完成的。
2.局域网通信方式
局域网通信有以下几种常见的通信方式:
以太网
以太网是目前最广泛使用的局域网技术之一。它基于IEEE 802.3标准,采用载波侦听多路访问/冲突检测(CSMA/CD)机制来管理网络上的数据传输。以太网使用双绞线、同轴电缆或光纤等物理介质来连接设备,并通过交换机或集线器(尽管现在交换机更为常见)来扩展网络。以太网支持多种速度,包括10Mbps、100Mbps、1Gbps、10Gbps甚至更高。
令牌环网
虽然令牌环网在过去曾经是一种流行的局域网技术,但现在已经逐渐被以太网所取代。令牌环网基于IEEE 802.5标准,它使用一种称为“令牌”的特殊帧来控制网络上的访问权。在令牌环网中,每个设备都连接成一个闭环,并且只有持有令牌的设备才能发送数据。这种方式可以确保网络上的数据传输不会发生冲突,但相比以太网,令牌环网在灵活性和成本方面存在劣势。
无线局域网
无线局域网(通常称为Wi-Fi)使用无线电波来传输数据,使设备能够在不使用物理线缆的情况下连接到网络。Wi-Fi基于IEEE 802.11标准,并支持多种速度和频率(如2.4GHz、5GHz)。无线局域网在家庭、办公室和公共场所等环境中非常流行,因为它提供了更大的灵活性和便利性。
其中最常用、最广泛的局域网通信方式是以太网通信。
3.以太网协议
以太网协议是属于数据链路层的协议,用于以太网内主机之间的通信。
以太网帧格式
各字段说明:
源地址和目的地址:表示网卡的硬件地址(也叫 MAC 地址),长度是 48 位,是在网卡出厂时固化的。占用6个字节的空间。
- 表明数据从那张网卡来,要到那张网卡去。
帧协议类型:该字段有三种值,分别对应 IP、ARP、RARP。占用2个字节的空间。
- 当类型字段的值为0800时,表明该报文需要交付给上层的IP协议。
- 当类型字段的值为0806时,表明该报文需要交付给ARP协议。
- 当类型字段的值为8035时,表明该报文需要交付给RARP协议。
CRC校验码:帧末尾是 CRC 校验码,用于检测帧在传输过程中是否发生错误。占用4字节的空间。
以太网帧格式中数据部分占用46 ~ 1500个字节的空间。
区分局域网通信、以太网通信、以太网帧格式:
以太网通信是一种具体的局域网通信的方式;
以太网帧格式是以太网通信方式中数据传输的基本单位和组织形式,而以太网通信方式则是利用以太网帧格式进行数据交换和传输的一种具体实现方式。
对比理解Mac地址和IP地址
在报文转发的过程中,报文会携带两套地址,一套是源IP地址和目的IP地址,一套是源Mac地址和目的Mac地址。Mac地址是集成在网卡内部的,用于表示网卡的唯一性;IP地址是用来标识节点的。
为什么有了IP地址还要有Mac地址?
我们可以这样理解。当报文进行转发的时候,IP地址能够表明报文需要转发给哪个节点,但是真正实现报文从一个结点转发到另一个结点需要通过底层的物理设备 —— 网卡 来实现。通过网卡进行报文转发的时候,网卡并不具备IP地址,网卡只具备Mac地址。况且,一般的通信节点只有一张网卡,但像路由器这样的节点需要横跨两个网络,需要配备两张网卡。所以报文转发的时候,需要知道报文转发给哪个节点的哪张网卡。也就是会所,报文转发的时候,需要IP地址标识报文转发给哪个结点,还需要Mac地址标识报文转发给哪张网卡。
- IP 地址描述的是路途总体的 起点 和 终点。
- MAC 地址描述的是路途上的每一个区间的起点和终点。
认识MTU
我们从以太网帧格式中可以看到,数据的大小是46 ~ 1500字节。这是因为以太网帧中的数据长度规定最小为 46 字节,最大为 1500 字节,最大值1500字节被称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU。
如果上层网络层交给数据链路层的数据大小超过1500字节,数据链路层就会倒逼网络层进行数据的分片,如果网络层交给数据链路层的数据大小不足46字节,网络层就要在数据后面补填充位。
我们可以使用ifconfig命令查看MTU:
MTU对IP协议的影响
MTU是数据链路层所能发送的最大数据单元,数据链路层的数据是由网络层交给他的,如果网络层交给数据链路层的数据超过1500字节,数据链路层就会倒逼网络层进行分片,同样,接收方的网络层对于分片的数据就要进行组装。
具体过程为:
- 将较大的 IP 包分成多个小包,并给每个小包打上标签。
- 每个小包 IP 协议头的 16 位标识(id) 都是相同的。
- 每个小包的 IP 协议头的 3 位标志字段中,第一位暂时不使用,第 2 位置为 0,表示允许分片,第 3 位来表示结束标记(当前是否是最后一个小包,是的话置为 0,否则置为 1)。
- 到达对端时再将这些小包按顺序重组,拼装好之后一起返回给传输层。
- 一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是 IP 层不会负责重新传输数据。
MTU对UDP的影响
一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)),那么就会在网络层分成多个 IP 数据报,这多个 IP 数据报有任意一个丢失,都会引起接收端网络层重组失败,UDP不保证可靠性,数据丢失不会进行重发,那么这就意味着,如果 UDP 数据报在网络层被分片,整个数据被丢失的概率就大大增加了。
MTU对TCP的影响
TCP 的一个数据报也不能无限大,同样受制于 MTU,TCP 的单个数据报的最大消息长度称为 MSS(Max Segment Size)。TCP 在建立连接的过程中,通信双方会进行 MSS 协商,最理想的情况下,MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU)。
- 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值。
- 然后双方得知对方的 MSS 值之后,选择较小的作为最终 MSS。
- MSS 的值是通过 TCP 首部的 40 字节变长选项中 kind = 2 表明的。
MSS和MTU的关系:
基于以太网协议的报文转发流程
比如主机A要和主机E通信,主机A会向整个局域网中广播数据,大家都看得见,但是只有主机E会做出处理,因为主机A广播数据的时候,会带上自己的源mac地址,和目的mac地址(mac地址是网络通信中,物理层的网络设备之间的寻址),网络中的其他主机一看,这是主机A发送给主机E的数据,与我无关,忽略。主机E一看,这是主机A发送给我的数据,于是接收数据,主机A上的数据就发送给了主机E。
但是在一个局域网中,不仅仅只有主机A给主机E发送消息,可能有多台主机都要发送消息,但是网络只有一个,并且还是公共的;多台主机都向局域网中发送数据,这个时候就会造成数据的碰撞,数据一旦产生碰撞,数据的可靠性就难以保证,于是,便产生了一种机制,数据碰撞的检测和避免;也就是说,局域网中的主机向局域网中发送数据的时候,会先检测是否有主机在通信,有的话,就等一等,没有主机发送数据我再发,这样就能避免数据碰撞了;这个时候,大家都选择退一步,海阔天空。
以上就是基于以太网协议的报文转发流程。
交换机的工作原理
如果一个局域网中通信设备太多的话,产生数据碰撞和避免的概率就会大大增加,必然导致通信的效率降低。这个时候,人们发明交换机缓解局域网中设备太多导致的通信效率下降问题。
在局域网中引入交换机之后,刚开始的时候,交换机中并没有记录任何主机的Mac地址,当有主机向局域网中发送报文的时候,比如主机A给主机E发送报文。此时,交换机会将该报文转发至交换机右侧的局域网中,同时,交换机也知道了主机A在自己的左侧,并在自己的左侧记录主机A的Mac地址。当主机E收到该报文之后,向主机A响应消息的时候,交换机也会将主机E发送的报文转发至交换机的左侧,同时,在自己的右侧记录主机E的Mac地址。
当交换机把主机左侧的Mac地址和主机右侧的Mac地址都记录之后,交换机就可以通过报文中的目的Mac地址判断该报文是要发给左侧的主机还是右侧的主机,如果发送方和接收方在同一侧,就不会将报文转发至另一侧。这样,也就减少了数据碰撞的概率。
交换机通过划分碰撞域和记录两侧主机的Mac地址的方式减少数据碰撞的概率,缓解局域网中主机数量太多导致的通信效率下降问题。
4.ARP协议
ARP协议的作用
在网络通讯时,数据包首先是被网卡接收到再被上层协议处理的,但是,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址,此时也就无法进行通信。因此,在通讯前必须获得目的主机的硬件地址。而ARP协议就是用来获取目标主机的硬件地址的。
更具体的说,ARP协议的作用是根据目的IP地址获取目的Mac地址。
ARP协议的格式
- 硬件类型指链路层网络类型,1 为以太网。
- 协议类型指要转换的地址类型,0x0800 为 IP 地址。
- 硬件地址长度对于Mac地址为 6 字节。
- 协议地址长度对于IP 地址为 4 字节。
- op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。
- 其余四个字段分别是 源IP地址、目的IP地址、源Mac地址、目的Mac地址。目的Mac地址在未知的情况下填 FF:FF:FF:FF:FF:FF 表示广播。
需要注意的是:ARP协议不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。所以,ARP协议要发送至以太网中,还需要封装以太网的协议报头。
源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
分装以太网报头之后的报文格式:
ARP协议的工作流程
以主机A向主机B发送消息为例:
首先,主机A向局域网中发送ARP请求报文,此时,主机A还不知道目的Mac地址,目的Mac地址填充为FF:FF:FF:FF:FF:FF 表示广播地址,局域网中的所有主机都会处理带有广播地址的报文。当所有主机收到ARP请求的时候,会将ARP请求中的IP地址和自己的IP地址作比较,如果不同,则直接丢弃该报文;如果相同,接收方就知道有机器要和我通信,就会根据对方发送过来的ARP请求构建ARP响应报文。在该过程中,只有主机B会构建ARP响应报文。
主机B构建的ARP响应报文中会表明自己的Mac地址并发送到局域网中,此时,只有主机A能获取到ARP响应报文,主机A通过读取响应报文中的src_mac就知道了主机B的Mac地址。
以上就是ARP协议的工作流程。
ARP缓存表
每台主机都维护一个 ARP 缓存表,缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址 。ARP缓存表的引入使得获取目的IP主机的Mac地址的时间成本减少,提高了获取目的Mac地址的效率。
ARP 缓存表可以用 arp -a 命令查看:
为什么ARP缓存表要有过期时间呢?
这是因为,ARP缓存表中记录的是IP地址和Mac地址的映射关系。由于动态IP地址分配的原因,我们不能保证IP地址是不变的,IP地址会变,所以ARP缓存表也需要定期刷新。同理,Mac地址是网卡的标识,网卡是硬件,我们不能保证主机的硬件永远不更换,所以,Mac地址也是会变的,这也要求ARP缓存表中的信息不能保存太久。
相关文章:

数据链路层协议 —— 以太网协议
目录 1.数据链路层解决的问题 2.局域网通信方式 以太网 令牌环网 无线局域网 3.以太网协议 以太网帧格式 对比理解Mac地址和IP地址 认识MTU MTU对IP协议的影响 MTU对UDP的影响 MTU对TCP的影响 基于以太网协议的报文转发流程 交换机的工作原理 4.ARP协议 ARP协议…...

【Javascript】一文看懂JS中的symbol到底是什么东西
作为一名经验丰富的 JavaScript 开发者,你可能对 JavaScript 中的各种数据类型已经了如指掌,比如数字、字符串、布尔值和对象。但是你知道吗?JavaScript 还有一种叫做 Symbol 的类型。在这篇文章里,我们将深入探讨 Symbol 的世界&…...

go语言网络编程
网络编程Go语言网络编程相关APIGo语言网络编程架构Go语言的网络编程实现基于以下几个关键原理:bufiobufio 包的主要功能和使用场景主要类型示例 tcp通信解决粘包粘包和拆包的产生原因解决方法示例 网络编程 Go语言网络编程相关API 1.1 net包net.Listen(network, a…...

LeetcodeLCR 116. 省份数量
文章目录 题目原题链接思路C代码 题目 原题链接 LCR 116. 省份数量 思路 利用并查集的思想,将连接的诚实放在一个集合当中,最后遍历并查集数组判断有几颗树 初始化一个并查集;将连通的城市合并;统计并查集中树的个数;…...

Linux系统上搭建Vulhub靶场
Linux系统上搭建Vulhub靶场 vulhub 是一个开源的漏洞靶场,它提供了各种易受攻击的服务和应用程序,供安全研究人员和学习者测试和练习。要在 Linux 系统上安装和运行 vulhub,可以按照以下步骤进行: 1. 安装 Docker 和 Docke…...

Avalonia的第三方UI库SukiUI详细教程
文章目录 一、SukiUI 简介二、安装与配置1、安装 SukiUI 库:2、配置 Avalonia 项目以使用 SukiUI:三、基本组件使用1、按钮(SukiButton):2、文本框(SukiTextBox):3、标签(SukiLabel):4、下拉列表(SukiComboBox):四、布局与容器1、布局容器介绍:2、使用布局容器组…...

https协议文件上传比http协议慢
一.自己写一个文件上传的接口,在浏览器文件上传https协议比http协议慢(速度上https协议是http协议的八分之一左右),在postman上传是正常的(证明代码是没有问题的),那就是协议的问题 二.经发现&…...

Elasticsearch在大数据处理中的优势
Elasticsearch 在大数据处理中的优势主要体现在以下几个方面: 1. 分布式架构 水平扩展:Elasticsearch 设计为分布式系统,可以轻松地通过增加节点来水平扩展,处理 PB 级别的数据。数据分片和复制:数据自动分片并跨多个…...

cmake--target_compile_definitions
作用 笼统的说是:该命令添加预编译选项到编译目标中。 预编译选项 预编译选项(Preprocessor Options)是一类用于控制 C/C 预处理器行为的编译选项。预处理器是 C/C 编译过程中的第一个处理阶段,主要负责对源代码中的预处理指令…...

MATLAB数据文件读写:1.格式化读写文件
格式化读写文件 matlab提供了对数据文件建立、打开、读取、写入、关闭等操作的函数。 数据文件可以分为两类: 文本文件:以ASCII码形式存储的文本文件;编码基于字符定长,译码相对容易二进制文件:以二进制形式存储的文…...

NFTScan | 09.16~09.23 NFT 市场热点汇总
欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2024.09.16~ 2024.09.22 NFT Hot News 01/ DeGods 推出代币 DEGOD,用户可通过 DeGods、y00ts 或 DUST 进行转换 9 月 16 日,Solana NFT 项目 DeGods 推出代币…...

rabbitmq整合skywalking并编写自定义插件增强
rabbitmq整合skywalking 首先先下载准备好skywalking 的服务端和ui控制台,java-agent https://skywalking.apache.org/downloads/ 整合skywalking 我的流程是在生产者和消费者服务中去引入一个mq的sdk,具体SDK的内容可以查看这篇文章 在sdk的pom文件…...

sftp登录ipv6用中括号 `sftp x@[ipv6]`
sftp登录ipv6用中括号 sftp x[ipv6] 实例 sftp root[2::fd40:1:1]SFTP(Secure File Transfer Protocol,安全文件传输协议)是一种基于SSH(Secure Shell)的安全协议,用于在网络上安全地传输文件。当需要登录…...

Python 从入门到实战25(模块)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了类继承的相关知识。今天我们将学习一下模块的…...

Leetcode面试经典150题-172.阶乘后的零
给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: 输入:n 3 输出:0 解释:3! 6 ,不含尾随 0示例 2: 输入:n 5 输出&a…...

【机器学习】揭秘GBDT:梯度提升决策树
目录 🍔 提升树 🍔 梯度提升树 🍔 举例介绍 3.1 初始化弱学习器(CART树) 3.2 构建第一个弱学习器(CART树) 3.3 构建第二个弱学习器(CART树) 3.4 构建第三个弱学习…...

Android Studio 2024 安装、项目创建、加速、优化
文章目录 Android Studio安装Android Studio项目创建Android Studio加速修改GRADLE_USER_HOME位置减少C盘占用空间GRADLE加速 修改模拟器位置减少C盘占用空间参考资料 Android Studio安装 下载android studio download android-studio-2024.1.2.12-windows.exe 或者 android-…...

JSP(Java Server Pages)基础使用
首先在web文件夹中新建一个jsp/jspx文件,这个文件就是jsp文件 <%--Created by IntelliJ IDEA.User: ***Date: 2024/9/23Time: 18:43To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-…...

数据结构 - 概述及其术语
经过上一章节《数据结构与算法之间有何关系?》的阐述,相信大家对数据结构多少有了点了解,今天我们将进入数据结构的正式学习中。 在计算机科学中,数据结构是一种数据管理、组织和存储的格式。它是相互之间存在一种或多种特定关系的…...

UE5——在线子系统
Unreal Engine 5 (UE5) 的在线子系统(Online Subsystem)实现多人在线游戏的原理涉及到网络编程和分布式系统设计中的多个方面。以下是该系统工作的一些核心概念和技术: 1. 客户端-服务器架构: - 大多数现代多人在线游戏采用客户端-服务器模型…...

9.23-部署项目
部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: ma…...

非标独立设计选型--二十六--电磁阀的选型件算
电磁阀:电磁控制---自动化的关键 PLC ---- 继电器----电磁阀----调速阀----气缸 供气源--- 【电磁阀主要负责:换向,实现气缸的动作变化】 电磁阀有哪些参数是会影响到使用的? …...

flume系列之:出现数据堆积时临时增大sink端消费能力
flume系列之:出现数据堆积时临时增大sink端消费能力 一、背景二、增大sink端消费能力flume系列之:flume生产环境sink重要参数理解 一、背景 flume出现数据堆积,消费的数据持续堆积在channel中参数org_apache_flume_channel_channel1_channelfillpercentage的值大于0,并且持…...

SQL Server全方位指南:从入门到高级详解
本文将分为三大部分,逐步深入SQL Server的基础知识、进阶技巧和高级特性,旨在帮助从初学者到经验丰富的开发人员深入理解和使用SQL Server。 一、入门篇 1.1 什么是SQL Server? SQL Server 是由微软开发的关系型数据库管理系统(…...

【JavaSE】IO模型
IO,英文全称是 Input/Output,翻译过来就是输入/输出。我们听得挺多,就是磁盘 IO,网络 IO 等。IO 即输入/输出,到底谁是输入?谁是输出?IO 如果脱离了主体,会让人疑惑。 计算机角度的…...

手术缝合线合格品检测项目众多 线径又是其重要一环!
手术缝合线的合格与否,关系着使用及恢复情况,其品质的优劣非常重要,而要想得到合格的手术缝合线,则需要多种类型的仪器进行检测。其中线径就是重要一环,下面来看看线径检测仪,并简单介绍一下其他所需检测信…...

STM32 单片机最小系统全解析
STM32 单片机最小系统全解析 本文详细介绍了 STM32 单片机最小系统,包括其各个组成部分及设计要点与注意事项。STM32 最小系统在嵌入式开发中至关重要,由电源、时钟、复位、调试接口和启动电路等组成。 在电源电路方面,采用 3.3V 直流电源供…...

深度解析ElasticSearch:构建高效搜索与分析的基石原创
引言 在数据爆炸的时代,如何快速、准确地从海量数据中检索出有价值的信息成为了企业面临的重要挑战。ElasticSearch,作为一款基于Lucene的开源分布式搜索和分析引擎,凭借其强大的实时搜索、分析和扩展能力,成为了众多企业的首选。…...

【Python常用模块】_PyMySQL模块详解
课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈…...

【算法思想·二叉树】最近公共祖先问题
本文参考labuladong算法笔记[拓展:最近公共祖先系列解题框架 | labuladong 的算法笔记] 0、引言 如果说笔试的时候经常遇到各种动归回溯这类稍有难度的题目,那么面试会倾向于一些比较经典的问题,难度不算大,而且也比较实用。 本…...