Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
【Linux】网络–数据链路层–以太网_创想鸟

【Linux】网络–数据链路层–以太网

一、以太网

以太网是一种广泛采用的技术规范,涵盖了数据链路层与物理层的相关内容,是目前全球使用最广泛的局域网技术。它具备良好的兼容性、低廉的成本以及出色的扩展能力。

二、以太网帧格式【Linux】网络--数据链路层--以太网 以太网帧的结构中,目的地址和源地址分别对应我们常说的MAC地址。MAC地址是网卡出厂时就固化好的硬件标识,共48位(6字节)。类型字段用于指明以太网头部后跟随的数据包属于哪种协议类型,即指示该帧应被送往哪个上层协议进行处理。常见的三种类型包括IP、ARP和RARP。数据部分为有效载荷,也就是来自网络层的数据报文。CRC字段则用于帧校验,通过特定算法对帧中的某些值进行计算,接收端也会执行相同的算法并对比结果,若一致则认为帧正确,否则丢弃或要求重传。图中下方三个示例展示了不同类型的数据报文,其中类型字段分别为0800(IP)、0806(ARP)、8035(RARP),除类型字段外的部分即为有效载荷。对于ARP和RARP而言,PAD字段用于填充,确保整个以太网帧长度不小于64字节。ARP(地址解析协议)用于根据IP地址查找对应的MAC地址,而RARP(反向地址解析协议)则用于通过MAC地址获取对应的IP地址,有关它们的详细说明将在后续介绍。

三、局域网通信原理 局域网内部通信【Linux】网络--数据链路层--以太网 假设当前局域网中只有MAC1在发送信息,其发出的消息会被所有主机接收到。但由于该消息的目标地址是MAC5,因此其他主机在收到后会检查目标地址,发现不是自己便将其丢弃,而MAC5则会继续将数据向上层传递。实际上,局域网是一种共享资源,当多个用户同时发送大量数据时,可能会出现数据碰撞导致丢包重传,从而引起网络延迟。 跨局域网通信【Linux】网络--数据链路层--以太网 数据在传输过程中,会在数据链路层剥离MAC首部,在网络层剥离IP首部,随后重新封装IP和MAC首部。MAC地址仅作用于局部网络,只知道下一跳地址;而IP地址则知道最终目的地,两者相互配合实现数据准确送达。

四、最大传输单元MTU 以太网帧中的数据部分最小为46字节,最大为1500字节,这个最大值被称为MTU(Maximum Transmission Unit)。不同类型的网络具有不同的MTU值。如果一个数据包超过MTU大小,则需要进行分片处理。TCP单个数据报的最大有效数据长度称为MSS(Maximum Segment Size)。在整个以太网帧中,去掉以太网首尾部、IP首部和TCP首部后的剩余部分就是真正的数据内容。为了尽量避免分片,MSS也代表了不分片情况下的最大数据长度。MSS的值在TCP三次握手期间通过选项字段交换确定,并取双方较小值作为最终MSS。对于UDP来说,MSS等于MTU减去UDP报头长度即可。

网易人工智能 网易人工智能

网易数帆多媒体智能生产力平台

网易人工智能 39 查看详情 网易人工智能

五、ARP协议 1、概念 ARP协议并非单纯属于数据链路层,而是介于数据链路层与网络层之间的一种协议。它的主要作用是建立IP地址与MAC地址之间的映射关系。当已知对方IP地址但不知其MAC地址时,可通过ARP报文获取目标MAC地址,从而完成数据传输。 2、ARP数据报格式【Linux】网络--数据链路层--以太网 MAC首部中的目的地址为广播地址

FF:FF:FF:FF:FF:FF

,表示所有主机都能接收到此帧。类型字段为0x0806,表示这是ARP数据报。硬件类型为1,表示以太网;协议类型为0x0800,表示IP地址。硬件地址长度为6字节,协议地址长度为4字节。op字段表示操作码,1为ARP请求,2为ARP响应,3为RARP请求,4为RARP响应。发送端包含本机MAC地址与IP地址,目的端MAC地址未知故填0,目的IP地址为目标主机的IP地址。 3、ARP工作流程 当网络层准备发送数据但缺少目标MAC地址时,便会构建一个ARP请求。该请求由数据链路层进行封装,添加以太网首部及CRC校验后发送至局域网中。所有主机都会接收到该帧并进行判断:若非自身IP地址则丢弃,若匹配则返回ARP响应,告知请求方自己的MAC地址。本机在收到响应后,会将对方的信息缓存在ARP表中一段时间,以便后续通信直接使用。过期后如需再次通信,则需重新发起ARP请求。需要注意的是,ARP请求只能在同一局域网内进行。 RARP的工作机制与ARP类似,区别在于它可以定向发送数据到指定MAC地址的主机,并由该主机精确返回所需信息。

