网络原理(四)—— 网络层、数据链路层 与 DNS

网络层

网络层这里重点介绍 IP 协议,首先先解析 IP 数据包:

在这里插入图片描述
先介绍第一行:
在这里插入图片描述

4位版本号是指使用了哪一个版本的 IP 协议,这里有 IPV4 和 IPV6 两种协议,现在主要使用的是 IPV4 这一个版本号, IPV6 在国内也在逐步推广中,这里重点介绍 IPV4

4 位首部长度就是 IP 报头占多少个 (四字节),由此可见 IP 报头最大占 15 * 4 = 60 字节

8 位 服务类型:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量,最高可靠性, 最小成本. 这四者相互冲突, 只能选择⼀个.
对于 ssh / telnet 这样的应用程序, 最小延时比较重要; 对于 ftp 这样的程序, 最大吞吐量比较重要

16 位总长度:表示整个 IP 数据包占多少字节

第二行:
在这里插入图片描述
因为 IP 数据包是由最大容量限制的,一旦超过这个限制就会进行拆包,如何确认哪些数据包是一组的呢?
这里就使用了 16 位标识:如果是同一组的数据包,那么标识位就是一样的

3位标志位:第⼀位保留(保留的意思是现在不用,但是还没想好说不定以后要用到).第二位置为1表示禁止分片, 这时候如果报文度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后⼀个分片置为1, 其他是0. 类似于一个结束标记.

13位置片偏移:标识这个数据包具体在这一组的哪一个位置,使用偏移量来表示

第三行:
在这里插入图片描述
8 位生存时间:表示在网络链路中最多可以经过多少个路由器,每经过一个路由那么次数简易,直到减到0,那么这个数据包就会被丢弃。【因为我们发送的数据包的目的IP 可能是不存在的,那么,为了避免这个数据包无限制地在网络中传输消耗资源,才引入了生存时间】

8位协议:表示上一层使用的是什么协议(UDP/TCP…)

16 位首部校验和:专门校验IP 数据包报头有没有出错

最后就是源IP 和 目的IP 以及选项(选项最大为40字节)

地址管理

首先IPV4的 IP 地址占 4 个字节,也就是 32 个比特位,大约有42 亿个 IP 地址可供使用,由于时代的飞速发展和科技的不断进步,很多设备都需要上网,在十几年前,IPV4的地址已经被分配完了。

既然 IPV4的地址已经被分配完了,那为什么我们还是可以正常上网???

在IPV4耗尽之前,提出了三个解决方案:

动态分配 IP 地址

第一个方案是动态分配IP 地址,因为很多设备不是一天 24 h 都在上网,我们可以将不上网的设备的IP 地址剥夺给其他要上网但没有IP 地址的设备使用,因为要上网的设备特别多,这种方案治标不治本。

NAT

第二个方案是 使用 NAT 技术,也就是网络地址转化技术,将 IP 地址分为公网 IP 和 私网IP
10.*
172.16.* - 172.31. *
192.168.*
上面三种 IP 地址类型是分配给私网使用的,其他 IP 则是属于公网使用的。

NAT 技术就是使用一个公网IP地址给一个私网使用,一个私网里面可以有成千上万台设备,这样在一定程度上缓解了 IPV4 的 IP 地址不够用的困境。

在公网里的 IP 地址是唯一的不可以重复
在同一个私网里IP 地址是唯一的不可重复的,但是不同私网里可以出现重复的 IP 地址,因为这些设备不在同一个私网里,这就是为什么 NAT 技术可以极大缓解 IPV4 的困境

公网IP是不可以主动访问私网的 IP
私网的IP 不可以主动访问其他私网的IP
私网内部的IP 可以访问本私网内部的其他 IP
私网的IP 可以主动访问公网的 IP
公网的IP 可以主动访问公网的其他IP

那么私网 IP 是 如何访问公网的 IP ???
这里使用了网络地址转化技术
首先 私网的 IP 会被转化为公网的 IP,然后进行数据通信

知识补充:
私网的IP里前面固定的数字是网络号,剩余的后面的数字属于主机号,例如一个私网分配到 192.168.*, 假设它使用 192.168 最为网络号,主机号全为 0,也就是 192.168.0.0,这个IP地址表示整个局域网的网络号,不分配给任意主机使用;如果主机号全为1,那么这个地址就是广播地址,192.168.255.255,可以像整个私网的所有设备发送广播。
由于 IPV4 占 4 个字节,我们一般使用点分十进制来表示,方便我们观察,也就是每一个8位二进制的数字使用十进制来表示,后面再加一个点,例如 127.0.0.1
127. * 是环回地址,这个地址一般是用于设备自测,例如我们之前写的服务器代码,我们会使用 127.0.0.1这个 IP 地址来进行代码测试,这个IP 地址就是本机默认的IP 地址,发送的数据包发送方和接收方都是本机。

地址转化的原理:
利用私网发送的数据包中的IP 地址和端口号,在 实现 NAT 技术的路由器中有一个表项,里面存在的是私网的 IP 和端口号对应 公网的 IP 和 端口号,因为私网所有的设备都使用 同一个 公网的 IP 地址,所以这里使用 端口号加以区分。

