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

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

在这里插入图片描述

个人主页~


网络--数据链路层

  • 一、以太网
  • 二、以太网帧格式
  • 三、局域网通信原理
  • 四、最大传输单元MTU
  • 五、ARP协议
    • 1、概念
    • 2、ARP数据报格式
    • 3、ARP数据报工作流程
      • RARP数据报的工作流程
  • 六、详解NAT技术
    • 1、NAT
    • 2、NAPT
    • 3、NAPT vs 基本NAT

一、以太网

以太网是一种技术标准,包含数据链路层以及物理层的内容,是当今世界上应用最广泛的局域网技术,其兼容性强,成本低,扩展性高

二、以太网帧格式

在这里插入图片描述

  • 以太网帧

    • 目的地址和源地址:就是我们说的MAC地址,MAC地址是一种出厂固化的地址,是指网卡的硬件地址,共48位6字节
    • 类型:用于标识以太网首部后面所跟数据包的类型,即指示该帧处理完成后应被发送到哪个上层协议进行处理,共有三种协议:IPARPRARP
    • 数据:就是有效载荷,也就是网络层报文
    • CRC:帧校验,通过算法对帧的某些值取出后进行计算得出的结果,接收方也有这样的一套算法,也会取出这些值进行计算,若两者结果相同,则说明帧正确,不相同则丢弃重发
  • 图中下面三个就是不同类型的数据报的,其中类型很明确,0800是IP类型,0806是ARP类型,8035是RARP类型,除了类型以外的就是填充在以太网帧的数据段中的,也就是有效载荷,然后对于ARPRARPPAD是以太网帧的补位工具,因为要确保以太网帧的总长度要大于等于64帧

    • 其中ARP(地址解析协议)和RARP(反向地址解析协议),前者专门用来通过IP地址查找MAC地址,后者专门用来通过MAC地址查找IP地址,有关于它们的详细介绍下面我们再谈

三、局域网通信原理

  • 局域网内通信
    在这里插入图片描述

    • 假设此时局域网中只有MAC1在发消息,MAC1发送到局域网中的消息是会被所有主机接收的,只是我们当前MAC1发送的报文是给MAC5的,所以其他主机在收到消息之后,检查一下目标地址,嘿,不是我,那我扔了,之后MAC5在接收到消息后会将其继续向上传输

    • 实际上局域网是一种临界资源,我们在使用网络时发生卡顿,实际上是使用用户太多,其中的消息发送太多,消息和消息数据发生碰撞导致丢失重传

  • 跨局域网通信
    在这里插入图片描述

    • 发送的报文会在数据链路层拆下MAC报头,然后在网络层拆下IP报头,然后重新封装IP报头,重新封装MAC报头
    • MAC地址作用于局部,只知道下一站而不知道终点站,IP地址就是只知道终点站,而不知道下一站,相互配合下,实现最终到达终点站的目的

四、最大传输单元MTU

  • 以太网帧中的数据长度规定最小为46字节,最大1500字节,最大值也被称为以太网的最大传输单元MTU,不同的网络类型有不同的MTU
  • 如果一个数据包长度大于MTU,那么就会对其进行分片
  • 不同数据链路层标准的MTU不同
  • TCP单个数据报的最大消息长度:MSS
    • 整个在以太网帧中,去掉以太网包装的头尾,再去掉IP报头,再去掉TCP报头,剩下的就是真正的数据的最大长度
    • MTU的情况下,剩下的这部分就是MSS,因为我们尽量的还是最好不要分片,所以这个MSS也是不分片的最大限度
    • MSS的值在TCP首部的40字节的变长选项中
    • 通信双方在三次握手的时候会写入交换MSS的值,选取最小的为最终的MSS
  • 对于UDP来说MSS就比较简单了,加上报头等于MTU就行了

五、ARP协议

1、概念

  • ARP协议不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议
  • ARP协议用来建立主机IP地址和MAC地址的映射关系,其特点就是知道通信对方的IP地址而不知道其MAC地址,通过ARP报文的作用,得到对方MAC地址,从而进行数据传输

2、ARP数据报格式

在这里插入图片描述

  • 前两个就是目的MAC地址和源MAC地址:需要注意的是,这里的目的MAC地址填的是全F:FF:FF:FF:FF:FF:FF,表示广播,因为我们不知道我们的目的MAC地址,所以我们要让所有主机收到这个信息
  • 帧类型:0x0806,ARP数据报
  • 硬件类型:指链路层网络类型,填1为以太网
  • 协议类型:指要转换的地址类型,0x0800为IP地址(这里的类型格式同帧类型,指的是知道对方的IP地址,要转换成MAC地址)
  • 硬件地址长度:就是MAC地址这样的硬件地址的长度,MAC地址的长度为6,所以填0x06
  • 协议地址长度:就是IP地址这样的协议地址的长度,IPv4地址的长度为4,所以填0x04
  • op:指操作码,1表示ARP请求,2表示ARP响应,3表示RARP请求,4表示RARP响应
  • 发送端以太网地址:本机MAC地址
  • 发送端IP地址:本机IP地址
  • 目的以太网地址:全0(因为不知道)
  • 目的IP地址:对方IP地址

