当前位置: 首页 > 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操作系统八股 文章目录 操作系统基础什么是操作系统?操作系统主要有哪些功能?常见的操作系统有哪些?用户态和内核态为什么要有用户态和内核态?只有一个内核态不行嘛?用户态和内核态是如何切换的?系统调用 进程和线程…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...