在这里插入图片描述

IPV6

第三个解决方案就是 IPV6

IPV6 使用 128 个比特位来表示 IP 地址,也就是 2 ^128-1 这个数量级,也就是 16 个字节

可以为每一粒沙子都分配一个 IP 地址,在根本上解决了 IPV4 地址不够用。

但是由于 IPV6 和 IPV4 不兼容,所以升级为 IPV6 需要更换硬件设备,现在我们使用的方案是再路由器安装 IPV6 的 IP 地址 可以转化为 IPV4 地址的软件,保证不影响当前网络的使用,逐步推进IPV6 的升级,这也是国家网络安全的部署。

路由选择

在路由器上会配置一个路由表
路由表的作用:当某个数据包到达该路由时,下一步应该往哪一个路由走

会存在默认的下一跳的IP 地址,也就是当路由表没有查询到数据包的目的IP 地址的时候,就会将数据包交给下一跳,下一跳的 路由器直到的路会更多,可能存在数据包的目的IP 地址的方向,实在没有会继续交给下一跳。

数据链路层

以太网数据帧

在这里插入图片描述
这里的目的地址和源地址都是 6 个字节,为 MAC 地址,MAC 地址是物理地址(和 IP 地址不同,这是直接给硬件标上的地址,每张网卡出厂之前都被标上了唯一的 MAC 地址,由于是MAC 地址占 6 个字节,目前没有被消耗完)

拓展:由于当时设计网络层和数据链路层的大佬们不知道对方都加了地址,所以网络层有IP地址,数据链路层有自己的 MAC 地址,这两种地址都被保留了下来。

IP 地址在网络层使用,关注的是整个网络的转发传输过程,举个例子:加入IP 地址为 129.154.123.183 要发送给 185.146.220.120 一个数据包,那么网络层会使用关注起点和终点
MAC 地址是在数据链路层使用,数据链路层关注的是两个相邻的设备之间的转发,还是上面两个IP 地址的转发,在数据链路层不管你的终点和起点,只关心你这个数据包下一个节点应该往哪里走。

数据链路层的载荷部分 类型 有三种:IP, ARP, RARP

帧末尾的 CRC 是校验码

数据链路层的载荷部分最大长度为 1500 字节
由于数据链路层能搭载的载荷比较小,所以IP 数据包在数据链路层经常需要进行拆包和租包

ARP 不是用来传输业务数据的,而是根据 IP 地址来得到对应的MAC 地址,例如通过广播地址,发送 ARP 数据包,获得局域网内的所有的设备的 IP 地址和 MAC 地址,最后路由器构建一张类似哈希表的表来保存 IP 和 MAC 地址。

应用层协议 —— DNS

网络上为了方便用户的记忆和使用,我们使用域名来命名网址,例如百度的网址是 www.baidu.com

但是计算机里的世界只认识二进制,所以这个域名会被解析为对应的IP 地址,这个工作由 DNS 完成

一开始时,域名解析工作是由主机电脑内置的 host 文件实现的,这个文件记录 域名 和 IP 地址的映射关系
由于互联网的飞速发展,为了适应数以亿计的域名解析工作,于是出现了专门用来进行域名解析工作的 DNS 服务器,这个服务器分为很多级,根,一级,二级等等…

计算机本地会有缓存保存一些域名和对应的IP地址,这样就不用屡次访问DNS 服务器,提高效率,现在访问DNS 服务器进行域名解析一般在几毫秒内完成。

根服务器在美国,其他国家使用镜像根服务器,每隔一段时间就要像根服务器获得新的数据和授权。

为了实现网络独立自主发展,我国大力推动 IPV6 发展,也是因为 IPV6 的升级同样也需要新的 DNS 服务器,目前 IPV6 配置 了 三个根服务器,分别在中,美,日,三国手中,还有十几个辅根服务器在其他国家手中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1503.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis快速入门店铺营业状态设置

Redis简介 Redis是一种基于内存的键值对(K-V)数据库。 这意味着它与MySQL数据库类似,都能够用于存储数据,但两者又有着本质的区别。首先两者存储数据的结构不一样,Redis通过键(key)和值…

Node.js 如何实现文件夹内文件批量重命名

文章目录 一、引言二、Node.js 简介2.1 是什么2.2 优势 三、Node.js 批量重命名原理3.1 涉及的核心模块3.2 关键函数 四、实战步骤4.1 环境搭建4.2 代码实现4.3 代码解释 五、案例分析5.1 场景描述5.2 解决方案 六、可能遇到的问题与解决方法6.1 常见错误6.2 解决方案 七、总结…

MySQL(高级特性篇) 04 章——逻辑架构

一、逻辑架构剖析 (1)服务器处理客户端请求 那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?这里以查询请求为例展示:下面具体展开看一下:Connectors是MySQL服务器之外的客户…

滚动字幕视频怎么制作

