「网络编程」其他重要的协议或技术_ DNS协议 | ICMP协议 | NAT技术

news2024/11/29 0:38:26

「前言」文章内容是DNS协议、ICMP协议、NAT技术的讲解。

「归属专栏」网络编程

「主页链接」个人主页

「笔者」枫叶先生(fy)

目录

  • 一、DNS协议
    • 1.1 背景
    • 1.2 域名简介
    • 1.3 域名解析的过程
  • 二、ICMP协议
    • 2.1 ICMP简介
    • 2.2 ping命令
    • 2.3 traceroute命令
  • 三、NAT技术
    • 3.1 NAT技术背景
    • 3.2 NAT技术对IP地址转换过程
    • 3.3 NAPT
    • 3.4 NAT技术的缺陷
  • 四、NAT和代理服务器
    • 4.1 正向代理
    • 4.2 反向代理
    • 4.3 NAT和代理服务器的区别

一、DNS协议

DNS(Domain Name System,域名系统)协议是一种用于将域名解析为对应IP地址的协议。它是互联网上最重要的基础设施之一,用于将人类可读的域名转换为计算机可理解的IP地址。

1.1 背景

TCP/IP中通过IP地址和端口号的方式,来确定网络中一个主机上的一个程序。

但IP地址是一长串数字,并不便于人们记忆,于是人们发明了一种叫做主机名的东西,并用hosts文件夹来描述主机名和IP地址之间的对应关系

刚开始,这个hosts文件是由互联网信息中心(SRI-NIC)来管理的:

  • 如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件
  • 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网

这样就太麻烦了,于是产生了DNS系统(用于帮助互联网进行商业化):

  • 由一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系
  • 如果新计算机要接入网络,或者某个计算机IP变更,就需要将对应信息注册到数据库中
  • 当用户通过域名访问互联网服务时,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址

至今,我们的计算机上仍然保留了hosts文件,这个hosts文件当中一般存储的是主机名与IP地址之间的映射,用户也可以在hosts文件中自主添加域名和IP映射关系,在域名解析的过程中会优先查找hosts文件的内容

在Linux上查看hosts文件cat /etc/hosts
在这里插入图片描述
即现在都是使用域名来代替IP地址进行访问,域名例如:www.baidu.com

1.2 域名简介

域名是互联网上的网站或网络资源的地址,它是由一串字符组成的标识符。域名的作用是方便用户记忆和使用,使得用户可以通过简单易记的名称来访问互联网资源,而不需要记住复杂的IP地址

域名由多个部分组成,每个部分用点分隔:

  • 域名的最后一部分称为顶级域名(TLD)或者称为一级域名,例如.com、.net、.org等。顶级域名可以表示不同的组织类型或国家/地区,例如,.com表示这是一个工商企业域名,.net表示网络提供商和.org表示开源组织或非盈利组织
  • 顶级域名之前的部分称为二级域名,例如example.com中的example就是二级域名。二级域名可以由域名所有者自由选择
  • www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议

例如,www.baidu.com.com是一级域名,baidu是二级域名

1.3 域名解析的过程

域名解析是将域名转换为对应的IP地址的过程,它是通过DNS(域名系统)协议来实现的。下面是域名解析的基本步骤:

  1. 用户在浏览器中输入一个域名,例如www.example.com。 浏览器会向本地DNS服务器发送一个查询请求,询问该域名对应的IP地址
  2. 如果本地DNS服务器缓存了该域名的IP地址,它会直接返回给浏览器
  3. 如果本地DNS服务器没有缓存该域名的IP地址,它会向根域名服务器发送一个查询请求
  4. 根域名服务器会告诉本地DNS服务器,该域名对应的顶级域名服务器的地址。 本地DNS服务器再向顶级域名服务器发送一个查询请求
  5. 顶级域名服务器会告诉本地DNS服务器,该域名对应的权威域名服务器的地址。 本地DNS服务器再向权威域名服务器发送一个查询请求
  6. 权威域名服务器会返回该域名对应的IP地址给本地DNS服务器。 本地DNS服务器将IP地址缓存起来,并将它返回给浏览器。
  7. 浏览器收到IP地址后,会向该IP地址发送HTTP请求,与服务器建立连接,并获取网页内容
  8. 服务器将网页内容返回给浏览器,浏览器进行渲染,最终显示在用户的屏幕上

