Bootstrap

【网络】NDS协议 | ICMP协议 | NAT技术

> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:了解什么是NDS协议 | ICMP协议 | NAT技术。

> 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!

> 专栏选自:网络

> 望小伙伴们点赞👍收藏✨加关注哟💕💕

​​

一、前言

前面我们已经学习了网络的基础知识,对网络的基本框架已有认识,算是初步认识到网络了,如果上期我们的学习网络是步入基础知识,那么这次学习的板块就是基础知识的实践,我们今天的板块是学习网络重要之一,学习完这个板块对虚幻的网络就不再迷茫!!!

主体

学习【网络】NDS协议 | ICMP协议 | NAT技术咱们按照下面的图解:

2.1 DNS协议

概念:

DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。

2.1.1 DNS背景

背景知识:

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

  • 如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。
  • 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。
  • 当用户通过域名访问互联网服务时,会先通过域名在本地的hosts文件中找到其对应的IP地址,然后再用这个IP地址去访问对应的服务。

由于过于复杂,于是产生了 DNS 系统:

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

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

通过 cat /etc/hosts 可以查看hosts文件当中的内容:

2.1.2 域名简介

域名是用来标识主机名称和主机所属的组织机构的一种分层结构的名称,例如:www.baidu.com

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

2.1.3 域名解析过程

在浏览器中输入url后,如果url当中包含域名,则需要进行域名解析:

  • 首先会在浏览器的DNS缓存中去查询是否有对应的记录,如果查询到记录就可以直接得到对应的IP地址,完成解析。
  • 如果在浏览器的DNS缓存中没有找到,就会去查询操作系统中的DNS缓存,如果查询到对应的IP地址则完成解析。
  • 如果在操作系统的DNS缓存中没有找到,就会去查找本地的hosts文件,如果查询到对应的IP地址则完成解析。
  • 如果在本地的hosts文件中也没有找到,就会去本地DNS服务器中查找。本地DNS服务器IP地址一般由本地网络服务商提供,如电信、移动等公司,一般通过DHCP自动分配。目前使用的比较多的是谷歌提供的公用NDS 8.8.8.8 和 国内公用DNS 114.114.114.114。如果在本地DNS服务器中有对应域名的缓存,则直接返回对应的IP地址,完成解析。
  • 如果本地DNS服务器中仍然没有找到,那么本地DNS服务器就会拿着域名去根DNS服务器中询问,根DNS服务器会告诉本地DNS顶级域名服务器的IP地址。
  • 本地DNS拿到顶级域名服务器的IP地址后,就会拿着域名去找顶级DNS服务器,顶级域名服务器会告诉本地DNS权威域名服务器的IP地址。
  • 本地DNS服务器拿着域名去权威域名服务器中,查询域名对应的IP地址,最终将该域名对应的IP地址返回给浏览器,此时整个域名解析过程就完成了。

2.1.4 使用dig工具分析DNS过程

我们可以使用dig工具来查看域名解析的过程,例如查看百度域名 www.baidu.com 的解析过程:

结果解释:

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

2.2 ICMP协议

概念:

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

ICMP协议的定位:

在TCP/IP四层模型中,网络协议栈自顶向下分为应用层、传输层、网络层和数据链路层。

其中应用层最典型的协议有HTTP、HTTPS和DNS等,传输层最典型的协议有TCP和UDP,网络层最典型的协议就是IP,数据链路层最典型的协议就是MAC帧协议,但实际网络层还有两层协议叫做ICMP和IGMP。

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

  • 也就是说,IP的上层协议不一定就直接是传输层的协议,IP的上层协议有可能也属于网络层的协议,但就是位于IP的上层。
  • 与之类似的,数据链路层当中的ARP协议和RARP协议,这两个协议虽然与MAC帧协议都属于数据链路层,但这两个协议属于MAC帧的上层协议。

2.2.1 ICMP功能

ICMP的主要功能包括:

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

2.2.2 ICMP协议格式

ICMP协议格式如下:

ICMP大概分为两类报文:

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

ICMP包常见类型如下:

2.2.3 ping命令

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

例如,使用 ping www.baidu.com 命令,测试本地主机与百度服务器之间的通信信道是否正常。

注意:

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

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

  • 这里我们千万要注意,ping命令是基于网络层的ICMP协议,而端口号是属于传输层的内容,在ICMP协议中根本就不关心端口号这样的信息。
  • 因此,ping命令实际是绕过了传输层的,在Linux当中实际也有绕过传输层的一套网络编程接口,叫做原生套接字。

