Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >初识Linux · 数据链路层

初识Linux · 数据链路层

作者头像
_lazy
发布于 2025-05-21 04:42:58
发布于 2025-05-21 04:42:58
1010
举报
文章被收录于专栏:Initial programmingInitial programming

前言:

前文我们通过OSI模型,一直到TCP/IP四层模型,经过了三篇文章左右的功夫,我们把网络层介绍完毕,主要还是介绍的IP协议的iphdr,以及内网公网的概念,最后是一个IP分片。那么经过一系列介绍,我们最终也到了TCP/IP四层模型的最后一层——数据链路层。

那么数据链路层我们这么介绍,从以太网帧协议到认识MAC地址,再到arp协议,最后引入一个交换机的概念,数据链路层我们也就收官了。

当数据链路层讲完,我们下一篇文章再补充一点细节部分,具体之后再说咯,那么废话不多说,我们直接进入主题。


以太网帧协议

首先,在网络报文传输的时候,我们重点讨论的是报文从一个子网到达另一个子网的过程,那么我们并没有重点讨论在一个局域网内报文是怎么传输的,是怎么从一个主机到达另一个主机的,而数据链路层,要讨论的就是这个问题。

在网络层报文传输的时候,报文通过IP协议封装,到数据链路层之后也有对应的协议进行封装,这个协议叫做以太网帧协议。不过它非常的简单:

它就只有这么多字段,其中目的地址和源地址代表的是MAC地址,而对于MAC地址来说,设定的就是6字节,我们也可以通过ifconfig查看mac地址:

其中etho的ethre代表的就是MAC地址,由6字节组成,什么是MAC地址我们在第一节网路的时候就谈论了,MAC就相当于临时的地址

以太网帧的CRC是校验码,我们不谈,中间的数据部分是46字节到1500字节,其中如果中间的数据不够46字节,OS就会采取一点措施,比如给数据中加入一定数量的1或0,总之能够到达46字节就可以了,当然了,数据也是不能超过MTU的,这是上文我们已经介绍了的。

这里面的重点是类型,类型可以代表IP报文,ARP请求/应答,RARP请求/应答。那么有了类型,我们就可以通过类型判断它是需要向上交付的报文,还是用来请求MAC地址或应答MAC地址的。

那么具体的涉及到了ARP协议,我们先不谈。但是有了以上的理解,如何解包,如何分用我们也就清楚了。


ARP协议

ARP协议理解

在数据链路层中存在两个协议,一个是以太网帧协议,一个是ARP协议,而ARP协议是建立在IP层和以太网帧协议的中间,但是实际上ARP协议也是在数据链路层的,就像这样:

那么ARP协议是什么我们要清楚,ARP协议是用来交换双方的MAC地址的,相当于是进行一个IP地址到MAC地址的转换,那么RARP协议代表的就是reverse ARP,完成的工作是MAC地址到IP地址的转换。

那么问题来了,我们明明可以通过IP直接进行通信,为什么要在数据链路层新增加一个ARP协议和以太网帧协议呢?因为MAC地址是物理层和数据链路层通信的地址,它们是固定的硬件地址,而IP地址是动态分配的,所以要实现本地通信,仍然需要落实到MAC地址上。即便说可以通过IP地址直接通信,那么每层都要理解什么是IP地址,这无疑增加了各种成本,所以使用MAC地址,也是更好的实现了分层,还记得吗?我们在最开始介绍协议的时候,说到了一个非常重要的话题就是:协议的出现,可以让通信更好的解耦合

所以上述给出的定论是:ARP协议是用来进行IP地址到MAC地址的转换的,RARP协议是用来进行MAC地址到IP地址的转换的。当然了,大部分情况下都是使用的ARP协议,因为知道MAC地址但是不知道IP地址的情况还是比较少见的。

ARP协议字段

前面的14字节是以太网帧协议,后面的28字节是ARP协议。

对于硬件类型来说,一般都是1,表示以太网,对于协议类型来说,有多种取值,用来判读上层协议类型或者是ARP请求/应答,具体可以参考这个表格:

