Linux网络 数据链路层

在Linux网络中,数据链路层位于物理层之上,网络层之下,其主要职责是将网络层的IP数据包封装成帧,并通过物理链路发送到目标设备。同时,它还负责接收来自物理层的帧,并将其解封装为数据包,传递给网络层。在Linux网络中,最常见的数据链路层协议是以太网协议(Ethernet)。

以太网

以太网是一种局域网技术,用于在有限范围内(如办公室、校园或企业内部)连接计算机、服务器、打印机等设备。它通过物理介质(如双绞线、光纤)传输数据,并使用特定的协议和帧格式来组织数据传输。以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等。

以太网帧格式

以太网的帧格式如下所示:

  • 源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址), 长度是 48 ,是在网卡出厂时固化的
  • 帧协议类型字段有三种值,分别对应 IPARPRARP
  • 帧末尾是 CRC 校验码

MAC 地址

MAC 地址是网络设备的唯一标识符,用来识别数据链路层中相连的节点。其在网卡出厂时就确定了, 不能修改。其长度为 48 位, 即 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。

以表格展示了MAC地址和IP地址的主要区别:

特性MAC地址IP地址
定义数据链路层的物理地址,用于标识网络设备。网络层的逻辑地址,用于标识设备在网络中的位置。
地址长度48位,通常以12位十六进制数表示如00:1A:2B:3C:4D:5EIPv4:32位(4字节),以点分十进制表示(如192.168.1.1)IPv6:128位,以冒号分隔的八组四位十六进制数表示(如2001:0db8:85a3::8a2e:0370:7334)。
作用范围局域网内(LAN),不会跨越路由器。可跨越局域网、广域网和互联网,通过路由器转发。
分配方式由IEEE分配给制造商,烧录到硬件中,通常不可更改。由网络管理员或自动分配服务(如DHCP)分配,可更改。
传输单位数据帧(Frame),用于同一局域网内的通信。数据包(Packet),用于跨网络的通信。
设备识别用于同一局域网内的设备识别。用于跨网络的设备识别。
IP 地址描述的是路途总体的起点和终点, MAC 地址描述的是路途上的每一个区间的起点和终点。

MTU

MTU(Maximum Transmission Unit,最大传输单元)是指网络中能够传输的单个数据包的最大字节数,它是数据链路层的概念,用于限制链路层一次性转发的数据帧的最大尺寸。

以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,即 MTU 为 1500,ARP 数据包的长度不 够 46 字节,要在后面补填充位。不同的网络类型有不同的 MTU,如无线网络 MTU 为1492,蓝牙 MTU 为672.

由于数据链路层 MTU 的限制, 对于较大的 IP 数据包要进行分包。IP 协议格式如下:

将较大的 IP 包分成多个小包, 并给每个小包打上标签每个小包 IP 协议头的 16 位分片标识都是相同的每个小包的 IP 协议头的 3 位标志字段中, 2 位置为 0, 表示允许分片, 3 位来表示结束标记(当前是否是最后一个小包, 是的话置为 1, 否则置为 0)。

到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是 IP 层不会负责重新传输数据。

  • MTU UDP 协议的影响:一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)), 那么就会在网络层分成多个 IP 数据报。这多个 IP 数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果 UDP 数据报在网络层被分片, 整个数据被丢失的概率就大大增加了.
  • MTU 对于 TCP 协议的影响:TCP 的一个数据报也不能无限大, 还是受制于 MTU. TCP 的单个数据报的最大消息长度, 称为 MSS(Max Segment Size),TCP 在建立连接的过程中, 通信双方会进行 MSS 协商. 最理想的情况下, MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU). 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS . 然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS.
使用 ifconfig 命令 , 即可查看 ip 地址 , mac 地址 , MTU:

ARP 协议

ARP(Address Resolution Protocol,地址解析协议)是一种网络协议,工作在 数据链路层和网络层之间,用于将IP地址解析为对应的MAC地址。
在网络通讯时, 源主机的应用程序知道目的主机的 IP 地址和端口号 , 却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的, 如果接收到的数据包的硬件地址与本机不符, 则直接丢弃。
所以在以太网中,设备需要知道目标设备的MAC地址才能传输数据,而ARP协议通过广播机制实现IP地址到MAC地址的映射。