二、ICMP协议

2.1 ICMP简介

ICMP(Internet Control Message Protocol)是一种网络层协议,用于在IP网络中传输控制信息和错误报告。它是在网络层上工作的协议,主要用于网络设备之间的通信和网络故障的诊断

ICMP协议的定位:

准确来说,ICMP协议介于传输层和网络层之间,ICMP协议位于IP协议的上层

但是ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议
在这里插入图片描述

ICMP的主要功能包括:

  • 确认IP包是否成功到达目标地址
  • 通知在发送过程中IP包丢弃的原因
  • ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要使用ICMPv6

一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通,但是IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因

例如

比如当主机A在向主机B发送数据的过程中,主机B因为某些原因已经离线了

因此路由器在多次发送ARP请求包而得不到响应后,就会返回一个ICMP Destination Unreachable的包给主机A,此时主机A就知道自己发送的数据无法到达主机B
在这里插入图片描述

ICMP大概分为两类报文:

  1. 一类是通知出错原因的
  2. 一类是用于诊断查询的

ICMP包常见类型解释如下:
在这里插入图片描述

2.2 ping命令

ping命令前面已经介绍过了,不再赘述,这里谈一下原理

ping命令是基于ICMP协议实现的,通常用于测试本地主机与另一台主机之间的通信信道是否正常

例如,使用ping www.baidu.com命令,测试本地主机与百度服务器之间的通信信道是否正常
在这里插入图片描述

  • ping命令不仅能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存时间)
  • ping命令会先发送一个ICMP Echo Request给对端
  • 对端接收到之后,会返回一个ICMP Echo Reply

注意:此处ping的是的域名,该域名会由DNS解析成IP地址
在这里插入图片描述

一个值得注意的坑

telnet对应的端口号是23,ssh对应的端口号是22,那ping对应的端口号是多少?

  • ping命令基于ICMP,是在网络层
  • 而端口号,是传输层的内容,在ICMP中根本就不关注端口号这样的信息(ICMP绕过了传输层)

2.3 traceroute命令

traceroute命令也是基于ICMP协议实现的,traceroute命令可以遍历数据包传送到目标主机所经过的所有路由器

在Linux安装该命令:

sudo yum install -y traceroute

例如,使用traceroute www.baidu.com命令,遍历数据包传送到百度服务器所经过的所有路由器
在这里插入图片描述

三、NAT技术

NAT(Network Address Translation,网络地址转换)是一种常用的网络技术,用于在一个网络中将私有IP地址转换为公共IP地址,以实现多个设备共享一个公共IP地址的功能,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机

3.1 NAT技术背景

  • IPv4地址空间只有32位,最多可以表示42亿个地址,而随着互联网的迅速发展,这个地址空间很快就被耗尽了
  • 为了解决这个问题,IPv6地址空间被设计为128位,可以表示更多的地址,但是IPv6的普及和应用还需要时间
  • 在IPv4地址不足的情况下,NAT技术应运而生
  • NAT技术可以将多个私有IP地址映射到一个或多个公共IP地址上,从而节约了公共IP地址的使用
  • 同时,NAT技术还可以隐藏内部网络的真实IP地址,提高了网络的安全性

3.2 NAT技术对IP地址转换过程

这个在IP协议已经谈过

NAT技术对IP地址转换过程(数据包从局域网到公网的过程)(出去,也就是发送请求)