tranceroute命令:

traceroute 是一个用于跟踪数据包在网络中的路径的命令行工具,其也是基于 ICMP 协议实现的。traceroute 显示每个数据包的往返时间(Round-Trip Time,RTT),以及经过的中间节点的IP地址,帮助用户了解数据包从源主机到目标主机的网络路径。

以下是 traceroute 命令的用法和选项:

traceroute [options] <host>
  • -n:以 IP 地址而不是主机名显示路由器的信息。
  • -q :每个 TTL 值发送的查询数量,默认为 3 个。
  • -m <max_ttl>:设置最大 TTL 值,即查询的最大跳数。
  • -w :设置每个查询的超时时间(毫秒)。

2.3 NAT技术

概念:

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

NAT技术背景:

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

  • 在进行对外通信时,NAT能够将私有IP经过一系列替换操作最终转化为全局IP,也就是说,NAT是一种将私有IP和全局IP互相转化的技术方法。
  • 装有NAT软件的路由器叫做NAT路由器,所有使用私有IP的主机在和外界通信时,都要在NAT路由器上将其私有IP转换成全局IP。
  • 很多学校、家庭、公司内部每个终端设置的IP都是私有IP,而只有在路由器或必要的服务器上设置全局IP。
  • 全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是完全不影响的。

2.3.1 NAT IP转换过程

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

数据包从局域网到公网的过程:

客户端A向服务器发起数据请求的过程中,数据包中IP地址的转换过程如下:

  • 刚开始,该数据包当中的源IP地址就是服务器的公网IP地址。
  • 当数据包经过NAT路由器时,路由器会将该数据包的源IP地址替换成自己的WAN口IP地址,此时该数据包的源IP和目的IP地址就是公网IP了。
  • 该数据包在互联网中经过各种路由器转发,最终到达服务器主机。

服务器收到主机A的数据请求并处理后,就会对主机A发来的请求进行响应。

数据包从公网到局域网的过程:

服务器向主机A进行响应的过程中,数据包中IP地址的转换过程如下:

  • 刚开始,该数据包当中的源IP地址就是服务器的公网IP地址,目的IP地址就是路由器的WAN口IP地址。
  • 数据包在互联网中经过各种路由转发,到达主机A所在的局域网的NAT路由器,此时路由器会将该数据包的目的IP地址替换成主机A的私有IP地址。
  • 最终路由器就会将该数据转发给局域网中的主机A。

需要注意的是,因为主机A向服务器发起数据请求时,该数据包当中的源IP地址被替换成了NAT路由器的WAN口IP地址,相当于是该路由器替代主机A向服务器发起了数据请求,因此服务器发出的响应数据包的目的IP地址应该是NAT路由器的WAN口IP地址。

2.3.2 NAPT

地址转换表:

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

那NAT路由器是如何判断,应该从外网收到的响应数据包转发给局域网中的哪一台主机呢:

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

NAPT:

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

  • 当局域网中的主机向外网发送数据时,路由器会将该数据包的源IP地址替换为自己的WAN口IP地址,并建立该主机私有IP与其对应访问的公网IP之间的映射关系。
  • 但如果局域网中的多台主机同时访问同一个外网服务,当路由器收到外网发来的响应数据时,路由器无法判断该响应数据应该转发给局域网中的哪台主机,因为该局域网中所有的主机的数据包都由路由器替代发送了,因此发来的响应数据包的目的IP地址都是路由器的WAN口IP地址。
  • 于是NAPT在建立转换表的映射关系时,除了建立局域网私有IP与其对应的访问的公网IP之间的映射关系外,还会加上一个由NAT路由器选定的端口号。
  • 此时当局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+Port的方式来区分发给不同主机的数据包。

谈谈路由器:

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

  • NAT路由器在进行数据转发时,不仅有能力替换数据包的源和目的IP地址,而且在必要的情况下还可能会替换数据包的源和目的端口号,而端口号实际是传输层的概念。
  • 为了对IP地址进行动态管理,大部分路由器都带有DHCP功能,而DHCP实际是应用层的一个协议。

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

2.3.3 NAT技术的缺陷

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

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

2.3.4 NAT和代理服务器

概念:

代理服务器(Proxy Server) 的功能就是代理网络用户去取得网络信息,代理服务器又分为正向代理和反向代理。

正向代理:

概念:

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

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

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

正向代理的好处:

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

反向代理:

概念:

  • 反向代理,也是一个位于客户端和目标服务器之间的服务器,对于客户端而言,反向代理服务器就相当于目标服务器,用户不需要知道目标服务器的地址,用户只需要访问反向代理服务器就可以获得目标服务器提供的服务。
  • 反向代理,也是一个位于客户端和目标服务器之间的服务器,客户端直接向反向代理服务器发起数据请求,然后再由反向代理服务器将客户端的数据请求转发给真正的目标服务器进行处理,数据处理完毕后反向代理服务器再将数据结果返回给客户端。

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

  • 百度内部实际并不是只有一台服务器,但不同地区的人们都可以通过访问www.baidu.com享受到百度提供的服务,实际我们访问的就是百度的反向代理服务器。
  • 当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据处理,然后再将数据处理的结果返回给客户端。

反向代理的好处:

  • 反向代理可以起到负载均衡的作用。比如不设置反向代理服务器,那么用户在访问百度时,就会随机访问到百度内部的某台服务器,此时就可能导致某些服务器压力太大,而某些服务器却处于闲置状态。而设置了反向代理服务器后,我们就能够通过某些方法让用户的数据请求较为平均的落到每台服务器上。
  • 反向代理还能起到安全防护的作用。有了方向代理服务器后,我们不需要直接将提供服务的服务器对应的信息暴露出去,此外,当由非法请求发送到反向代理服务器时,反向代理服务器就相当于一层软件屏障,可以在反向代理服务器当中部署一些防护措施,让这些非法请求在反向代理服务器这里就被过滤掉,而不会影响内部实际提供服务的服务器。

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

正向代理和反向代理的异同:

正向代理和反向代理的相同点:

  • 正向代理服务器和反向代理服务器都是位于客户端和服务器之间的。
  • 正向代理服务器和反向代理服务器的主要工作,都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端。

正向代理和反向代理的不同点:

  • 正向代理是客户端的代理,帮助客户端访问其无法访问的服务器资源的,而反向代理则是服务器的代理,帮助服务器做负载均衡、安全防护等工作的。
  • 正向代理一般是客户端架设的,比如公司的正向代理服务器是公司作为客户端架设的,而反向代理一般是服务端架设的,比如百度的反向代理服务器是百度作为服务端架设的。
  • 正向代理中,服务器不知道真正的客户端到底是谁,服务器认为正向代理服务器就是真实的客户端,而反向代理中,客户端不知道真正的服务器是谁,客户端认为反向代理服务器就是真实的服务器。

NAT和代理服务器的区别:

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

2.4 网络协议总结

应用层:

  • 应用层的作用:负责应用程序间沟通,完成一系列业务处理所需服务。
  • 能够根据自己的需求,设计对应的应用层协议。
  • 了解HTTP协议。
  • 理解DNS的原理和工作流程。

传输层:

  • 传输层的作用:负责为两个网络通信进程之间的通信提供服务,更多的是为数据的传输提供一些策略。
  • 理解端口号的概念。
  • 认识TCP协议,理解TCP协议的可靠性,理解TCP协议的状态转化。
  • 掌握TCP的连接管理、确认应答、超时重传、滑动窗口、流量控制、拥塞控制、延迟应答、捎带应答特性。
  • 理解TCP面向字节流,理解粘包问题和解决方案。
  • 能够基于UDP实现可靠传输。
  • 理解MTU对UDP/TCP的影响。

网络层:

  • 网络层的作用:在复杂的网络环境中确定一条合适的路径。
  • 理解IP地址,理解IP地址和MAC地址的区别。
  • 理解IP协议格式。
  • 理解如何解决IP数目不足的问题,掌握网段划分的两种方案,理解私有IP和公网IP。
  • 理解网络层的IP地址路由过程,理解一个数据包如何跨网段到达最终目的地。
  • 理解IP数据包分片的原因。
  • 了解ICMP协议。
  • 了解NAT设备的工作原理。

数据链路层:

  • 数据链路层的作用:负责局域网内两个设备之间的数据传递。
  • 理解以太网通信原理
  • 以太网帧格式。
  • 理解MAC地址。
  • 理解ARP协议。
  • 理解MTU。

三、结束语 

       今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

;