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

网络原理(九):数据链路层 - 以太网协议 应用层 - DNS 协议

目录

1. 数据链路层

1.1 以太网协议

1.1.1 以太网帧格式

1.2 mac 地址

1.2.1 IP 地址和 mac 地址的区别

1.3 帧中的类型字段

 1.3.1 MTU - 最长载荷长度

1.3.2 ARP 协议

2.  DNS 协议


1. 数据链路层

数据链路层, 是一个底层的层次, 主要用于交换机开发, 对于 Java 开发简单了解即可, 本篇也仅做简单介绍.

1.1 以太网协议

以太网协议, 是数据链路层的核心协议. (严谨来说, 是物理层 + 数据链路层的协议)

我们平时说的网线, 其实就是以太网线. 只要电脑是通过网线的方式来上网的, 那么走的就是以太网协议.

当然, 除了插网线, 还有其他的联网方式:

  1. WiFi => 走 802.11 协议
  2. 5G => 走的另外的非 TCP/IP 协议体系

在以太网中, 基本数据单位称为 以太网数据帧.

数据格式名称:

  • 包 Packet  =>  IP
  • 段 Segment  =>  TCP
  • 报 Datagram  =>  UDP
  • 帧 frame  =>  以太网/数据链路层

1.1.1 以太网帧格式

以太网帧格式如下:

1.2 mac 地址

以太网帧中的源地址和目的地址, 指的是 mac 地址, 并非网络层的 IP 地址. 

mac 地址, 又称为物理地址, 占 6 个字节, 可表示 2 ^ 16 个地址量, 是 IPv4 的 6w 多倍, 虽然 IP 地址短缺, 但是 mac 地址是很充裕的~

由于 mac 地址量很充裕, 因此每个网卡都有一个唯一的 mac 地址.

并且, 网卡的 mac 地址在网卡出厂的时就已经写死了, 因此 mac 地址可以作为电脑的身份的唯一标识. 

一台电脑上可能有多个网卡(无线网卡, 有线网卡, 虚拟机), 有多个 mac 地址, 但是每个 mac 地址都是唯一的, 都可以作为电脑的身份标识.

1.2.1 IP 地址和 mac 地址的区别

  1. IP 地址是专门给网络层使用的, 关注的是整个网络路径的转发传输过程.
  2. mac 地址是专门给数据链路层使用的, 关注的是相邻设备之间的转发, 更关注转发细节.

当设备 A 要向设备 B 发送数据时, 这个数据报中的源 IP 和目的 IP 是一直不变的, 永远是整个通信路线的起点和终点, 即 A 的IP 和 B 的IP.

但是, 源 mac 和目的 mac 记录的只是相邻的两个节点的 mac 地址, 记录了当前这一小段路从哪到哪. 是会随着传输路程的改变的改变的.

举个例子, 假设我从邢台要到长春, 走以下路线:

  • 邢台 --> 石家庄 --> 北京 --> 长春

那么, 共有三个小步骤:

1. 步骤一: 邢台 --> 石家庄, 此时的源/目的 IP, 源/目的 mac 如下:

  • 源 IP: 邢台
  • 目的 IP: 长春
  • 源 mac: 邢台
  • 目的 mac: 石家庄

2.步骤二: 石家庄 --> 北京, 此时的源/目的 IP, 源/目的 mac 如下:

  • 源 IP: 邢台
  • 目的 IP: 长春
  • 源 mac: 石家庄
  • 目的 mac: 北京

2.步骤三: 北京 --> 长春, 此时的源/目的 IP, 源/目的 mac 如下:

  • 源 IP: 邢台
  • 目的 IP: 长春
  • 源 mac: 北京
  • 目的 mac: 长春

 通过上述的例子可知, 源 mac 和目的 mac 记录的只是相邻两个节点之间的 mac 地址.

1.3 帧中的类型字段

以太网数据帧中类型字段为 2 个字节, 当类型字段的值不同时, 载荷的数据格式就不同:

  1. 0800(十六进制): 载荷为 IP 数据报
  2. 0806(十六进制): 载荷为 ARP 数据报
  3. 8035(十六进制): 载荷为 RARP 数据报

 1.3.1 MTU - 最长载荷长度