路由器是连接两个或多个子网的硬件设备,在路由器上有两种网络接口,分别是LAN口WAN口

  • LAN口(Local Area Network):表示连接本地网络的端口,主要与家庭网络中的交换机、集线器或PC相连
  • WAN口(Wide Area Network):表可以理解为连接公网网络的接口,一般指互联网

LAN口的IP地址叫做LAN口IP(对内),也叫做子网IP,将WAN口的IP地址叫做WAN口IP,也叫做外网IP(对外)

子网内的主机在和外网进行通信时,路由器会不断将数据包IP首部中的源IP地址替换成路由器的WAN口IP,这样逐级替换,最终数据包中的源IP地址成为一个公网IP(NAT技术)

数据包转发的大致流程如下:

  • 假设数据包要去往122.77.241.3/24
  • 数据包从自己的主机发送给路由器之后,路由器发现要去往的目的IP不再自己的子网内
  • 此时就会进行源IP替换成路由器的WAN口IP,再转发给跟自己直接相连的另一个子网
  • 假设转发的数据包到了运营商的路由器,经过多级转发(经过运营商的多个子网),最后发现数据包要去往的目的IP不在自己的子网内
  • 此时也进行源IP替换成路由器的WAN口IP,然后直接把数据包转发到公网上
  • 再由公网转发到对应的目的IP

在这里插入图片描述

上述是数据包从局域网到公网的转换过程

NAT技术对IP地址转换过程(数据包从公到局域网的过程)(回来,也就是服务端发送响应)

外网的主机在和局域网的某一台主机进行通信时,路由器会不断将数据包IP首部中的目的IP地址替换成路由器的WAN口IP,这样逐级替换,最终数据包中的源IP地址换成相应主机的局域网IP地址,然后将数据包发送到相应的主机(NAT技术)

数据包转发回来的大致流程如下:

  • 数据包从主机122.77.241.3/24发送给路由器之后(数据包不知道最终的目的IP是多少,需要通过查询地址转化表得知下一个路由器的IP地址,地址转化表下面说),通过路由地址转化表得知下一个路由器的IP地址(WAN口IP)
  • 此时就会进行目的IP替换成下一个路由器的WAN口IP,再转发给下一个路由器
  • 经过多级转发和替换,数据包最终到达了相应的局域网
  • 也是通过查询地址转换表,直接把数据包发送给相应的主机

:地址转化表下面讲,上述就是数据包从公网回到局域网的过程

  • 如果该局域网只有一台主机访问该服务器,数据包从公网回到局域网,IP地址转换过程也是和上面一样
  • 但是,该局域网如果有多台主机都访问该服务器,那么对于服务器返回的数据包,目的IP都是相同
    的,那么路由器如何判定将这个数据包转发给哪个局域网的主机?
  • 如何把数据包转发给对应的主机(同一局域网内有多台主机(客户端)访问同一台服务器),这里就涉及到NART

3.3 NAPT

先谈一下上面的地址转化表

地址转化表

  • 当局域网当中的主机要访问公网时,路由器会将这些数据包的源IP地址替换成路由器自己的WAN口IP地址(每到达一个路由器就转化一次)
  • 当公网发来响应数据包时,则是对目的IP进行替换

当公网转发的数据包到达相应的局域网,数据包如何把数据包转发给相应的主机?

  • 实际上,在路由器内部,有一张自动生成的(路由器自动维护),用于地址转换的表
  • 该转换表中维护的就是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系(键值对,kv)
  • 局域网中的主机第一次向外网发起数据请求时,就会生成表中的映射关系
  • 比如在TCP建立连接时,会建立对应的映射关系,在TCP断开连接后,就会删除对应的映射关系

在上述例子中,主机192.168.1.201第一次向服务器发起数据请求时,路由器中就会建立以下映射关系
在这里插入图片描述
当路由器收到服务器向发来的响应数据时,就可以通过查表得知该响应数据是发送给局域网当中的主机

