【计算机网络-数据链路层】以太网、MAC地址、MTU与ARP协议

📚 博主的专栏

🐧 Linux | 🖥️ C++ | 📊 数据结构 | 💡****C++ 算法****** |** 🅒********C 语言****** |** 🌐 计算机网络
摘要:本文系统剖析数据链路层的核心机制,详解以太网技术标准及其帧结构,阐述MAC地址的作用与唯一性,并模拟局域网通信中帧转发与碰撞域的处理逻辑。通过MTU(最大传输单元)对IP、UDP、TCP协议的影响,解释数据分片与重组原理及网络性能优化策略。同时,探讨交换机划分碰撞域的原理与自学习功能,以及ARP协议如何通过广播与应答实现IP与MAC地址的动态映射,保障网络通信的精准性。全文覆盖数据链路层与网络层的关键交互,为理解局域网通信提供全面视角。

目录

数据链路层

认识以太网

以太网帧格式

mac帧是如何解包的?定长报头的策略

如何分用?根据类型字段(0800是IP数据报,就交给IP层,还有0806,8035)

[认识 MAC 地址](#认识 MAC 地址)

[认识 MTU](#认识 MTU)

交换机--划分碰撞域

[MTU 对 IP 协议的影响](#MTU 对 IP 协议的影响)

[MTU 对 UDP 协议的影响](#MTU 对 UDP 协议的影响)

[MTU 对于 TCP 协议的影响](#MTU 对于 TCP 协议的影响)

[MSS 和 MTU 的关系](#MSS 和 MTU 的关系)

[ARP 协议](#ARP 协议)

[ARP 协议的作用](#ARP 协议的作用)

[ARP 协议的工作流程](#ARP 协议的工作流程)

[ARP 数据报的格式​编辑](#ARP 数据报的格式编辑)


数据链路层

用于两个设备(同一种数据链路节点)之间进行传递.

对比理解 "数据链路层" 和 "网络层"

数据链路实现某一个区间(一跳)内的通信,而IP实现直至最终目标地址的通信(点对点),同一个网段(局域网)相互之间要实现转发,能直接通信。

认识以太网

• "以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;

• 例如以太网 中的网线必须使用双绞线; 传输速率有 10M, 100M, 1000M 等;

• 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN 等;

以太网帧格式

以太网的帧格式如下所示

• 源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址), 长度是 48 位,是在网卡出厂时固化的;

• 帧协议类型字段有三种值,分别对应 IP、 ARP、 RARP;

• 帧末尾是 CRC 校验码。

mac帧是如何解包的?定长报头的策略

如何分用?根据类型字段(0800是IP数据报,就交给IP层,还有0806,8035)

认识 MAC 地址

• MAC 地址用来识别数据链路层中相连的节点;

• 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:

08:00:27:03:fb:19)

• 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址)
模拟一次局域网通信,A想和G通信:报文会发给所有在局域网上的主机,发给B的时候,经过报头将和有效载荷分离,对比MAC帧的过程,由于目的MAC并不是MACB,因此在B的数据链路层就将报文丢弃,其他的也同理。G收到后报头后经过相同的过程,最后得到数据。

在局域网中,任何时候只允许一台主机在局域网中发送消息,一个局域网就叫做一个碰撞域,一旦发生碰撞,两主机之间执行碰撞避免算法(保证自己对临界资源的独占性),底层也会对数据帧进行重传。一个局域网中主机越多发生碰撞的概率越高。一旦局域网中,有大量主机发生碰撞,要缓解问题,需要用到交换机。数据帧的长度和碰撞概率的关系,越长越容易碰撞。因为越长,使用子网数据发送的周期更长。因此需要规定MTU。

认识 MTU

MTU 相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

• 以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,ARP 数据包的长度不够 46 字节,要在后面补填充位;

• 最大值 1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;

• 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的 MTU了,则需要对数据包进行分片(fragmentation);

• 不同的数据链路层标准的 MTU 是不同的;

交换机--划分碰撞域

交换机转发的对象也是数据帧(交换机是数据链路层的设备),交换机内部有一套自己的算法,有接口,将一个子网划分成两个区域,当A发送数据时,交换机也会收到,并且会将数据帧转发给目的mac地址。也会记录A的mac地址,其他的主机在通信时,也会将数据帧交给交换机,交换机记录他们的mac地址,并且存下转发报文的地址,将子网划分成两个区域,有自学习功能。

未来,交换机收到报文后,就会识别,看目的地址是否在某一侧再做转发,比如说交换机收到报文A要到E,就不会将报文转发给C、D、G等,以此来减少碰撞,提高效率,A发消息的时候,C也能发。交换机也能碰撞检测,一边发生碰撞他就不会再转发了。

MTU 对 IP 协议的影响

由于数据链路层 MTU 的限制, 对于较大的 IP 数据包要进行分包

• 将较大的 IP 包分成多个小包, 并给每个小包打上标签;

• 每个小包 IP 协议头的 16 位标识(id) 都是相同的;

• 每个小包的 IP 协议头的 3 位标志字段中, 第 2 位置为 0, 表示允许分片, 第 3 位来表示结束标记(当前是否是最后一个小包, 是的话置为 0, 否则置为 1);

• 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;

• 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是 IP 层不会负责重新传输数据;

MTU 对 UDP 协议的影响

让我们回顾一下 UDP 协议:

• 一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)), 那么就会在网络层分成多个 IP 数据报.

• 这多个 IP 数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果 UDP 数据报在网络层被分片, 整个数据被丢失的概率就大大增加了

MTU 对于 TCP 协议的影响

让我们再回顾一下 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 的关系


ARP 协议

虽然我们在这里介绍 ARP 协议, 但是需要强调, ARP 不是一个单纯的数据链路层的协

议, 而是一个介于数据链路层和网络层之间的协议;但是arp是由链路层自动完成的,是属于数据链路层的

ARP 协议的作用

ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系.

• 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址;

• 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;

• 因此在通讯前必须获得目的主机的硬件地址

ARP 协议的工作流程

先广播,再mac正常通信

任何主机:

1.可能会收到arp应答

2.可能会收到arp请求

每一台主机都是一个协议栈,要发送arp请求的时候,需要重新封装mac帧。

封装好mac帧,再把mac帧放到局域网中:局域网中,所有主机都会收到这个报文。

假如现在主机B拿到了数据帧:先看oper字段发现是arp请求,又看dstIP字段,发现这个报文dstIP并不是给他的,在arp层将arp请求丢弃。其余同理

主机E收到数据帧,得到arp请求协议,先看oper是arp请求,再看dstIP是和E的IP是匹配的,因此就受理了这个请求。因此在自己的arp层构建好arp应答,再重新封装mac帧,因此再对arp应答添加报头,目的mac地址,源mac地址,帧类型(0806),再将该mac帧放到局域网。

这时候,经过广播除了R的其他主机将在mac帧就丢弃掉这个报文,因为此时的目的mac地址不再是FFF....而是确切 的macR。因此在主机R收到mac帧之后,将报头和数据先分开,在arp层仍然是先看oper,发现是arp应答,再看dstIP,确认是自己,此时主机R再直接提取,拿到IPE的ip地址以及mac地址。再封装mac帧,就可以单发给主机E,而不是再广播。
**注意:**为什么mac层还要再封装源mac,目的mac,这是因为arp层和mac层不是同一层,这里有解耦的作用,在逻辑上他们彼此看不到。但他们的作用是不同的,mac帧报头中的源mac,目的mac是用来做局域网通信的,是有功能性的,来做地址标识的。arp层中的就是数据,数据巧合了是mac地址而已。
• 源主机发出 ARP 请求,询问"IP 地址是 192.168.0.1 的主机的硬件地址是多少",并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示 广播);

目的主机 接收到广播的 ARP 请求,发现其中的 IP 地址与本机相符,则发送一个 ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中;

• 每台主机都维护一个 ARP 缓存表 ,可以用arp -a 命令查看。 缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效**,下次还要发 ARP 请求来获得目的主机的硬件地址**

ARP在每个子网都有,但是不会横跨网络

ARP 数据报的格式

• 注意到源 MAC 地址、 目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。

• 硬件类型指链路层网络类型,1 为以太网;

• 协议类型指要转换的地址类型,0x0800 为 IP 地址;

• 硬件地址长度对于以太网地址为 6 字节;

• 协议地址长度对于和 IP 地址为 4 字节;

• op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答

结语:

随着这篇博客接近尾声,我衷心希望我所分享的内容能为你带来一些启发和帮助。学习和理解的过程往往充满挑战,但正是这些挑战让我们不断成长和进步。我在准备这篇文章时,也深刻体会到了学习与分享的乐趣。

在此,我要特别感谢每一位阅读到这里的你。是你的关注和支持,给予了我持续写作和分享的动力。我深知,无论我在某个领域有多少见解,都离不开大家的鼓励与指正。因此,如果你在阅读过程中有任何疑问、建议或是发现了文章中的不足之处,都欢迎你慷慨赐教。

你的每一条反馈都是我前进路上的宝贵财富。同时,我也非常期待能够得到你的点赞、收藏,关注这将是对我莫大的支持和鼓励。当然,我更期待的是能够持续为你带来有价值的内容

相关推荐
wadesir1 小时前
当前位置:首页 > 服务器技术 > 正文Linux网络HSRP协议(实现路由器热备份与高可用性的实用指南)
linux·服务器·网络
泡沫·1 小时前
4.iSCSI 服务器
运维·服务器·数据库
胡八一1 小时前
解决PHP未检测到您服务器环境的sqlite3数据库扩展报错
服务器·数据库·php
不解不惑1 小时前
OpenAI whisper 语音识别服务器搭建
服务器·whisper·语音识别
gaize12132 小时前
适合业务规模较大的场景的服务器测评
服务器
带土12 小时前
4. 两台win11 笔记本局域网内文件传输
网络
悠悠121382 小时前
告别Zabbix?我用Netdata只花10分钟就搞定了50台服务器的秒级监控(保姆级实战)
运维·服务器·zabbix
天庭鸡腿哥2 小时前
大小只有4K的软件,可让系统瞬间丝滑!
运维·服务器·windows·microsoft·everything
虚伪的空想家3 小时前
华为昇腾Atlas 800 A2物理服务器开启VT-d模式
运维·服务器·ubuntu·kvm·vt-d·直通
xixixi777773 小时前
“C2隐藏”——命令与控制服务器的隐藏技术
网络·学习·安全·代理·隐藏·合法服务·c2隐藏