ARP 数据报的格式

  • 注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次, 对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的
  • 硬件类型指链路层网络类型,1 为以太网
  • 协议类型指要转换的地址类型,0800 为 IP 地址,0806为 ARP 协议,0835 为 RARP 协议

  • 硬件地址长度对于以太网地址为 6 字节
  • 协议地址长度对于和 IP 地址为 4 字节
  • op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答

ARP协议的工作原理

ARP协议的工作流程主要包括以下步骤:

步骤操作
1. 查询缓存发送设备(如主机A)首先在本地ARP缓存中查找目标设备(如主机B)的MAC地址。如果找到,则直接使用该MAC地址发送数据。
2. 发送ARP请求如果缓存中没有目标设备的MAC地址,主机A会广播一个ARP请求报文。该报文包含主机A的IP和MAC地址,以及目标设备的IP地址,MAC地址填 FF:FF:FF:FF:FF:FF,op填1。
3. 接收并响应网络中的所有设备都会收到ARP请求,但只有目标设备(主机B)会响应。主机B会发送一个ARP响应报文,包含其MAC地址,op填2。
4. 更新缓存主机A收到ARP响应后,将目标设备的IP和MAC地址映射关系存储到ARP缓存中,以便后续通信。
5. 数据传输主机A使用目标设备的MAC地址将数据封装到以太网帧中,并发送给目标设备。
每台主机都维护一个 ARP 缓存表 , 可以用 arp -a 命令查看。缓存表中的表项有过期时间( 一般为 20 分钟 ), 如果 20 分钟内没有再次使用某个表项 , 则该表项失效 , 下次还要发 ARP 请求来获得目的主机的硬件地址。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 调试模式下 Redisson 看门狗失效

一、场景分析 前几天在做分布式锁测试: 在调试模式下,lock.lock() 之后打上断点,想测试一下在当前线程放弃锁之前,别的线程能否获取得到锁。 发现调试模式下,看门狗机制失效了,Redis 上 30 秒后&#xff0…

ktransformers 上的 DeepSeek-R1 671B open-webui

ktransformers 上的 DeepSeek-R1 671B open-webui 一、下载GGUF模型1. 创建目录2. 魔塔下载 DeepSeek-R1-Q4_K_M3. 安装显卡驱动和cuda4. 显卡 NVIDIA GeForce RTX 4090 二、安装ktransformers1. 安装依赖2. 安装uv工具链3. 下载源码4. 创建python虚拟环境 三、编译ktransforme…

线性模型 - 支持向量机