但是,如果局域网中的主机192.168.1.201和主机192.168.1.202(多台主机)同时都在访问该服务器,那么此时转换表中就会建立如下两对映射关系:
在这里插入图片描述
此时就会产生一个问题:对于服务器返回的数据包,目的IP都是相同的,那么路由器如何判定将这个数据包转发给哪个局域网的主机?

  • 上面的地址转换表只能保证从左到右的唯一性,而不能保证从右到左的唯一性
  • 此时路由器就无法判断该数据包应该转发给主机192.168.1.201还是主机192.168.1.202
  • 此时就需要用到NAPT技术

NAPT

NAPT(Network Address and Port Translation)技术是一种基于NAT的扩展,它不仅会转换数据包中的IP地址,还会转换端口号

NAPT技术通过转换IP地址和端口号,实现了多个内部主机共享单个公网IP地址进行通信的功能

  • 也就是说,除了建立局域网中私有IP与其对应访问的公网IP之间的映射关系外,还会加上一个由路由器选定的端口号进行替换
  • IP + port为一组映射关系,上面谈的地址转换表并不完整
  • 当外部网络返回数据包时,NAPT会根据转换表将目的IP地址和端口号进行转换,将数据包正确地发送到内部网络的相应主机上
  • 此时就解决了路由器如何判定将这个数据包转发给哪个局域网的主机

例如

比如局域网中的主机A和主机B都在访问同一个服务器(假设服务器的端口号是80),并且它们访问服务器时采用的端口号都是1025(两台主机上的进程端口号可能会相同,就拿这个举例)

  • 假设主机A发送的数据包先到达路由器,此时路由器将数据包的源IP地址替换成自己的WAN口IP地址,由于路由器用于访问该服务器的1025号端口没有被使用,因此该数据包的源端口号可以不变
  • 当主机B发来的数据包到达路由器时,路由器同样将数据包的源IP地址替换成自己的WAN口IP地址,但此时路由器用于访问该服务器的1025号端口已经被主机A使用了,因此路由器会重新选定一个端口号对数据包的源端口号进行替换

映射关系如下:
在这里插入图片描述
此时这张转换表既能保证从左到右的唯一性,也能保证从右到左的唯一性

  • 当服务器发来的响应数据到达局域网的路由器时,虽然服务器发给主机A和主机B的数据包对应的目的IP地址是一样的
  • 但路由器是用自己的1025号端口代替主机A进行数据请求的,而用的是1026号端口代替主机B进行数据请求的
  • 因此路由器进行查表,可以继续根据地址转化表的源端口号,来判断应该将该数据包转发给主机A还是主机B
  • 最后进行对数据包中的目的IP地址和目的端口号进行替换,然后转发给局域网内对应的主机

3.4 NAT技术的缺陷

NAT技术进行私有IP和公网之间的替换,主要就是依赖NAT路由器当中维护的网络地址转换表,但这张转换表也体现出了NAT的一些缺陷:

  • 无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立连接
  • 转换表的生成和销毁都需要额外开销
  • 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开

总之,NAT技术的优点大于缺点

补充:内网穿透

  • 内网穿透是一种网络技术,用于在私有网络(如局域网)中的设备与公共网络(如互联网)上的设备进行通信
  • 通常情况下,私有网络中的设备由于NAT(网络地址转换)或防火墙的限制,无法直接被公共网络上的设备访问
  • 内网穿透技术的目的就是克服这些限制,使得私有网络中的设备可以被公共网络上的设备访问
  • 简单来说就是,允许你内网的机器暴露在公网上,通过公网可以访问到你内网上的机器(这样你内网上的机器就相当于一台云服务器)
  • 内网穿透技术通常是基于NAT(网络地址转换)技术实现的,可以说内网穿透技术是在NAT技术基础上的一种扩展

