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

个人主页~


网络--数据链路层

一、以太网

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

二、以太网帧格式

  • 以太网帧

    • 目的地址和源地址:就是我们说的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
端口处理 端口不变 端口随机或指定范围映射
适用场景 服务器对外映射 家庭/企业内网共享上网

今日分享就到这里了~

相关推荐
shenyan~22 分钟前
关于Web安全:8. Web 攻击流量分析与自动化
网络·web安全·自动化
HappyAcmen28 分钟前
1.3 古典概型和几何概型
笔记·概率论·学习方法
mycm030432 分钟前
媒体新闻发稿:选择适合自己的媒体
经验分享·媒体
济宁雪人44 分钟前
HTTP协议
网络·网络协议·http
张海森-1688201 小时前
windows10搭建nfs服务器
linux
网硕互联的小客服1 小时前
如何防止服务器被用于僵尸网络(Botnet)攻击 ?
网络·网络安全·ddos
wanhengidc1 小时前
高防服务器能够抵御哪些网络攻击呢?
运维·服务器
普宁彭于晏1 小时前
CSS3相关知识点
前端·css·笔记·学习·css3
Paddy哥1 小时前
linux 安装mysql8.0;支持国产麒麟,统信uos系统
linux·mysql·麒麟·统信uos·统信
G_whang2 小时前
VMware Workstation 与 Hyper-V 不兼容。请先从系统中移除 Hyper-V 角色,然后再运
linux