在当今的视频创作领域,滚动字幕被广泛应用于各种场景,为视频增添丰富的信息展示和独特的视觉效果。无论是影视剧中的片尾字幕、新闻节目中的资讯滚动,还是综艺节目中的人员与鸣谢信息展示,滚动字幕都发挥着不可或缺的作用。接下来…

源码编译安装httpd 2.4,提供系统服务管理脚本并测试(两种方法实现)

方法一:使用 systemd 服务文件 sudo yum install gcc make autoconf apr-devel apr-util-devel pcre-devel 1.下载源码 wget https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz 2.解压源码 tar -xzf httpd-2.4.46.tar.gz 如果没有安装tar 记得先安装…

计算机视觉算法实战——步态识别(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​​​​​​​​​​​​​​​​ 1. 步态识别简介✨✨ 步态识别(Gait Recognition)是计算机视觉领域中的一个…

2025 年 UI 大屏设计新风向

在科技日新月异的 2025 年,UI 大屏设计领域正经历着深刻的变革。随着技术的不断进步和用户需求的日益多样化,新的设计风向逐渐显现。了解并掌握这些趋势,对于设计师打造出更具吸引力和实用性的 UI 大屏作品至关重要。 一、沉浸式体验设计 如…

Leetcode - 周赛431

目录 一,3411. 最长乘积等价子数组 二,3412. 计算字符串的镜像分数 三,3413. 收集连续 K 个袋子可以获得的最多硬币数量 四,3414. 不重叠区间的最大得分 一,3411. 最长乘积等价子数组 本题数据范围小,直…

深入Android架构(从线程到AIDL)_30 JNI架构原理_Java与C的对接03

目录 2.4 以C结构表达类(class),并创建对象(object) 认识C函数指针 范例 2.5 在C函数里存取对象的属性(attribute) 范例 2.4 以C结构表达类(class),并创建对象(object) 认识C函数指针 struct里不能定义函数本身,但能定义函数指针(func…

论文笔记(四十七)Diffusion policy: Visuomotor policy learning via action diffusion(下)

Diffusion policy: Visuomotor policy learning via action diffusion(下) 文章概括5. 评估5.1 模拟环境和数据集5.2 评估方法论5.3 关键发现5.4 消融研究 6 真实世界评估6.1 真实世界Push-T任务6.2 杯子翻转任务6.3 酱汁倒入和涂抹任务 7. 实际双臂任务…

EasyExcel - 行合并策略(二级列表)

😼前言:博主在工作中又遇到了新的excel导出挑战:需要导出多条文章及其下联合作者的信息,简单的来说是一个二级列表的数据结构。 🕵️‍♂️思路:excel导出实际上是一行一行的记录,再根据条件对其…

软件测试面试题整理

一、人格相关问题 1、自我介绍结构 姓名工作年限简单介绍上家公司的行业主要负责内容个人优势短期内的职业规划应聘该岗位的原因 2、对未来的发展方向怎么看? 没有标准答案,职业规划来讲,可以分为技术层面和管理层面去说,技术…

.NET framework、Core和Standard都是什么?

对于这些概念一直没有深入去理解,以至于经过.net这几年的发展进化,概念越来越多,越来越梳理不容易理解了。内心深处存在思想上的懒惰,以为自己专注于Unity开发就好,这些并不属于核心范畴,所以对这些概念总是…

CNN张量输入形状和特征图

CNN张量输入形状和特征图 这个是比较容易理解的张量的解释,比较直观 卷积神经网络 在这个神经网络编程系列中,我们正在逐步构建一个卷积神经网络(CNN),所以让我们看看CNN的张量输入。 ​ ​ 在最后两篇文章中&…

【数据可视化-12】数据分析岗位招聘分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

(12)springMVC文件的上传

SpringMVC文件上传 首先是快速搭建一个springMVC项目 新建项目mvn依赖导入添加webMoudle添加Tomcat运行环境.在配置tomcat时ApplicationContext置为"/"配置Artfact的lib配置WEB-INF配置文件(记得添加乱码过滤)配置springmvc-servlet文件&…

Ubuntu中双击自动运行shell脚本

方法1: 修改文件双击反应 参考: https://blog.csdn.net/miffywm/article/details/103382405 chmod x test.sh鼠标选中待执行文件,在窗口左上角edit菜单中选择preference设计双击执行快捷键,如下图: 方法2: 设置一个应用 参考: https://blo…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务,存储非结构化数据,兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

金融项目实战 01|功能测试分析与设计

前置内容:金融项目准备的内容笔记可直接看如下笔记 只看:一、投资专业术语 和 二、项目简介 两部分文章浏览阅读2.3k次,点赞70次,收藏67次。安享智慧理财金融系统测试项目,测试用例,接口测试,金…

【Rust】控制流

目录 思维导图 一、选择结构 1. if表达式 2. 处理多个条件的else if 3. 使用if在let语句中 二、循环结构 1. loop 2. while循环 3. for循环 4. 使用范围Range进行循环 思维导图 一、选择结构 控制流是编程语言的基本构建块,Rust使用if表达式和循环来控制代…