四、NAT和代理服务器

  • 代理服务器(Proxy Server)是一种位于客户端和目标服务器之间的服务器,它充当客户端和目标服务器之间的中介,转发客户端的请求并获取目标服务器的响应
  • 代理服务器可以用于访问受限制的内容、提高网络安全性、提高访问速度、隐藏客户端的真实IP地址等目的
  • 常见的代理服务器类型包括正向代理服务器反向代理服务器

4.1 正向代理

正向代理(Forward Proxy)是一种代理服务器,它代表客户端向目标服务器发送请求

  • 当客户端需要访问互联网上的资源时,它会向正向代理服务器发送请求,然后代理服务器会将请求转发给目标服务器,并将目标服务器的响应返回给客户端
  • 服务器响应的结果也是让正向代理服务器转发给相应的客户端
  • 正向代理服务器会把服务端响应的数据缓存到本地上
  • 如果客户端需要访问的资源在正向代理服务器本地缓存有,那正向代理服务器就会直接返回本地的资源给客户端,不再把请求转发给服务端
  • 正向代理服务器更靠近的是客户端

在这里插入图片描述
如果请求的资源已经存在:
在这里插入图片描述

  • 举例来说,学校的校园网,校园网的服务器就是正向代理服务器,我们使用校园网,校园网的代理服务器会帮我们转发我们的请求
  • 当校园网的服务器收到对应外网的响应数据后,再由这台服务器将数据转发给你
  • 当然,也可以对你的请求进行拦截

正向代理服务器的好处是:

  • 正向代理在访问控制、隐私保护、内容过滤、加速访问速度等方面具有广泛的应用
  • 加速访问速度:代理服务器可以缓存经常访问的内容,提高访问速度,减轻目标服务器的负载(例如:游戏加速器)
  • 绕过网络限制:在企业、学校或国家级防火墙中,正向代理可用于绕过网络限制,访问受限制的内容或网站(例如:fan墙)

4.2 反向代理

反向代理(Reverse Proxy)是一种代理服务器,它代表目标服务器向客户端发送请求

  • 当客户端需要访问某个服务时,它发送请求到反向代理服务器,然后反向代理服务器将请求转发给后端的目标服务器,获取响应后再返回给客户端
  • 反向代理服务器更靠近的是服务端

在这里插入图片描述
反向代理广泛应用于 Web 服务器、负载均衡、安全防护、内容加速等场景

负载均衡

  • 负载均衡(Load Balancing)是一种用于在多个服务器之间分配工作负载的技术,旨在提高系统的性能、可靠性和可扩展性
  • 负载均衡器(Load Balancer)通常位于客户端和服务器之间,接收来自客户端的请求,并将其分发到多个后端服务器上,以确保这些服务器能够平衡地处理请求
  • 负载均衡其实就是反向代理服务器

例如:一家公司的服务器不止一台,会把一台服务器充当反向代理服务器(入口服务器),当大量的请求到来时,反向代理服务器通过一些策略和算法,均匀这把请求打到每一台服务器上(负载均衡)
在这里插入图片描述

正反代理服务器的异同

作用对象:

  • 正向代理:代理的对象是客户端,客户端通过正向代理来访问其他服务器或资源
  • 反向代理:代理的对象是服务器,客户端通过反向代理来访问后端的服务器或资源

使用场景:

  • 正向代理:常见于绕过网络限制、访问国外内容、保护客户端隐私等场景
  • 反向代理:常见于负载均衡、安全防护、内容加速、隐藏真实服务器等场景。

部署位置:

  • 正向代理:通常部署在客户端所在的网络中,客户端需要配置代理服务器的地址和端口
  • 反向代理:通常部署在目标服务器所在的网络中,客户端并不直接感知反向代理的存在

4.3 NAT和代理服务器的区别

路由器往往都具备NAT的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程

代理服务器看起来和NAT有一点像,客户端向代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端

