数据链路层协议 —— 以太网协议

news2024/12/25 1:08:15

目录

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缓存表中的信息不能保存太久。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue高校两校区通勤校车预约系统的设计与实现

目录 用户功能管理员功能系统实现截图技术介绍核心代码部分展示使用说明详细视频演示源码获取 用户功能 登录注册:允许用户创建账户并登录系统。 首页:展示系统主要功能和通勤车相关的重要信息。 个人中心:用户可以查看和编辑自己的个人信息…

ios swift5 UITextView占位字符,记录限制字数

文章目录 截图代码:具体使用代码:CustomTextView 截图 代码:具体使用 scrollView.addSubview(contentTextView)contentTextView.placeholderLabel.text LocalizableManager.localValue("write_comment")contentTextView.maxCharac…

分享两个虚拟试衣工具,一个在线,一个离线,还有ComfyUI插件

SAM ,对不住了! 我没记错的话,OpenAI CEO,性别男,取向男,配偶男。 这又让我联想到了苹果CEO库克... 所以OpenAI和Apple可以一啪即合。 钢铁直男老马就和他们都不对付~~ 开个玩笑,聊…

以数赋能实景三维创新“科技+文旅”

在数字化时代,科技与文化的融合为我们带来了无限可能。今天,我们将探讨如何利用实景三维技术,推动“科技文旅”的创新发展。 1. 实景三维技术概述 实景三维技术,是一种集成了遥感、地理信息系统(GIS)、三…

量子计算如何引发第四次工业革命——解读加来道雄的量子物理观

在科技的历史长河中,人类经历了多次重大的技术变革:从第一次工业革命的蒸汽机到第三次计算机革命的互联网与半导体技术,每次技术革命都彻底改变了我们的生活。而如今,我们正处在第四次工业革命的前夕,其核心驱动力是量…

mybatis 配置文件完成增删改查(一):直接查询所有信息

文章目录 编写三步走查询所有编写接口方法编写sql语句执行方法,测试结果数据库字段名和实体类变量名不一致:ResultMap数据库字段名和实体类变量名不一致:方法二 编写三步走 编写接口方法:Mapper接口 参数有无 结果类型编写sql语句…

【Python】PythonRobotics:机器人算法的 Python 实现

在机器人技术的研究和开发中,理解和实现各种机器人算法是至关重要的。PythonRobotics 是一个开源项目,它提供了大量机器人算法的 Python 实现,这些算法覆盖了机器人科学的多个领域,包括定位、建图、导航、路径规划等。 ⭕️宇宙起…

nicegui标签组件lable用法深度解读和示例,源代码IDE运行和调试通过,截图为证

传奇开心果微博文系列 序言一、标签组件lable最基本用法示例1.在网页上显示出 Hello World 的标签示例2. 使用 style 参数改变标签样式示例 二、标签组件lable更多用法示例1. 添加按钮动态修改标签文字2. 点击按钮动态改变标签内容、颜色、大小和粗细示例代码3. 添加开关组件动…

美版iPhone 16 Pro完美改卡,15 Pro再见了

资深果粉应该都知道,从iPhone 14起,所有美版的iPhone,都从eSIM实体SIM,改成了全eSIM方案,彻底放弃了实体卡槽,这就给卡贴机这一行业造成了毁灭性的打击。 因为国内无法使用eSIM,即使有低价的美版…

什么是上层封禁海外流量

上层封禁海外流量(Upper-layer Blocking of Overseas Traffic)是一种网络安全策略,旨在通过在网络传输的上层进行流量控制和过滤,从而阻止来自海外的恶意流量或不必要的访问。这一措施主要用于防止分布式拒绝服务(DDoS…

C++笔记---set和map

1. 序列式容器与关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关…

数据驱动农业——农业中的大数据

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

win操作系统各个版本下载

MSDN, 我告诉你 - 做一个安静的工具站 (itellyou.cn) 下载地址链接转换工具 - 在线工具 (tool.lu) 通过这个网站可以再将ed2k转换成别的下载工具链接

LLM安全风险及应对

LLM安全风险主要从四个维度分析:用户输入、训练数据、模型本身以及工具和插件。 风险类别具体风险风险解释应对措施具体举例用户输入相关风险提示注入(Prompt Injection)攻击者通过设计特定输入,使模型生成恶意或不安全的输出。- …

进度调度切换

tips: 进程=内核数据结构(PCB/task_struct)+代码和数据 UID:每个用户对应的id 进程分类 & 进程关系 僵尸进程 父在子死 进程退出 代码不会再执行了,系统可以立即释放对应代码和数据进程…

推荐一款开源的Redis桌面客户端

TinyRDM 是一个现代化的、轻量级的跨平台 Redis 桌面客户端,能在 Mac、Windows 和 Linux 系统上使用。它有着现代化的设计风格,界面既简洁又清晰,操作起来方便又高效。不管是刚开始接触的新手,还是经验丰富的开发者,都…

【安装教程】Windows环境下Neo4j的安装与配置

【安装教程】Windows环境下Neo4j的安装与配置 Neo4j的概念一、安装前准备——JDK二、Neo4j的安装三、Neo4j的环境配置四、安装验证 Neo4j的概念 Neo4j 是一个高性能的图形数据库管理系统,它使用图形模型来存储和处理数据。Neo4j 的图形模型由节点和边组成&#xff0…

WebLogic 漏洞复现

1、后台弱⼝令GetShell 默认账号密码:weblogic/Oracle123 weblogic常⽤弱⼝令:https://cirt.net/passwords?criteriaweblogic 这⾥注意, 单个账号错误密码5次之后就会⾃动锁定。 http://47.121.212.195:7001/console 2、登录后台后&#…

矩阵分析 线性空间和线性变换 笔记手稿

1线性空间的概念 数域 线性空间 证明 线性相关和线性无关 线性空间的基 基的性质 基变换和坐标变换 子空间和维数定理 两个子空间的交和和都是子空间 维数公式 子空间扩充定理 维数公式及其证明 直和 证明 线性空间的同构 注意:映射的概念 同构的性质 线性变换的…

前端组件库Element UI 的使用

一、准备工作 1.确保安装了开发软件 VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js 和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行…