【网络】DNS协议、ICMP协议、NAT技术

DNS协议、ICMP协议、NAT技术

  • 一、DNS协议
    • 1、产生背景
    • 2、域名简介
    • 3、域名解析的工作流程
    • 4、使用dig工具分析DNS过程
  • 二、ICMP协议
    • 1、ICMP介绍
    • 2、ICMP协议格式
    • 3、ping命令
    • 4、traceroute命令
  • 三、NAT技术
    • 1、NAT技术背景
    • 2、NAT IP转换过程
    • 3、地址转换表
    • 4、NAPT技术
    • 5、重新理解路由器
    • 6、NAT技术的缺陷
  • 四、NAT和代理服务器
    • 1、正向代理
    • 2、反向代理

一、DNS协议

DNS(Domain Name System,域名系统)协议,是一个的应用层协议,其传输依赖于UDP。

1、产生背景

TCP/IP中通过IP地址和端口号的方式,来确定网络中一个主机上的一个程序。但IP地址是一长串数字,并不便于人们记忆,于是人们发明了一种叫做主机名的东西,并用hosts文件夹来描述主机名和IP地址之间的对应关系。

在这里插入图片描述

最初,通过互连网信息中心(SRI-NIC)来管理这个hosts文件的。

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

这样就太麻烦了,于是产生了DNS系统。

  • 一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系。

  • 如果新计算机接入网络,将这个信息注册到数据库中。

  • 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址。

至今,我们的计算机上仍然保留了hosts文件。在域名解析的过程中仍然会优先查找hosts文件的内容。

cat /etc/hosts

在这里插入图片描述

2、域名简介

DNS 中的域名都是用句点来分隔的,比如 www.baidu.com,这里的句点代表了不同层次之间的界限。

在域名中,越靠右的位置表示其层级越高

  • com:一级域名,表示这是一个工商企业域名。同级的还有.net(网络提供商)和.org(开源组织或非盈利组织)等。
  • baidu:二级域名,一般对应的就是公司名。
  • www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。

根域是在最顶层,它的下一层就是顶级域,再下面是二级域名,所以域名的层级关系类似一个树状结构:

  • 根 DNS 服务器
  • 顶级域 DNS 服务器(类似com)
  • 权威 DNS 服务器(类似server.com)

在这里插入图片描述

根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。

因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。

3、域名解析的工作流程

浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件hosts,如果还是没有,就会向本地DNS 服务器进行查询,查询的过程如下:

  • 本地DNS服务器IP地址一般由本地网络服务商提供,如电信、移动等公司,一般通过DHCP自动分配。目前使用的比较多的是谷歌提供的公用NDS 8.8.8.8和国内公用DNS 114.114.114.114。如果在本地DNS服务器中有对应域名的缓存,则直接返回对应的IP地址,完成解析。

  • 如果本地DNS服务器中仍然没有找到,那么本地DNS服务器就会拿着域名去根DNS服务器中询问,根 DNS 收到来自本地 DNS 的请求后,会检查请求的一级域名,然后根DNS服务器会告诉本地DNS服务器其对应一级域名的的顶级域 DNS 服务器的地址。

  • 本地DNS服务器拿到顶级域 DNS 服务器的地址后,就会拿着域名去找顶级DNS服务器,顶级域名服务器会告诉本地DNS服务器其对应的权威DNS服务器的IP地址。

  • 本地DNS服务器拿着域名去权威DNS服务器中,查询域名对应的IP地址,最终将该域名对应的IP地址返回给浏览器,此时整个域名解析过程就完成了。

总结一下其过程:

在这里插入图片描述

4、使用dig工具分析DNS过程

安装 dig 工具

yum install bind-utils

之后就可以使用 dig 指令查看域名解析过程了。

在这里插入图片描述

结果说明:

  • 开头位置是dig工具的版本号。
  • 第二部分是服务器返回的详情,其中status参数为NOERROR表示查询成功。
  • QUESTION SECTION表示待查询的域名。
  • ANSWER SECTION表示查询的结果,首先www.baidu.com被查询成了www.a.shifen.com,而最终www.a.shifen.com被查询成了两个具体的IP地址。
  • 最下面是一些结果统计,包含查询时间和DNS服务器的地址等。