值(十六进制)

协议类型

描述

0x0800

IPv4

Internet Protocol v4(最常用)

0x86DD

IPv6

Internet Protocol v6(IPv6 不使用ARP,而使用 NDP)

0x0806

ARP

仅在以太网帧类型字段中使用

0x8035

RARP

Reverse ARP(已过时)

0x809B

AppleTalk

Apple公司网络协议

0x8137

IPX

Novell公司网络协议(已过时)

对于OP来说,分别有4个取值,1代表ARP请求,2代表ARP应答,3代表RARP请求,4代表RARP应答。对于硬件地址长度来说,实际上就是MAC地址的长度,对于协议地址长度,比如IPv4地址的长度。对于发送端以太网地址和目的以太网地址来说,都是6字节,实际上就是MAC地址,对于发送端IP地址和目的IP地址来说,实际上就是IP地址。

那么我们可以模拟一下如何确认MAC地址的:

假设存在多台主机,主机A第一次给主机E发送消息,那么它会构建一个ARP请求,其中包含了两个IP地址,两个MAC地址,一个MAC地址是A的,一个MAC地址是E的,但是并不知道是多少,然后主机A将这个报文发送到了子网中,那么在局域网中每个主机都是可以收报文的,那么假设主机B收到了,解析的时候一看IP地址主机B的,那么该报文在主机B的数据链路层就会丢弃该报文。其中主机E收到了,一看IP地址是自己的,所以就会再发送一个报文到子网中,其中同样包含IP地址A和E的,MAC地址A和E的,OP被设置为2,代表这是一个ARP应答,其他主机收到一看,自己没有发送ARP请求,所以会抛弃该报文,主机A收到并成功解析,而这个过程ARP报文中最重要的就是OP。

一看OP知道该报文的类型是什么,才决定该主机是直接抛弃还是开始解析。

那么现在有一个问题:我们明显发现以太网帧协议中有MAC地址,帧类型,我们发现,以太网帧协议中的三个字段和ARP协议中的字段似乎重复了?

字段名称

出现位置

是否重复

ARP中是否必须存在

原因解释

源 MAC 地址

以太网帧头 + ARP协议中(Sender MAC)

✅ 是

✅ 必须

ARP协议需要明确声明“谁在发送请求”,供接收方写入 ARP 缓存表,且链路层信息上层无法直接访问

目标 MAC 地址

以太网帧头 + ARP协议中(Target MAC)

✅ 是

✅ 必须

请求时目标MAC未知,帧头用广播地址,ARP中用全0,占位并供应答者填写;响应时明确告知目标MAC

协议类型(IPv4)

以太网帧头(Type 字段)≈ ARP协议字段(Protocol Type)

⚠️ 部分重复

✅ 必须

以太网Type字段告诉接收方“上层协议是ARP”,而ARP内部还需指明它解析的是哪种上层协议地址(如IPv4)

所以就像一物多用,在每一层都有自己的用处的,ARP缓存表我们可以通过arp -a查看:

当然了,从协议方面两个协议分别指明协议不同,以便更好的交付,加上最开始MAC地址不知道,所以需要明确MAC地址,就要使用ARP协议的MAC地址,加上还要缓存ARP缓存表,所以重复虽然是有,但是也是有用的。

交换机

我们清楚的知道一个子网就是一个碰撞域,所以在碰撞域类,如何避免碰撞是一个重要的话题,这里面就涉及到了碰撞算法,同学们可自行了解。

而如果发生了碰撞,就可能会导致两台主机休眠,谁先醒来谁就继续发数据,那么我们应该是经历过这么一个情况的:一大堆人在操场,会发现网络很卡,这就是因为在这个局域网内,数据碰撞的太多了,从而导致主机一直休眠。

那么如果一台主机往里面发送很多垃圾数据,让其他主机发生碰撞,就会导致其他主机休眠,自己的主机虽然发生了碰撞,但是它厚脸皮啊,它发的都是垃圾效率,所以可以疯狂重连,只要让其他主机退避就可以了,它只在乎发送垃圾数据。