NAT和代理服务器的区别

  • 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题,而代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,游戏加速器等
  • 从底层实现上讲,NAT一般工作在网络层,直接对IP地址进行替换,而代理服务器工作在应用层
  • 从使用范围上讲,NAT一般在局域网的出口部署,而代理服务器可以在局域网代理,也可以在广域网代理,也可以跨网代理
  • 从部署位置上看,NAT一般集成在防火墙、路由器等硬件设备上,而代理服务器则是一个软件程序(比如Nginx和Apache),需要部署在服务器上

以上就是所有内容

「 作者 」 枫叶先生
「 更新 」 2024.1.1
「 声明 」 余之才疏学浅,故所撰文疏漏难免,
          或有谬误或不准确之处,敬请读者批评指正。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小型企业网设计-课设实验-爆款实验

可以按照我的配置依次配置&#xff0c;成品打包文件&#xff0c;请&#xff1a;Ensp888 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]# [Huawei]sysname SW5 [SW5]# [SW5]vlan batch…

(C++) 拷贝构造函数

目录 一、基本介绍 二、为什么需要拷贝构造函数 三、拷贝构造函数 四、传参时的问题 五、完整代码 一、基本介绍 拷贝构造函数是C中一个特殊的构造函数&#xff0c;用于创建一个类的对象作为另一个同类对象的副本。当一个对象以值的形式被传递给函数、从函数返回&#xff0…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈

深入浅出图解C#堆与栈 C# HeapingVS Stacking第一节 理解堆与栈 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.csdn.n…

Avalonia学习(十六)-Mapsui

今天开始继续Avalonia练习。 本节&#xff1a;Mapsui 1.引入 Mapsui.Avalonia 2.项目引入 前台代码 <Window xmlns"https://github.com/avaloniaui"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:vm"using:MapsuiAvalonia.Vi…

C语言之分支与循环【附6个练习】

文章目录 前言一、什么是语句&#xff1f;1.1 表达式语句1.2 函数调用语句1.3 控制语句1.4 复合语句1.5 空语句 二、分支语句&#xff08;选择结构&#xff09;2.1 if语句2.1.1 悬空else2.1.2 练习&#xff08;1. 判断一个数是否为奇数 2. 输出1-100之间的奇数&#xff09; 2.2…

postman win7 低版本 postman7.0.9win64 postman7.0.9win32

百度网盘&#xff1a; postman7.0.9win64&#xff1a; 链接: https://pan.baidu.com/s/18ck9tI0r9Pqoz36MOwwnnQ 提取码: rkf7 postman7.0.9win32&#xff1a; 链接: https://pan.baidu.com/s/1HrpGPrgvVzyAcjdHuwVOpA 提取码: ke5k win7系统安装postman&#xff0c;可能会…

侯捷C++ 2.0 新特性

关键字 nullptr and std::nullptr_t auto 一致性初始化&#xff1a;Uniform Initialization 11之前&#xff0c;初始化方法包括&#xff1a;小括号、大括号、赋值号&#xff0c;这让人困惑。基于这个原因&#xff0c;给他来个统一&#xff0c;即&#xff0c;任何初始化都能够…

实验六——cache模拟器实验

前言 本次实验的主要目的是熟悉cache的原理。加深对cache的映像规则、替换方法、cache命中与缺失的理解。通过实验对比分析映像规则对cache性能的影响。 实验内容一&#xff1a;熟悉模拟程序 阅读给出的cache模拟程序&#xff08;cachesimulator.cpp&#xff09;&#xff0c;…

空间域图像增强之直方图均衡的python代码实现——冈萨雷斯数字图像处理

原理 直方图&#xff1a; 图像的直方图是一个图像中像素强度值分布的图表。 对于灰度图像&#xff0c;直方图展示了每个灰度级出现的频率。 直方图均衡步骤&#xff1a; 计算累积分布函数&#xff08;CDF&#xff09;&#xff1a;首先&#xff0c;计算图像的直方图&#xff0…

oracle物化视图