二、ICMP协议

1、ICMP介绍

ICMP(Internet Control Message Protoco)Internet控制报文协议,是一个网络层协议,用于在IP主机、路由器之间传递控制信息。

一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通,但是IP协议并不提供可靠传输, 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因,因此这种情况下就要使用ICMP协议来保证进行能够进行网络相关功能的测试。

ICMP和IP协议虽然都属于网络层的协议,但ICMP协议属于IP的上层协议。

在这里插入图片描述

ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。

在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知

ICMP可以让应用层绕过传输层,直接使用ICMP进行通信,利用这个特性就可以在应用层编写一些网络测试工具来调试网络的相关问题,ping命令就是基于ICMP的。

需要注意的一点是:ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要使用ICMPv6。

在这里插入图片描述

进行网络连通性测试时,当发送的数据包到达主机B所在局域网的入口路由器时,入口路由器为了获得主机B的MAC地址,于是会向主机B发送ARP请求包,但由于主机B已经离线了,因此路由器在多次发送ARP请求包而得不到响应后,就会返回一个ICMP Destination Unreachable的包给主机A,此时主机A就知道自己发送的数据无法到达主机B。

2、ICMP协议格式

ICMP协议格式如下:

在这里插入图片描述

ICMP大概分为两类报文:

  • 一类是通知出错原因
  • 一类是用于诊断查询

ICMP包常见类型如下:

类型内容
0回送应答(Echo Reply)
3目标不可达(Destination Unreachable)
4原点抑制(Source Quench)
5重定向或改变路由(Redirect)
8回送请求(Echo Request)
9路由器公告(Router Advertisement)
10路由器请求(Router Solicitation)
11超时(Time Exceeded)
17地址子网请求(Address Mask Request)
18地址子网应答(Address Mask Reply)

3、ping命令

ping命令的功能是用于测试主机间网络连通性,发送出基于ICMP传输协议的数据包,要求对方主机予以回复,若对方主机的网络功能没有问题且防火墙放行流量,则就会回复该信息,我们也就可得知对方主机系统在线并运行正常了。

在这里插入图片描述

  • 注意, 此处 ping 的是域名, 而不是url, 一个域名可以通过DNS解析成IP地址。
  • ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期)。
  • ping命令会先发送一个 ICMP Echo Request给对端;
  • 对端接收到之后, 会返回一个ICMP Echo Reply;

在这里插入图片描述

一个值得注意的坑

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

相信你一定回答不上啦,因为ping命令基于ICMP, 是在网络层, 而端口号是传输层的内容, 在ICMP中根本就不关注端口号这样的信息,所以ping命令没有的端口号!

4、traceroute命令

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

在这里插入图片描述

原理简述:

  • traceroute命令底层实际是通过增加存活时间(TTL)值来实现的。
  • 因为每当数据包经过一个路由器,其TTL值就会减1,当TTL值减为0时对应路由设备就会将该数据包丢弃,并传送一个ICMP TTL数据包给发送主机。
  • 因此traceroute命令底层可以发出多个数据包,并给这些数据包设置不同的TTL值,最后该主机就能够得到一连串的数据包路径。

三、NAT技术

NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

1、NAT技术背景

在IPv4协议中,IP地址数量不足是一个大问题,而NAT技术就是当前解决IP地址不够用的主要手段,是路由器的一个重要功能。

  • 在进行对外通信时,NAT能够将私有IP经过一系列替换操作最终转为全局IP,也就是说,NAT是一种将私有IP和全局IP相互转化的技术方法。
  • 装有NAT软件的路由器叫做NAT路由器,所有使用私有IP的主机在和外界通信时,都要在NAT路由器上将其私有IP转换成全局IP。

很多学校、家庭、公司内部每个终端设置的IP都是私有IP,而只在路由器或必要的服务器上设置全局IP。

全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是完全不影响的。

2、NAT IP转换过程

  • 首先路由器是是至少有两个IP的,一个LAN口IP对内网进行连接,是私有IP,另外一个是WAN口IP,也可以是内网IP,但这里我们先假设是公网IP。

  • 当内网的主机经过路由器向外发送数据时,会由路由器将其源IP替换为WAN口IP。