那么为了解决一条物理信道有多台主机发送数据导致碰撞的问题,可以引入交换机:

在第一次交换机工作的时候是不知道左右两边的MAC地址的,但是在多台主机发送ARP之后,交换机内部会记录对应的MAC地址,这个时候就能真正分割对应碰撞域了。

对于数据链路层我们暂时说到这里,对于ARP的具体过程和ARP欺骗我们之后再谈~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常用的数据链路层协议_数据链路层和网络层
虽然网络中各个局域网所采用的通信技术可能的不同的,但是IP屏蔽了底层网络的差异,对于网络通信双方的IP层及其往上的协议来说,它们并不需要关心底层具体使用的是哪种局域网技术。
全栈程序员站长
2022/11/01
9460
【Linux】数据链路层:以太网协议
1. (1)IP提供了将数据包跨网络发送的能力,这种能力实际上是通过子网划分+目的ip+查询节点的路由表来实现的,但实际上数据包要先能够在局域网内部进行转发到目的主机,只有有了这个能力之后,数据包才能跨过一个个的局域网,最终将数据包发送到目的主机。 所以跨网络传输的本质就是跨无数个局域网内数据包转发的结果,离理解整个数据包在网络中转发的过程,我们只差理解局域网数据包转发这临门一脚了。 (2)而现在最常见的局域网通信技术就是以太网,无线LAN,令牌环网(这三种技术在数据链路层使用的都是MAC地址),早在1970年代IBM公司就发明了局域网通信技术令牌环网,但后来在1980年代,局域网通信技术进入了以太网大潮,原来提供令牌网设备的厂商多数也退出了市场,在目前的局域网种令牌环网早已江河日下,明日黄花了,等到后面进入移动设备时代时,在1990年,国外的一位博士带领自己的团队发明了无线LAN技术,也就是wifi这项技术,实现了与有线网一样快速和稳定的传输,并在1996年在美国申请了无线网技术专利。 今天学习的正是以太网技术。
举杯邀明月
2023/10/17
6730
【Linux】数据链路层:以太网协议
【计算机网络】数据链路层
假设我们要将数据从主机A推送到主机B,根据我们之前的理解,是可以通过网络层进行路由的,这就是网络层在做决策,所以在网络层就要先决策该报文是要转发给和我处于同一网段的其它主机,还是交到下一跳,决策了之后再把报文向下交付,最后把报文交到路由器中。
YoungMLet
2024/03/30
1970
【计算机网络】数据链路层
【Linux网络】网络基础:数据链路层协议
前言: 在当今这个信息化高速发展的时代,网络已经成为我们生活、工作中不可或缺的一部分。从发送一封电子邮件到观看一部在线电影,从远程办公到云计算服务,网络无处不在地连接着我们。然而,在这看似简单便捷的网络背后,隐藏着复杂而精细的通信机制。数据链路层协议,作为网络协议栈中的关键一环,正是这些机制中不可或缺的重要组成部分。
Eternity._
2024/12/24
1700
【Linux网络】网络基础:数据链路层协议
【Linux】:数据链路层(以太网 & 局域网通信 & ARP协议 & ARP 欺骗 & DDos 攻击)
数据链路层 位于物理层和网络层之间,其作用是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层,主要通过物理介质(如以太网,Wi-Fi等)将数据分割成帧,并在相邻节点之间进行传输。
IsLand1314
2025/03/02
3340
【Linux】:数据链路层(以太网 & 局域网通信 & ARP协议 & ARP 欺骗 & DDos 攻击)
【Linux网络】网络层IP协议,数据链路层:以太网、ARP协议
但是随着互联网的飞速发展,这种划分方案的局限性很快显现出来,A 类地址很容易浪费,于是提出了新的划分方案:CIDR(Classless Interdomain Routing)
_小羊_
2025/03/02
1750
【Linux网络】网络层IP协议,数据链路层:以太网、ARP协议
【在Linux世界中追寻伟大的One Piece】数据链路层
数据链路层是OSI模型的第二层,它负责在相邻节点之间的物理链路上实现可靠的数据传输。数据链路层的主要功能包括帧同步、差错检测和纠正、流量控制以及链路管理。它通过将网络层传递的数据包封装成帧,并添加必要的控制信息(如源地址和目标地址)来实现这些功能。数据链路层还负责在物理层提供的服务基础上向网络层提供服务,确保数据能够可靠地从一个网络实体传输到另一个网络实体。
枫叶丹
2024/09/13
1420
【在Linux世界中追寻伟大的One Piece】数据链路层
网络安全——数据链路层安全协议
通信的每一层中都有自己独特的安全问题,网络安全问题应该在多个协议层,针对不同的弱点解决。就安全而言,数据链路层(第二协议层)的通信连接是较为薄弱的环节。
网络豆
2023/10/15
5340
网络安全——数据链路层安全协议
【Linux网络编程】数据链路层 | MAC帧 | ARP协议
数据链路实现某一区间(一条)内的通信,而IP实现直至最终目标地址的通信(点对点)。
南桥
2025/01/14
3140
【Linux网络编程】数据链路层 | MAC帧 | ARP协议
数据链路层重点总结
又是新的一年,展望2023年,博主给大家带来了网络中数据链路层的重点总结,附上博主本人的实例,帮助大家更好的理解数据是怎么在网络中传输的。
VIBE
2023/01/04
5030
数据链路层重点总结
网络原理(五)——数据链路层
MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.
海盗船长
2020/08/27
1.4K0
TCP/IP第二层--数据链路层
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
黄规速
2022/04/14
1.9K0
TCP/IP第二层--数据链路层
数据链路层:以太网/ARP协议
"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容。例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等。例如以太网中的网线必须使用双绞线。传输速率有10M, 100M, 1000M等。以太网是当前应用最广泛的局域网技术。和以太网并列的还有令牌环网, 无线LAN等。
二肥是只大懒蓝猫
2023/10/13
5390
数据链路层:以太网/ARP协议
【网络协议】数据链路层[通俗易懂]
这里的ARP协议主要用来将32bit的IP地址解析为相应48bit(以太网中)的MAC地址(硬件地址)。而RARP协议则是将硬件地址解析为IP地址,这两个协议位于网络层,和IP数据报一样,都具有各自的以太网数据帧类型(即传入到以太网中要加上相应的MAC帧)。
全栈程序员站长
2022/07/07
6140
【网络协议】数据链路层[通俗易懂]
【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议
"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容 。例如:规定了网络拓扑结构,访问控制方式,传输速率等;例如以太网中的网线必须使用双绞线,传输速率有 10M、100M、1000M等。以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等。
用户10923276
2024/10/17
4390
【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议
计算机网络-数据链路层
透明传输:指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
用户9615083
2022/12/30
9600
计算机网络-数据链路层
计算机网络:第3章 数据链路层
链路层的作用:接受网络层的数据单元并封装成帧,并交付给物理层。接受物理层传来的帧并去掉帧头帧尾发送给网络层,实现链路之间数据帧的无差错接受与传送。
Here_SDUT
2022/09/19
1.9K0
计算机网络:第3章 数据链路层
【计网】从零开始认识arp协议
传输层协议提供一种策略保证通信的稳定性;网络层协议提供一种能力保证可以进行通信。数据链路层是用于两个设备(同一种数据链路节点)之间进行传递。
叫我龙翔
2024/10/30
3580
【计网】从零开始认识arp协议
数据链路层
数据链路层是OSI七层模型中的 第二层 ,其传输的数据单元为帧,工作的网络设备为叫交换机。 以太网Ethernet=局域网LAN=内网
阿七日记
2021/12/28
5670
数据链路层
【计算机网络】数据链路层深度解析
指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。 帧头和帧尾中包含有重要的控制信息,其作用·之一是帧定界 透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
洁洁
2024/09/18
1770
相关推荐
常用的数据链路层协议_数据链路层和网络层
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档