3、ARP数据报工作流程

  • 当网络层想要给对方发送消息时,发现没有对方的MAC地址只知道对方的IP地址(大部分情况下大家都是不知道对方的MAC地址的),然后就会构建一个ARP请求,在数据链路层的上层,封装一个报文填写方式按照前面的样式填写,然后交付到数据链路层,数据链路层给它做图中以太网首部以及最后一个CRC校验位的封装,封装完成后发到局域网中,所有在这个局域网中的主机都会收到这个信息,收到信息后拆下以太网报头以及CRC校验位,然后对op进行查看,发现报文是ARP请求,然后对目的IP值进行比对,发现不是发给自己的那就扔掉,是发给自己的那就收到后就得到了本机的MAC地址和IP地址,然后给本机一个响应,此时对方按照上面的字段对数据报进行填写,op此时是2,精准返回到请求方的主机,我们就知道对方的MAC地址和IP地址了

  • 在收到ARP响应之后的本机会在自身的ARP表中维护一段时间的对方主机的信息,以便于继续发送消息,在经过这段时间之后,如果我们还要给对方主机发送消息,那么需要重新进行ARP请求

  • 只能在局域网中进行ARP的请求

RARP数据报的工作流程

RARP的结构与ARP相同,只是更加简单,因为我们可以定向的将数据发送到指定的MAC主机,然后由这个主机再精准返回

六、详解NAT技术

1、NAT

前面详细的介绍过NAT技术,这是为了应对IP地址不足而做出的策略,将IP分为公网IP和私网IP,然后公网中不能出现私网IP,通过路由器层层转换,将私网IP转换为公网IP,但是在这里我们会有一个疑问,我们确实是发出去了,我也是唯一的,但是它回来的时候咋回来,一个局域网内有多个主机访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的,我们怎么能精准返回呢,这里就要请出NAPT来解决这个问题了

2、NAPT

NAPT使用IP地址+端口号来建立这个关系,就是我们前面在编程的时候所用到的端口号,也是我们一直没有提的,现在可以敞开说了

场景:路由器(NAPT设备)分配内网IP 192.168.1.0/24,公网IP为202.100.1.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
    • 发送至公网:源IP+端口为202.100.1.1:50001
  2. 主机B(192.168.1.3:2000)同时访问百度

    • NAPT转换:源IP变为202.100.1.1:50002,映射表新增:192.168.1.3:2000 ↔ 200.100.1.1:50002
    • 公网看到两个不同端口的请求,均来自202.100.1.1
  3. 百度响应时

    • 响应包目标IP+端口为202.100.1.1:50001(或50002)
    • NAPT设备根据映射表,将目标转换为192.168.1.2:1000(或192.168.1.3:2000),转发回对应主机

端口号是区分不同内网主机的唯一标识,NAPT设备通过维护动态映射表(IP+端口)实现双向通信

3、NAPT vs 基本NAT

特性基本NAT(一对一)NAPT(多对一)
地址消耗每个设备需独立公网IP多个设备共享1个公网IP
端口处理端口不变端口随机或指定范围映射
适用场景服务器对外映射家庭/企业内网共享上网

今日分享就到这里了~

在这里插入图片描述

http://www.lqws.cn/news/144685.html

相关文章:

  • 4.2 HarmonyOS NEXT分布式AI应用实践:联邦学习、跨设备协作与个性化推荐实战
  • Elasticsearch:spring2.x集成elasticsearch8.x
  • CB/T 3361-2019 甲板敷料检测
  • HarmonyOS:Counter计数器组件
  • 免费工具-微软Bing Video Creator
  • 塑料回收新突破!Nature 重磅:2 小时解聚碳纤维废料
  • 【推荐算法】WideDeep推荐模型:融合记忆与泛化的智能推荐引擎
  • 【Linux】POSIX信号量
  • 第20讲、Odoo 18 翻译机制与 PO 文件详解
  • YOLOv8 × VisDrone 全流程实战:训练你的无人机识别模型 AI(第一部分:数据集准备)
  • 鸿蒙缺少WMIC missing WMIC
  • 《C++ 模板》
  • 仓库自动化搬运:自动叉车与AGV选型要点及核心技术解析
  • MyBatis之测试添加功能
  • 18650锂电池组点焊机:高效组装锂电池的关键工具|比斯特自动化
  • XDMA pcie环路测试
  • Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数
  • 代码中文抽取工具并替换工具(以ts为例)
  • 在 CentOS 上将 Ansible 项目推送到 GitHub 的完整指南
  • 高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
  • [论文阅读] 人工智能+软件工程 | MemFL:给大模型装上“项目记忆”,让软件故障定位又快又准
  • [pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)
  • 机器学习监督学习实战四:九种回归算法对波士顿房价数据进行回归预测和评估方法可视化
  • 【从0-1的CSS】第1篇:CSS简介,选择器已经常用样式
  • centos部署k8s v1.33版本
  • asp.net mvc如何简化控制器逻辑
  • vue2 , el-select 多选树结构,可重名
  • 使用vite-plugin-html在 HTML 文件中动态注入数据,如元数据、环境变量、标题
  • Go中的协程并发和并发panic处理
  • MVCC机制:Undo Log版本链与ReadView机制