假设某个局域网当中有A、B、C三台主机,在公网当中有一台服务器,以主机A访问公网中的这台服务器为例,我们来看看数据包在传输过程中IP地址的转换过程。

在这里插入图片描述

  • NAT路由器将报文的源地址从10.0.0.10替换成公网的IP 202.244.174.37,然后就可以以公网IP的形式对外访问公网当中的服务器了,相当于是该路由器代替主机A向服务器发起了数据请求。

  • 当服务器进行响应时,由于请求报文中是路由器的公网IP,自然是响应给路由器,当路由器收到外部的数据时, 又会把响应报文的目标IP从202.244.174.37替换回10.0.0.10,然后发送给内网中对应的主机。

可以看出我们只需要在WAN口处配置一个公网IP,就能够让一个大的局域网内的所有内网IP的主机都能够进行访问公网,这极大的解决了IP地址不足的问题。

3、地址转换表

  • 当局域网当中的主机要访问外网时,NAT路由器会将这些数据包的源IP地址替换成自己的WAN口IP地址。
  • 当外网发来响应数据时,NAT路由器又会将响应数据包的目的IP地址替换成局域网中对应主机的IP地址。

为了维护好上面的关系,路由器内部自动维护了一个地址转换表。

  • 局域网中的主机第一次向外网发起数据请求时,就会生成表中的映射关系。
  • 比如在TCP建立连接时,会建立对应的映射关系,在TCP断开连接后,就会删除对应的映射关系。

在刚才的例子中,主机A第一次向服务器发起数据请求时,路由器中就会建立以下映射关系。

在这里插入图片描述

但如果转换表中维护的只是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系,那么就会出现某些问题。

比如:局域网中的主机A和主机B同时都在访问该服务器,那么此时转换表中就会建立如下两对映射关系:

在这里插入图片描述

此时这张转换表只能保证从左到右的唯一性,而不能保证从右到左的唯一性,当服务器发来响应数据时,该数据包中的目的IP地址都是路由器的WAN口IP,此时NAT路由器就无法判断该数据包应该转发给主机A还是主机B,此时就需要用到NAPT技术。

4、NAPT技术

NAPT(Network Address Port Translation,网络地址端口转换),可以将多个内部地址映射为一个合法公网地址。

因为如果局域网中的多台主机同时访问同一个外网服务,当路由器收到外网发来的响应数据时,路由器无法判断该响应数据应该转发给局域网中的哪台主机,因为该局域网中所有主机的数据包都由路由器代替发送了,因此发来的响应数据包的目的IP地址都是路由器的WAN口IP地址。

  • 于是NAPT在建立转换表的映射关系时,除了建立局域网中私有IP与其对应访问的公网IP之间的映射关系外,还会加上一个由NAT路由器选定的端口号。

  • 此时当局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+Port的方式来区分发给不同主机的数据包。

例如局域网中的主机A和主机B都在访问同一个服务器,并且它们访问服务器时采用的端口号都是1025。

  • 假设主机A发送的数据包先到达路由器,此时路由器将数据包的源IP地址替换成自己的WAN口IP地址,由于路由器用于访问该服务器的1025号端口没有被使用,因此该数据包的源端口号可以不变。

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

此时转换表中就会建立如下两对映射关系:

在这里插入图片描述

此时这张转换表既能保证从左到右的唯一性,也能保证从右到左的唯一性。

  • 当服务器发来的响应数据到达路由器时,虽然服务器发给主机A和主机B的数据包对应的目的IP地址是一样的。

  • 但路由器是用自己的1025号端口代替主机A进行数据请求的,而用的是1026号端口代替主机B进行数据请求的。

  • 因此现在路由器可以继续根据数据包的源端口号,来判断应该将该数据包转发给主机A还是主机B,进行对数据包中的目的IP地址和目的端口号进行替换,然后转发给局域网内对应的主机。

问:对于NAPT的转换表维护目的IP和端口是否是多余的?

对与NAPT转换表,如果我们将目的IP+port去掉,我们发现从内网到外网,从外网到内网也是可以正常转换的,但是我们的路由器还是维护了目的IP+port,这是因为维护目标IP+port字段能够保证我们内网的安全性!