六、深入解析NAT技术 1、NAT简介 此前我们已经详细介绍过NAT技术,它是为了解决IPv4地址短缺问题而提出的解决方案。NAT将IP地址划分为公网地址和私网地址,私网地址不能直接出现在公网中。路由器通过逐级转换,将私网地址映射为公网地址。然而,这里存在一个问题:当多个内网主机访问同一外部服务器时,服务器返回的数据包目标地址相同,如何准确地将数据包转发回正确的主机?这就需要引入NAPT来解决这个问题。 2、NAPT机制 NAPT利用“IP地址+端口号”组合来建立连接关系。以下是一个典型场景: 路由器分配的内网IP段为192.168.1.0/24,公网IP为202.100.1.1。 主机A(192.168.1.2:1000)访问百度 原始数据包:源IP 192.168.1.2:1000 → 目标IP 180.101.49.12:80 经NAPT转换后,源IP变为202.100.1.1:50001,并记录映射关系:

192.168.1.2:1000 ↔ 202.100.1.1:50001

发送至公网后,源地址为202.100.1.1:50001。 同样地,主机B(192.168.1.3:2000)访问百度时,NAPT将其转换为202.100.1.1:50002,并新增映射记录:

192.168.1.3:2000 ↔ 202.100.1.1:50002

公网看到的是来自同一公网IP的不同端口请求。当百度响应时,响应包的目标地址为202.100.1.1:50001或50002,NAPT设备根据映射表将目标地址还原为192.168.1.2:1000或192.168.1.3:2000,并转发给相应主机。端口号成为区分不同内网主机的关键标识,NAPT通过维护动态映射表实现双向通信。

3、NAPT与基本NAT对比

特性 基本NAT(一对一) NAPT(多对一)

地址占用 每台设备需独立公网IP 多台设备可共享一个公网IP 端口处理方式 不改变端口号 端口号随机或固定范围映射 适用环境 服务器对外映射 家庭或企业内网共享上网

今日分享到此结束~

以上就是【Linux】网络–数据链路层–以太网的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/424954.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何为VSCode设置一个自定义的语义标记提供程序?
上一篇 2025年11月7日 11:04:41
ThinkPHP的模板包含怎么用?ThinkPHP如何引入子模板?
下一篇 2025年11月7日 11:04:47