MTU: 描述了一个数据帧的载荷部分, 最多能承载多少数据. MTU 的值, 和通信的硬件结构相关.

当以太网帧的载荷为 IP 数据报时, 载荷中最多只能传输 1500 个字节的数据.(使用网线进行通信时)

使用以太网线进行通信时, MTU 就为 1500. (这里是使用以太网(网线)来通信的, 如果换成光纤, wifi ... 等等, MTU 的值就变了)

也就是说, 使用以太网时, 一个 IP 数据报的最多只能是 1500 Byte.

而我们之前学习到, 一个 IP 数据报最大长度为 64KB(总长度为 16 位, 2^16 = 64KB), 而在数据链路层这里最多为 1KB 多点.

  • 所以, 数据链路层的以太网对 IP 数据报的长度再次做出了限制, 并且限制的更多了. 
  • 因此, IP 数据报的拆包组包操作, 大多是由于数据链路层对 IP 数据报的长度限制而产生的.

1.3.2 ARP 协议

ARP 协议是介于数据链路层和网络层之间的协议.

当以太网帧中的服务字段为 0806 时, 帧中的载荷为 ARP 数据报.

ARP 协议不传输业务数据, 而是一个 "辅助型" 协议, 可以根据一个设备的 IP 地址, 得到该设备的 mac 地址.(获取 IP 地址 和 mac 地址的映射关系)

在数据传输时, 我们肯定是知道源 IP 和目的 IP 的, 路由器就会根据目的 IP 查路由表, 得知从哪个接口转发出去, 转给谁.

也就是说, 路由器是知道下个节点的 IP 地址的, 但是不知道下个节点的 mac 地址.(需要明确目的 mac 才能填写以太网数据帧)

此时, 就可以向周围设备发送 ARP 广播数据报, 询问周围设备的 IP 和 mac 是啥. 其中, ARP 请求中的目的 IP 地址是相邻节点的 IP(已知), 目的 mac 地址是广播地址(FF:FF:FF:FF:FF:FF).

周围的设备收到 ARP 请求后, 就会返回 ARP 响应, 这个响应中就包含了这些设备 IP 和 mac 地址的信息.

路由器收到 ARP 响应后, 就会构造出一个类似 哈希表 的结构, 保存 IP 和 mac 的映射关系. ARP 就是辅助路由器将这张 IP 和 mac 映射关系的表建立起来.

这样, 路由器就可以根据下个节点的 IP 查表来获取下个节点的 mac, 并填写到帧中了. 

路由器中通过 ARP 建立的 IP 和 mac 映射关系的表, 并不是转发数据的时候才开始建立的, 而是在路由器插上线的时候就建立好了, 并且定期进行更新维护


2.  DNS 协议

DNS, 即域名解析系统.

我们可以将 DNS 认为是一个应用层协议, 也可以认为是一套服务器系统.

网络上的服务器, 都是有 IP 的地址的, 并且又在 IP 地址的基础上引入了域名.

所谓域名, 就是一个字符串, 每个服务器的 IP 和域名都是一一对应的. 

域名就是我们平时所说的网址.

至于为啥要引入域名呢?? 有以下两点原因:

  1.   IP 是 4 个字节, 32 个整数, 即使采用点分十进制的方式, 也是不易记忆的. 而域名仅仅是一串单词, 可读性高, 方便记忆.
  2. 服务器发生迁移了(IP 发生改变), 那么只需服务器的维护人员将域名映射的 IP 修改一下即可, 域名不用修改. 于是用户就感知不到 IP 的变化, 仍然可以使用原来的域名去访问服务器.

最初, DNS 是通过 hosts 文件来存储域名和 IP 的映射关系的.

后来, 由于服务器越来越多,映射越来越多, hosts 文件难以维护.

于是, 就将这些域名和 IP 的映射关系放到一个单独的服务器上, 这些服务器称为 DNS 服务器.

当用户在网址栏上输入要访问的服务器的域名时, 计算机会先去查询 DNS 服务器, 将这个域名转化为对应的 IP 地址, 再真正的去访问服务器.