在这里插入图片描述

例如我们的主机A向服务器B发起了一个请求,构建了上图中的10.0.0.10:1025202.244.174.37.1025映射关系,以后主机A与服务器就可以通过路由器进行通信了。

但是此时有一个黑客知道了NATP转换表中的信息,于是就可以用任意一台主机向主机A所在的内网的路由器的1025号端口发送数据,于是路由器就会无脑的将数据转给主机A,于是主机A就会收到奇怪的数据,而有了目的IP + port,路由器就能够判断这个主机是不是已经正常建立通信的主机。

5、重新理解路由器

路由器是工作在网络层的一个设备,负载将数据包从一个网络转发到另一个网络,但不能狭义的认为路由器只能工作在网络层。

  • NAT路由器在进行数据转发时,不仅有能力替换数据包的源IP和目的IP地址,而且在必要的情况下还可能会替换数据包的源端口和目的端口号,而端口号实际是传输层的概念。

  • 为了对IP地址进行动态管理,大部分路由器都带有DHCP功能,而DHCP实际是应用层的一个协议。

因此现在的路由器其实并不仅仅提供网络层相关的服务,网络协议栈中的各层路由器可能都有涉及。

6、NAT技术的缺陷

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

  • 无法从NAT外部向内部服务器建立连接,因为 NAPT 转换表没有转换记录。

  • 转换表的生成和销毁都需要额外开销。

  • 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。

NAT 穿透技术(了解)

NAT 穿越技术拥有这样的功能,它能够让网络应用程序主动发现自己位于 NAT 设备之后,并且会主动获得 NAT 设备的公有 IP,并为自己建立端口映射条目,注意这些都是 NAT设备后的应用程序自动完成的。

也就是说,在 NAT 穿透技术中,NAT设备后的应用程序处于主动地位,它已经明确地知道 NAT 设备要修改它外发的数据包,于是它主动配合 NAT 设备的操作,主动地建立好映射,这样就不像以前由 NAT 设备来建立映射了。

说人话,就是客户端主动从 NAT 设备获取公有 IP 地址,然后自己建立端口映射条目,然后用这个条目对外通信,就不需要 NAT 设备来进行转换了。

四、NAT和代理服务器

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

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

那么NAT和代理服务器的区别有哪些呢?

  • 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器。

  • 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换,代理服务器往往工作在应用层。

  • 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。

  • 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.

代理服务器是一种应用比较广的技术:

  • 翻墙: 广域网中的代理.
  • 负载均衡: 局域网中的代理.

代理服务器又分为正向代理和反向代理:

  • 正向代理用于隐藏真实客户端。
  • 反向代理用于隐藏真实服务端。
  • 两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。

1、正向代理

正向代理,是一个位于客户端和目标服务器之间的服务器,客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端。

比如公司内部一般都会有自己的服务器,当我们使用公司内网上网时:

在这里插入图片描述

  • 我们对外网发起的数据请求,首先会转发到公司的这台服务器上,然后由公司的这台服务器代替你对外网进行访问。
  • 当公司的服务器收到对应外网的响应数据后,再由公司的这台服务器将数据转发给你。

正向代理的好处:

  • 正向代理最大的一个好处就是可以加速资源访问,比如公司中大量员工都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他人要访问该资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。

2、反向代理

反向代理,也是一个位于客户端和目标服务器之间的服务器,客户端直接向反向代理服务器发起数据请求,然后再由反向代理服务器将客户端的数据请求转发给真正的目标服务器进行处理,数据处理完毕后反向代理服务器再将数据结果返回给客户端,对于用户而言反向代理服务器就相当于目标服务器。

在这里插入图片描述

比如域名www.baidu.com对应的服务器实际就是一个反向代理服务器。

百度内部实际并不是只有一台服务器,但不同地区的人们都可以通过访问www.baidu.com享受到百度提供的服务,实际我们访问的就是百度的反向代理服务器。

当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据处理,然后再将数据处理的结果返回给客户端。

