当前位置: 首页 > 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
端口处理端口不变端口随机或指定范围映射
适用场景服务器对外映射家庭/企业内网共享上网

今日分享就到这里了~

在这里插入图片描述

相关文章:

  • 空间利用率提升90%!小程序侧边导航设计与高级交互实现
  • MPNet:旋转机械轻量化故障诊断模型详解python代码复现
  • 第二十四章 流程控制_ if分支
  • React 样式方案与状态方案初探
  • LeetCode 1356.根据数字二进制下1的数目排序
  • 重磅更新! 基于Gemini 2.5 Pro打造的AI智能体PlantUML-X上线!
  • VSCode主题定制:CSS个性化你的编程世界
  • 服务器CPU被WMI Provider Host系统进程占用过高,导致系统偶尔卡顿的排查处理方案
  • PostgreSQL 的扩展pg_prewarm
  • 高防服务器能够抵御哪些网络攻击呢?
  • 【Python 算法零基础 4.排序 ⑨ 堆排序】
  • 代码随想录算法训练营第九天| 151.翻转字符串里的单词、55.右旋转字符串 、字符串总结
  • 深度学习学习率优化方法——pytorch中各类warm up策略
  • 【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
  • 服务器中CC攻击的特点有哪些?
  • 【Go语言基础【5】】运算符基础
  • 1、Go语言基础中的基础
  • llm-d:面向Kubernetes的高性能分布式LLM推理框架
  • 阿里云 Linux 搭建邮件系统全流程及常见问题解决
  • ES集群磁盘空间超水位线不可写的应急处理
  • 网站响应速度验收/阿里云官网首页
  • 微网站建设要多少钱/成都seo网站qq
  • 动态web网站怎么做/新闻稿代写
  • 做网站时候图片和视频放在哪里/搜一搜
  • 如何查看域名以前是做什么网站的/优化关键词排名的工具
  • 南昌哪里有网站建设/暴疯团队seo课程