物化视图定义 视图是一个虚拟表&#xff08;也可以认为是一条语句&#xff09;&#xff0c;基于它创建时指定的查询语句返回的结果集&#xff0c;每次访问它都会导致这个查询语句被执行一次&#xff0c;为了避免每次访问都执行这个查询&#xff0c;可以将这个查询结果集存储到…

C语言与人生:数组交换和二分查找

少年们&#xff0c;大家好。我是博主那一脸阳光&#xff0c;今天和分享数组交换和二分查找。 前言&#xff1a;探索C语言中的数组交换操作与二分查找算法 在计算机编程领域&#xff0c;特别是以C语言为代表的低级编程语言中&#xff0c;对数据结构的理解和熟练运用是至关重要的…

C# 如何读取Excel文件

当处理Excel文件时&#xff0c;从中读取数据是一个常见的需求。通过读取Excel数据&#xff0c;可以获取电子表格中包含的信息&#xff0c;并在其他应用程序或编程环境中使用这些数据进行进一步的处理和分析。本文将分享一个使用免费库来实现C#中读取Excel数据的方法。具体如下&…

Android 跨进程之间通信(IPC)方式之BroadcastReceiver

Android 跨进程之间通信 Android 跨进程之间通信(IPC)方式之BroadcastReceiverAndroid 跨进程之间通信(IPC)方式之ContentProvider 文章目录 Android 跨进程之间通信前言一、关于系统广播二、如何利用BroadcastReceiver跨进程通信1.创建广播接收器2.清单文件中声明注册3.发送广…

08-接口文档管理工具-项目集成knife4j__ev

2、knife4j快速入门 2.1 knife4j介绍 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍! gitee地址&#xff1a;knife4j: Knife4j是一个集Swagger2 和 OpenAPI3为一体的增…

目标检测-Two Stage-Mask RCNN

文章目录 前言一、Mask RCNN的网络结构和流程二、Mask RCNN的创新点总结 前言 前文目标检测-Two Stage-Faster RCNN提到了Faster RCNN主要缺点是&#xff1a; ROI Pooling有两次量化操作&#xff0c;会引入误差影响精度 Mask RCNN针对这一缺点做了改进&#xff0c;此外Mask …

功能真强大!5个令人惊叹的 Jupyter 黑科技

Jupyter 是一种功能强大的交互式计算环境&#xff0c;被广泛应用于数据分析、机器学习、科学计算等领域。 除了常见的基本功能外&#xff0c;Jupyter还隐藏着许多令人惊叹的黑科技&#xff0c;这些功能可以帮助用户更高效地完成工作&#xff0c;提升工作体验。 在本文中&…

.NET Core中灵活使用反射

前言 前段时间有朋友问道一个这样的问题&#xff0c;.NET Core中如何通过Attribute的元数据信息来调用标记的对应方法。我第一时间想到的就是通过C#反射获取带有Custom Attribute标记的类&#xff0c;然后通过依赖注入&#xff08;DI&#xff09;的方式获取对应服务的方法并通…

Elasticsearch8集群部署

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 本文记录在3台服务器上离线搭建es8.7.1版本集群。 1. 修改系统配置 1.1 hosts配置 在三台es节点服务器加入hostname解析&…

电脑系统报错msvcr100.dll丢失的解决方法

本文将详细介绍msvcr100.dll的作用、丢失原因以及解决方法。 一、msvcr100.dll是什么文件&#xff1f; msvcr100.dll是Microsoft Visual C 2010 Redistributable Package的一部分&#xff0c;它是运行许多Windows应用程序所必需的动态链接库文件。它包含了C运行时库&#xff…

AI时代系列丛书(由北京大学出版社出版)

前言 在AI时代&#xff0c;程序员面临着新的机遇和挑战。为了适应这个快速发展的时代&#xff0c;掌握新技能并采取相应的应对策略是至关重要的。 对于办公人员或程序员来说&#xff0c;利用AI可以提高工作效率。例如&#xff0c;使用AI助手可以帮助自动化日常的重复性工作&a…