反向代理的好处:

  • 反向代理可以起到负载均衡的作用。
    比如不设置反向代理服务器,只使用一台服务器,那么当用户量很大时,单个百度服务器的扛不住这么大的流量的,有了反向代理以后,那么用户在访问百度时,我们就能够通过某些方法让用户的数据请求较为平均的落到每台服务器上,缓解服务器的压力。

  • 反向代理还能起到安全防护的作用。有了反向代理服务器后,我们不需要直接将提供服务的服务器对应的信息暴露出去,此外当由非法请求发送到反向代理服务器时,反向代理服务器就相当于一层软件屏障,可以在反向代理服务器当中部署一些防护措施,让这些非法请求在反向代理服务器这里就被过滤掉,而不会影响内部实际提供服务的服务器。

需要注意的是,代理服务器的主要工作只是对数据进行转发,因此代理服务器处理数据的压力不会特别大,并且代理服务器也可以有多个,因此不必担心代理服务器过载的情况。


关于负载均衡的一个现象:

不知你是否注意过:当我们我们每次使用ping命令访问百度时可能会得到不同的IP,这是为什么?

在这里插入图片描述

在这里插入图片描述

答案就是负载均衡,我们的请求被分配到了同一个服务的不同的服务器上面。


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

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

相关文章

2023年亚太杯数学建模A题——深度学习苹果图像识别(思路+模型+代码+成品)

Image Recognition for Fruit-Picking Robots 水果采摘机器人的图像识别功能 问题 1:计数苹果 根据附件 1 中提供的可收获苹果的图像数据集,提取图像特征,建立数学模型,计算每幅图像中的苹果数量,并绘制附件 1 中所有…

佳易王各行业收银管理系统软件,企业ERP管理软件,企业或个体定制开发软件以及软件教程资源下载总目录,持续更新,可关注收藏查阅

系统简介 1、佳易王软件功能实用、操作简单、软件绿色免安装,解压即可使用,软件已经内置数据库,不需再安装其他数据库文件。 2、佳易王软件,已经形成系列,上百款管理系统软件涵盖多个行业。 3、已为多个企业个体定制…

在 Go 中使用 Protocol Buffers

各位准备好了吗!这一次,我们将深入探讨 Protocol Buffers(protobuf)及其在数据序列化中的超能力所在。 介绍 Protocol Buffers,也被称为 protobuf,是由谷歌开发的一种语言无关的二进制序列化格式。其主要…

MySQL日期函数sysdate()与now()的区别,获取当前时间,日期相关函数

select sleep(2) as datetime union all select sysdate() -- sysdate() 返回的时间是当前的系统时间,而 now() 返回的是当前的会话时间。 union all select now() -- 等价于 localtime,localtime(),localtimestamp,localtimestamp(),current_timestamp,curre…

PyTorch-ReID重识别算法库与数据集资料汇总

Torchreid 是一个用于深度学习人员重新识别的库,用 PyTorch 编写,为我们的 ICCV’19 项目 Omni-Scale Feature Learning for Person Re-Identification 开发。 PyTorch-ReID的特点是 多GPU训练支持图像和视频 REID端到端培训和评估极其轻松地准备 Rei…

图书管理系统源码,图书管理系统开发,图书借阅系统源码三框架设计原理和说明

TuShuManger项目简介和创建 这里一共设计了6个项目,主要是借助三层架构思想分别设计了主要的三层,包括model实体层,Dal数据库操作层,Bll业务调用层,其他有公共使用项目common层,DButitly提取出来的数据库访问层,下面我们分别创建每个项目和开始搭建整个过程 TuShuManger…

nodejs+vue+python+PHP+微信小程序-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

在当今高度发达的信息中,信息管理改革已成为一种更加广泛和全面的趋势。为确保中国经济的持续发展,信息时代日益更新,书吧租阅管理系统仍在蓬勃发展。同时,随着信息社会的快速发展,各种管理系统面临着越来越多的数据需…

柑橘病害数据集(四类图像分类,没有打yolo标签)

1.文件夹分为训练集和测试集 在这个数据集中,有一类是新鲜柑橘,还有另外三种疾病,溃疡病、黑斑病和绿化病。 2.train文件夹 2.1.blackspot(黑斑病) 文件夹 206张照片 2.2.canker(溃疡病) 文…