支持向量机(SVM)是一种用于分类(和回归)的监督学习算法,其主要目标是找到一个最佳决策超平面,将数据点分为不同的类别,并且使得分类边界与最近的数据点之间的间隔(margin&#xff09…

html中的元素(2)

在用块级元素完成网页的组织和布局以后&#xff0c;要为其中的每一个小区块添加内容&#xff0c;就需要用到行内元素&#xff1a; 1.字体样式元素 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>HTML5 保留的文本格式元…

Pytorch中的主要函数

目录 一、torch.manual_seed(seed)二、torch.cuda.manual_seed(seed)三、torch.rand(*size, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧五、torch.version.cuda&#xff1b;torch.bac…

php特性

文章目录 函数特性匹配数组报错进制转换绕过正则表达式匹配换行绝对路径绕过 弱类型语言隐式转换核心概念转换规则 运算符优先级 函数特性 匹配数组报错 以此为例&#xff0c;如果传入参数是一个数组&#xff0c;则preg_match()函数报错返回0&#xff0c;完成绕过&#xff0c;…

HVAC 设计:使用 Ansys Discovery 探索更好的设计

通过 Ansys Discovery 及其 2025 年新功能利用 CFD&#xff0c;通过 Computational Insights 应对 HVAC 行业的挑战。 挑战 HVAC 行业在设计高效可靠的管道系统方面面临多项挑战&#xff1a; 压力损失&#xff1a;设计不当的管道会增加能耗并降低热性能。复杂的几何形状&…

Android实现漂亮的波纹动画

Android实现漂亮的波纹动画 本文章讲述如何使用二维画布canvas和camera、矩阵实现二、三维波纹动画效果&#xff08;波纹大小变化、画笔透明度变化、画笔粗细变化&#xff09; 一、UI界面 界面主要分为三部分 第一部分&#xff1a;输入框&#xff0c;根据输入x轴、Y轴、Z轴倾…

基于 Buck-Boost 变换器的磷酸铁锂电池串联电压均衡模糊控制优化策略

针对磷酸铁锂电池串联应用中&#xff0c;由于单体电池之间存在不一致&#xff0c;从而导致蓄电池组利 用率和使用寿命降低的问题&#xff0c;本文提出一种基于非能耗型电压均衡方式的复合式电路拓扑。该均 衡电路在传统单体电池均衡电路的基础上&#xff0c;加入电池组间均衡电…

Spring报错解决一览

Spring错误持续更新贴… 问题一 springcloud-OAuth2.0配置的时候报错 Method springSecurityFilterChain in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration required a bean of type ‘org.springframework.boot.autoconfigu…

免费使用 DeepSeek API 教程及资源汇总

免费使用 DeepSeek API 教程及资源汇总 一、DeepSeek API 资源汇总1.1 火山引擎1.2 百度千帆1.3 阿里百炼1.4 腾讯云 二、其他平台2.1 华为云2.2 硅基流动 三、总结 DeepSeek-R1 作为 2025 年初发布的推理大模型&#xff0c;凭借其卓越的逻辑推理能力和成本优势&#xff0c;迅速…

蓝桥杯备考:DFS剪枝之数的划分

这道题和组合型枚举差不多&#xff0c;比如我们从第一个数开始填&#xff0c;到第二个数的时候&#xff0c;21明显是重复了&#xff0c;我们就没必要继续往下递归了&#xff0c;这个叫剪掉等效冗余分支&#xff0c;然后还有就是&#xff0c;比如我们2开始的枝头&#xff0c;222…

蓝桥杯 路径之谜

路径之谜 题目描述 小明冒充 XX 星球的骑士&#xff0c;进入了一个奇怪的城堡。 城堡里边什么都没有&#xff0c;只有方形石头铺成的地面。 假设城堡地面是 nnnn 个方格。如下图所示。 按习俗&#xff0c;骑士要从西北角走到东南角。可以横向或纵向移动&#xff0c;但不能斜着走…

Blender调整最佳渲染清晰度

1.渲染采样调高 512 2.根据需要 开启AO ,开启辉光 , 开启 屏幕空间反射 3.调高分辨率 4096x4096 100% 分辨率是清晰度的关键 , 分辨率不高 , 你其他参数调再高都没用 4.世界环境开启体积散射 , 可以增强氛围感 5.三点打光法 放在模型和相机45夹角上 白模 白模带线条 成品

Django基础环境准备

Django基础环境准备 文章目录 Django基础环境准备1.准备的环境 win11系统&#xff08;运用虚拟环境搭建&#xff09;1.1详见我的资源win11环境搭建 2.准备python环境2.1 winr 打开命令提示符 输入cmd 进入控制台2.2 输入python --version 查看是否有python环境2.3在pyhton官网下…

介绍一款飞算JavaAI编程工具,集成到idea,图文并茂

飞算的插件下载地址&#xff0c;里边也有安装步骤&#xff1a; JavaAI 下载 从file-》setting-》plugin&#xff0c;然后走图中所示 选择从磁盘安装插件&#xff1a;找到下载好的压缩包然后进行idea重启 根据提示模块可以生成代码&#xff0c;就是需要等待&#xff0c;后期不…

python-leetcode-斐波那契数

509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; class Solution:def fib(self, n: int) -> int:if n 0:return 0dp [0] * (n 1)dp[1] 1for i in range(2, n 1):dp[i] dp[i - 1] dp[i - 2]return dp[n]

类和对象——const修饰的类的对象和函数

const修饰的类的对象和函数 const成员函数和const对象1 const成员函数2 调用关系3 const在成员函数中的位置4 取地址&及const取地址操作符重载 const成员函数和const对象 1 const成员函数 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&…

unity学习61:UI布局layout

目录 1 布局 layout 1.1 先准备测试UI,新增这样一组 panel 和 image 1.2 新增 vertical layout 1.3 现在移动任意一个image 都会影响其他 1.3.1 对比 如果没有这个&#xff0c;就会是覆盖效果了 1.3.2 对比 如果没有这个&#xff0c;就会是覆盖效果了 1.4 总结&#xf…

第48天:Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式

#知识点 1、安全开发-JavaEE-第三方依赖开发安全 2、安全开发-JavaEE-数据转换&FastJson&XStream 3、安全开发-JavaEE-Shiro身份验证&Log4j日志处理 一、Log4j 一个基于Java的日志记录工具&#xff0c;当前被广泛应用于业务系统开发&#xff0c;开发者可以利用该工…