既然 DNS 会根据域名返回对应服务器的 IP 地址, 那么问题来了, 全世界那么多人, 如果每次发起网络请求, 都需要经过 DNS 的解析的话, DNS 就会承担海量的高并发, 那 DNS 不会挂吗??

答: 不会挂. 原因如下: 

  1. 缓存. 我们的电脑不会在每次发动请求时, 都会访问 DNS. 电脑会将之前进行 DNS 解析过的 IP 缓存起来, 当下次再访问时, 直接去缓存里去拿就可以了, 不需要再次访问 DNS.
  2. DNS 服务器不止一个, 会有很多个.

对于原因 2, 这里进行简单说明:

全世界只有 11 个 DNS 根服务器(存储原始数据的 DNS 服务器).

而各种网络运营商会根据 DNS 根服务器搭建 "DNS 镜像服务器", 因此全球各地都有 DNS 服务器.

DNS 根服务在美国人手中, 他们拥有决定的掌握权. 而 IPv6 需要搭建新的 DNSv6 服务器, 可以防止美国卡脖子. 这也是我们国家发展 IPv6 的原因之一.


END

相关文章:

网络原理(九):数据链路层 - 以太网协议 应用层 - DNS 协议

目录 1. 数据链路层 1.1 以太网协议 1.1.1 以太网帧格式 1.2 mac 地址 1.2.1 IP 地址和 mac 地址的区别 1.3 帧中的类型字段 1.3.1 MTU - 最长载荷长度 1.3.2 ARP 协议 2. DNS 协议 1. 数据链路层 数据链路层, 是一个底层的层次, 主要用于交换机开发, 对于 Java 开发…...

rtthread学习笔记系列(4/5/6/7/15/16)

文章目录 4. 杂项4.1 检查是否否是2的幂 5. 预编译命令void类型和rt_noreturn类型的区别 6.map文件分析7.汇编.s文件7.1 汇编指令7.1.1 BX7.1.2 LR链接寄存器7.1.4 []的作用7.1.4 简单的指令 7.2 MSR7.3 PRIMASK寄存器7.4.中断启用禁用7.3 HardFault_Handler 15 ARM指针寄存器1…...

【拒绝算法PUA】3065. 超过阈值的最少操作数 I

系列文章目录 【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中 C刷题技巧总结: [温习C/C]0x04 刷…...

今日总结 2025-01-14

学习目标 掌握运用 VSCode 开发 uni - app 的配置流程。学会将配置完善的项目作为模板上传至 Git,实现复用。项目启动 创建项目:借助 Vue - Cli 方式创建项目,推荐从国内地址 https://gitee.com/dcloud/uni - preset - vue/repository/archiv…...

关于扫描模型 拓扑 和 传递贴图工作流笔记

关于MAYA拓扑和传递贴图的操作笔记 一、拓扑低模: 1、拓扑工作区位置: 1、准备出 目标 高模。 (高模的状态如上 ↑ )。 2、打开顶点吸附,和建模工具区,选择四边形绘制. 2、拓扑快捷键使…...

C#知识|泛型Generic概念与方法

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 关于泛型在前面学习记录过 《泛型集合List相关方法》、《Dictionary泛型集合的使用总结》&#xff1b; 其中泛型集合 List<T>、Dictionary<k,v>所在的命名空间为&#xff1a;System.Collection.Generic…...

centos 8 中安装Docker

注&#xff1a;本次样式安装使用的是centos8 操作系统。 1、镜像下载 具体的镜像下载地址各位可以去官网下载&#xff0c;选择适合你们的下载即可&#xff01; 1、CentOS官方下载地址&#xff1a;https://vault.centos.org/ 2、阿里云开源镜像站下载&#xff1a;centos安装包…...

vscode vue 自动格式化

vscode vue 自动格式化 安装Prettier和Vetur插件 选择设置&#xff0c;并且转到编辑文件。增加如下内容。 {"editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","[vue]": {"editor.defaultFor…...

Webpack 5 混淆插件terser-webpack-plugin生命周期作用时机和使用注意事项

