当前位置: 首页 > news >正文

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

  📚 博主的专栏

🐧 Linux   |   🖥️ C++   |   📊 数据结构  | 💡C++ 算法 | 🅒 C 语言  | 🌐 计算机网络

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

目录

数据链路层

认识以太网

以太网帧格式

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

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

认识 MAC 地址

认识 MTU

交换机--划分碰撞域

MTU 对 IP 协议的影响

MTU 对 UDP 协议的影响

MTU 对于 TCP 协议的影响

MSS 和 MTU 的关系

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 应答

 结语:

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

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

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

相关文章:

  • Java面向对象三大特性:封装、继承、多态
  • 理解 `.sln` 和 `.csproj`:从项目结构到构建发布的一次梳理
  • C++23 中的 views::chunk:深入探索与应用
  • 网络安全体系架构:核心框架与关键机制解析
  • 阿里云服务器数据库故障排查指南?
  • Spring Boot中的拦截器!
  • 从电动化到智能化,法雷奥“猛攻”中国汽车市场
  • JVM——即时编译
  • Jenkins集成Maven
  • 5月9日复盘-混合注意力机制
  • 手撕红黑树的 左旋 与 右旋
  • AI产品智能录入功能分析:社区电商的“零摩擦”商品管理革命
  • Docker中mysql镜像保存与导入
  • Linux 学习笔记1
  • qxl显卡与spice模块笔记
  • Jenkins linux安装
  • 【Lattice FPGA 开发】Diamond在线调试Reveal逻辑乱跳的解决
  • Github 热点项目 Cursor开源代替,AI代理+可视化编程!支持本地部署的隐私友好型开发神器。
  • ATH12K 驱动框架
  • SAM详解3.1(关于2和3的习题)
  • 印度32座机场暂停民用航班运营,印称在边境多处发现无人机
  • 习近平会见塞尔维亚总统武契奇
  • 游客称在网红雪山勒多曼因峰需救援被开价2.8万,康定文旅:封闭整改
  • 保证断电、碰撞等事故中车门系统能够开启!汽车车门把手将迎来强制性国家标准
  • 巴基斯坦信德省卡拉奇发生爆炸
  • 欧派家居:一季度营收降4.8%,目前海外业务整体体量仍较小