STM32 配置中断常用库函数

单片机学习 目录 一、配置AFIO相关库函数 1.1函数GPIO_AFIODeInit 1.2函数GPIO_EventOutputConfig 1.3函数GPIO_EventOutputCmd 1.4函数GPIO_EXTILineConfig 二、配置EXTI相关库函数 2.1函数EXTI_DeInit 2.2函数EXTI_Init 2.3函数EXTI_StructInit 2.4函数 EXTI_Gener…

超越噪音,让音乐重获新生:iZotope RX 10音频降噪修复软件

在音乐制作或者音频处理的过程中,噪音往往是一个让人头痛的问题。无论是环境噪音,还是设备产生的噪音,都会对音频质量产生重大影响。而现在,我们有了iZotope RX 10,这款专业的音频降噪修复软件,可以将你从噪…

C# 使用NPOI操作Excel的工具类

写在前面 NPOI是POI项目的.NET迁移版本。POI是一个开源的Java 读写 Excel、Word 等微软Ole2组件文档的项目;使用NPOI可以在没有安装Office或者相应环境的机器上对Word或Excel文档进行读写操作。 NPOI类库中操作EXCEL有两个模块分别是: 1️.HSSF模块&a…

【UCAS自然语言处理作业二】训练FFN, RNN, Attention机制的语言模型,并计算测试集上的PPL

文章目录 前言前馈神经网络数据组织Dataset网络结构训练超参设置 RNN数据组织&Dataset网络结构训练超参设置 注意力网络数据组织&Dataset网络结构Attention部分完整模型 训练部分超参设置 结果与分析训练集Loss测试集PPL 前言 本次实验主要针对前馈神经网络&#xff0…

#define例题

我们已经学了#define的所有知识,让我们来看这道题,可不要又陷入陷阱 题目要求: #define N 4 #define Y(n) ((N2)*n) int main() {int z 2 * (N Y(5 1));printf("z%d\n", z);return 0; } 求这个z的值是多少? 我们直接…

机器学习算法——主成分分析(PCA)

目录 1. 主体思想2. 算法流程3. 代码实践 1. 主体思想 主成分分析(Principal Component Analysis)常用于实现数据降维,它通过线性变换将高维数据映射到低维空间,使得映射后的数据具有最大的方差。主成分可以理解成数据集中的特征…

Linux加强篇005-用户身份与文件权限

目录 前言 1. 用户身份与能力 2. 文件权限与归属 3. 文件的特殊权限 4. 文件的隐藏属性 5. 文件访问控制列表 6. su命令与sudo服务 前言 悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。舟遥遥以轻飏,风飘飘而吹衣。问征夫以…

ssm+vue的物资物流系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的物资物流系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体…

JDK源码系列:StringBuffer与StringBuilder对比

一、源码分析StringBuffer与StringBuilder的区别 1、StringBuffer是多线程安全的,StringBuilder是多线程不安全的 多线程安全指的是 多个线程同时对一个对象进行append 等操作,不会出现覆盖、丢失的情况。 看下StringBuffer是如何做到多线程安全的&#…

BART 并行成像压缩感知重建:联合重建

本文使用 variavle-density possion-disc 采样的多通道膝盖数据进行并行重建和压缩感知重建。 0 数据欠采样sampling pattern 1 计算ESPIRiT maps % A visualization of k-space dataknee = readcfl(data/knee); ksp_rss = bart(rss 8, knee);ksp_rss = squeeze(ksp_rss); figu…

基于单片机的肺活量检测系统(论文+源码)

1.系统设计 在基于单片机的肺活量检测系统中,在硬件上整个系统通过利用主控制器STC89C52单片机来实现对整个系统进行控制的功能,通过采用LCD1602实现实时液晶显示数据的功能,通过肺活量传感器XGZP6847ADC0832实现监测肺活量的工作&#xff0…

终端移动性管理

联系前面所学的知识我们知道,移动性管理主要分为两大类:空闲状态下的移动性管理、连接状态下的移动性管理。我们今天来详细了解他们的工作原理~ 目录 移动性管理分类 1、空闲状态下的移动性管理 2、连接状态下的移动性管理 手机选择天线的原则 4G天…