参考案例代码 海南酷森科技有限公司/webpack-simple-demo Terser&#xff08;简要的/简短的&#xff09; 混淆依据 混淆是发生在代码已经 bundle 之后的事情 变量或者函数在被引用或赋值时才能被混淆 孤立的函数或者变量可能会被移除&#xff0c;但不会被混淆&#xff0c;要…...

MQTT(Message Queuing Telemetry Transport)协议

文章目录 一、MQTT 的原理1. 通信模型2. 核心概念3. 工作流程 二、MQTT 的优势1. 轻量级2. 异步通信3. 可靠性4. 实时性5. 支持断线重连6. 跨平台支持7. 安全性 三、MQTT 的典型应用场景四、与其他协议的对比 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;…...

【MySQL学习笔记】MySQL存储过程

存储过程 1、基础语法2、变量2.1 系统变量2.2 用户自定义变量2.3 局部变量 3、if 流程控制4、参数5、case 流程控制6、循环结构6.1 while 循环6.2 repeat 循环6.3 loop 循环 7、游标 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合&#xff0c;调用存储过程可以…...

Vue2+OpenLayers实现折线绘制、起始点标记和轨迹打点的完整功能(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、HTML页面 3.2、初始化变量 3.3、创建起始点位 3.4、遍历轨迹点 3.5、画折线 3.6、初始化弹窗信息 3.7、初始化地图上标点的点击事件 3.8、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 n…...

基于Spring Boot的城市垃圾分类管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

linux: 文本编辑器vim

文本编辑器 vi的工作模式 (vim和vi一致) 进入vim的方法 方法一:输入 vim 文件名 此时左下角有 "文件名" 文件行数,字符数量 方法一: 输入 vim 新文件名 此时新建了一个文件并进入vim,左下角有 "文件名"[New File] 灰色的长方形就是光标,输入文字,左下…...

Eclipse Debug 调试

关于Eclipse的Debug调试功能&#xff0c;有几点重要的信息可以分享。 Debug的启动方式&#xff1a;Eclipse提供了多种启动程序调试的方式&#xff0c;包括通过菜单(Run –> Debug)、点击“绿色臭虫”图标、右键选择Debug As以及使用快捷键(F11)【0†source】。 调试中最常用…...

vue3+ts的<img :src=““ >写法

vue3ts的<img :src"" >写法<img :src"datasetImage" alt"数据分布示意图" /><script setup lang"ts">const datasetImage ref();datasetImage.value new URL(../../../assets/images/login-background.jpg, impo…...

《心血管成像的深度学习》论文精读

Deep Learning for Cardiovascular Imaging 重要性&#xff1a;由深度学习 (DL) 的进步推动的人工智能 (AI) 有可能重塑心血管成像 (CVI) 领域。虽然 CVI 的 DL 仍处于起步阶段&#xff0c;但研究正在加速&#xff0c;以帮助获取、处理和/或解释各种模式下的 CVI&#xff0c;其…...

RDP、VNC、SSH 三种登陆方式的差异解析

一、引言 在计算机系统管理和远程访问的领域中&#xff0c;RDP&#xff08;Remote Desktop Protocol&#xff0c;远程桌面协议&#xff09;、VNC&#xff08;Virtual Network Computing&#xff0c;虚拟网络计算&#xff09;和 SSH&#xff08;Secure Shell&#xff09;是三种广…...

3d 可视化库 vister部署笔记

目录 vister 开源地址: python版本: 在python3.10以上版本安装 viser, 测试ok的案例: 立方体mesh选中 SMPL-X可视化 ok 推理代码: vister 开源地址: GitHub - nerfstudio-project/viser: Web-based 3D visualization + Python python版本: 在python3.10以上版本…...

操作系统八股文学习笔记

总结来自于javaguide,本文章仅供个人学习复习 javaguide操作系统八股 文章目录 操作系统基础什么是操作系统?操作系统主要有哪些功能?常见的操作系统有哪些?用户态和内核态为什么要有用户态和内核态?只有一个内核态不行嘛?用户态和内核态是如何切换的?系统调用 进程和线程…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...

Excel 怎么让透视表以正常Excel表格形式显示

目录 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总...

篇章一 论坛系统——前置知识

目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构​编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...