相关推荐

  • Linux sudoers文件配置方法

    使用visudo编辑sudoers文件可安全配置用户权限,避免语法错误。通过用户、主机、命令别名简化管理,合理分配无需密码或特定命令权限,禁止赋予shell类命令无限制权限,并将规则写入/etc/sudoers.d/目录便于维护,配置后需测试并备份以防出错。 sudoers 文件用于配置 Linux…

    2026年9月23日
    100
  • linux .zip文件 解压缩命令的简单使用

    linux .zip文件 解压缩命令的简单使用linux .zip文件 解压缩命令的简单使用linux .zip文件 解压缩命令的简单使用linux .zip文件 解压缩命令的简单使用

    大家好,很高兴再次与大家见面,我是你们的老朋友全栈君。 在Windows系统下,常见的压缩格式包括.zip和.rar。而在Linux系统下,常见的压缩格式则有.zip、.gz、.bz2、.tar.gz和.tar.bz2。今天,我将简要介绍一下Linux系统下.zip压缩命令的使用方法。 .zip的使…

    2026年9月23日 用户投稿
    300
  • 为什么iPhoneSE2022收款语音不响?教你配置微信语音播报的方法

    最常见的原因是iPhone系统或微信设置问题,如静音、勿扰模式开启或通知权限关闭。需检查手机音量、专注模式,并确保微信通知和收款语音提醒已开启。 最常见的原因是iPhone的系统通知设置、微信应用内部设置,或简单地开启了“勿扰模式”或“专注模式”导致。这通常不是手机硬件故障,而是软件配置上的疏忽。 …

    2026年9月23日
    200
  • VS Code算法实战:竞赛编程与调试环境搭建

    首先安装编程语言环境及VS Code扩展,如C/C++、Code Runner和LeetCode;接着配置Code Runner支持编译运行与输入重定向;最后通过代码片段提升编码速度,形成高效竞赛开发环境。 在竞赛编程中,高效的开发环境能大幅提升编码速度与调试效率。VS Code凭借轻量、可扩展和强…

    2026年9月23日
    000
  • 字节入局,AR眼镜掀起新“风口”?

    近日,关于老凤祥与字节跳动合作推出AI眼镜的消息在网络上引发热议。据相关媒体报道,老凤祥计划联合字节跳动旗下的火山引擎共同开发多款AI眼镜,并由豆包大模型提供技术支持,预计将在今年7月正式发布。 对此,6月12日,火山引擎方面进行了澄清。其负责人表示,并未有与老凤祥合作研发AI智能眼镜的计划。而豆包…

    2026年9月23日
    000
  • 解决 Conda 环境中 Java 版本冲突的策略

    本文旨在解决 Conda 环境中 Java 版本激活不正确的问题。当用户尝试在 Conda 环境中指定特定 Java 版本(如 OpenJDK 8)时,系统可能仍激活旧的或错误的 Java 版本。教程将详细分析问题根源,并提供一种通过精确指定 Java 包名来确保 Conda 环境正确管理 Java…

    2026年9月23日
    000
  • Linux安装Redis数据库,无需公网IP实现远程连接

    Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接Linux安装Redis数据库,无需公网IP实现远程连接

    redis作为一种高效的key-value数据库,因其将数据存储在内存中而具备极高的读写速度,广泛应用于多种场景中。以下将详细介绍如何在centos 8的linux虚拟机上搭建redis数据库,并利用cpolar实现内网穿透以便通过公网访问。 在Linux(CentOS 8)上安装Redis数据库 …

    2026年9月23日 用户投稿
    100
  • VSCode文件编码识别错误怎么办?VSCode编码设置调整方法

    VSCode文件编码识别错误怎么办?VSCode编码设置调整方法VSCode文件编码识别错误怎么办?VSCode编码设置调整方法VSCode文件编码识别错误怎么办?VSCode编码设置调整方法VSCode文件编码识别错误怎么办?VSCode编码设置调整方法

    vscode文件编码识别错误导致乱码问题可通过调整编码设置解决。1.查看右下角编码显示,若不对则点击选择“通过编码重新打开”,尝试utf-8、gbk等常见编码直至显示正常;2.如手动无效可启用“自动检测”功能;3.修改vscode默认编码(设置中搜索“files.encoding”并设为常用格式如u…

    2026年9月23日 用户投稿
    100
  • 谷歌浏览器如何将网页添加到阅读清单_谷歌浏览器添加网页到阅读清单方法

    谷歌浏览器支持通过地址栏按钮、右键菜单、主菜单和快捷键四种方式将网页添加到阅读清单。1、点击地址栏右侧“添加到阅读清单”图标即可保存;2、在页面空白处右键选择“添加页面到阅读清单”;3、通过三点菜单进入书签子菜单选择“添加到阅读清单”;4、使用Command+Shift+D(Mac)或Ctrl+Sh…

    2026年9月23日
    100
  • 【Linux】初识线程

    【Linux】初识线程【Linux】初识线程【Linux】初识线程【Linux】初识线程

    一、线程的概念 线程是操作系统能够进行运算调度的基本单位,它被包含在进程之中,是进程中的实际运作单位。 定义与基本特征 轻量级实体:线程是比进程更小的可独立运行的基本单位,也被称为轻量级进程。一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间、文件描述符等,但每个线程都有自己独立的程序计数…

    2026年9月23日 用户投稿
    000
  • Linux系统-单用户模式

    Linux系统-单用户模式Linux系统-单用户模式Linux系统-单用户模式Linux系统-单用户模式

    作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 这是Linux进阶部分的最后一大章。讲完这一章以后,我们Linux进阶部分讲完以后,我们的Linux操作部分就算讲完了,后面的讲解就主要是Linux上的应用软件的…

    2026年9月23日 用户投稿
    000
  • LINUX下如何安装输入法_LINUX安装中文输入法(搜狗/Fcitx)教程

    首先安装Fcitx输入法框架并切换默认输入法为Fcitx,接着添加中文语言支持并配置区域选项,然后下载并安装搜狗输入法Linux版,再通过启动应用程序设置Fcitx随系统自启,最后重启会话并在Fcitx配置中添加搜狗拼音输入法。 如果您在使用Linux系统时需要输入中文,但默认环境下缺少可用的中文输…

    2026年9月23日
    200
  • Vscode怎么批量修改变量?Vscode变量重命名操作指南

    Vscode怎么批量修改变量?Vscode变量重命名操作指南Vscode怎么批量修改变量?Vscode变量重命名操作指南Vscode怎么批量修改变量?Vscode变量重命名操作指南Vscode怎么批量修改变量?Vscode变量重命名操作指南

    vscode批量修改变量的方法是选中变量按f2输入新名回车,但要更精确控制重命名范围可采取以下措施:1.使用“查找和替换”功能(ctrl+h),结合正则表达式限定匹配范围;2.使用语言支持的“重构”功能(右键→重构→重命名),基于语义分析避免误改;3.安装增强重命名插件提升功能;4.利用静态代码分析…

    2026年9月23日 用户投稿
    000
  • 如何在Java中安装Eclipse开发环境

    先安装JDK并配置环境变量,再下载安装Eclipse IDE。1. 安装JDK:从Oracle或Eclipse Adoptium下载JDK 17/21,按提示安装,设置JAVA_HOME和PATH,用java -version验证。2. 安装Eclipse:官网下载“Eclipse IDE for …

    2026年9月23日
    000
  • 配置Linux下vim自动缩进

    从终端打开配置文件: vim ~/.vimrc 添加如下代码: set tabstop=4set softtabstop=4set shiftwidth=4set autoindentset cindentset cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1…

    2026年9月23日
    800
  • Java岗大厂面试百日冲刺 – 日积月累,每日三题【Day25】—— JVM1

    Java岗大厂面试百日冲刺 – 日积月累,每日三题【Day25】—— JVM1Java岗大厂面试百日冲刺 – 日积月累,每日三题【Day25】—— JVM1Java岗大厂面试百日冲刺 – 日积月累,每日三题【Day25】—— JVM1Java岗大厂面试百日冲刺 – 日积月累,每日三题【Day25】—— JVM1

    车票 面试题1:你遇到过哪些OOM情况,什么原因造成的?怎么解决的? 该问题主要针对你遇到的实际问题出发,可以根据你实际遇到过的情况和场景,结合下面每种情况的具体原因和解决方式,整理后回答。 当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出 java.lang.OutOfMe…

    2026年9月23日 用户投稿
    000
  • 手把手教你在 Ubuntu16.04 安装 GPU 驱动 + CUDA9.0 + cuDNN7

    手把手教你在 Ubuntu16.04 安装 GPU 驱动 + CUDA9.0 + cuDNN7手把手教你在 Ubuntu16.04 安装 GPU 驱动 + CUDA9.0 + cuDNN7手把手教你在 Ubuntu16.04 安装 GPU 驱动 + CUDA9.0 + cuDNN7手把手教你在 Ubuntu16.04 安装 GPU 驱动 + CUDA9.0 + cuDNN7

    如果你的电脑上安装了 ubuntu 16.04 系统,并且配备了一块 nvidia geforce gpu 显卡,那么不利用它来运行深度学习模型就太可惜了!尽管网上有许多相关教程,但质量参差不齐。本文将详细指导你如何在 ubuntu 16.04 上安装 gpu 显卡驱动、cuda 9.0 和 cud…

    2026年9月23日 用户投稿
    000
  • Infinispan中实现并发安全计数器:解决分布式应用中的用户登录统计挑战

    本文探讨了在Infinispan缓存中实现并发安全的用户登录计数问题,当多个用户同时登录时,传统计数方式可能导致数据不一致。文章详细介绍了利用Infinispan提供的分布式计数器、事务机制和版本化操作这三种核心策略,以确保在高并发环境下数据更新的原子性和一致性,为构建健壮的分布式应用提供解决方案。…

    2026年9月23日
    200
  • 三星S95D对决LG G4:MLA+OLED面板的亮度巅峰之战,谁才是HDR影体验的王者?

    三星S95D和LG G4在HDR观影中各有优势:S95D凭借均匀亮度、抗反光涂层和鲜艳色彩更适明亮环境,而G4以高对比度和自然色调胜出,适合暗室追求纯净画质的用户。 谈论三星S95D和LG G4谁更适合HDR观影,核心在于它们实现高亮度的方式不同,带来的观感也有明显差异。不能简单说谁压倒性胜出,而是…

    2026年9月23日
    000
  • Linux中的SUID、SGID和Sticky Bit详解

    SUID、SGID和Sticky Bit是Linux特殊权限,分别用于以文件所有者身份执行、继承组权限及限制删除文件。SUID用4000表示,如chmod 4755;SGID用2000,可作用于文件和目录;Sticky Bit用1000,常用于/tmp等共享目录。三者可通过数字或符号方式设置,组合使…

    2026年9月23日
    300

发表回复

登录后才能评论
关注微信