网络和Linux网络_12(网络其他协议和技术)DNS+ICMP+NAT/NAPT+代理服务器

发布时间:2023年12月18日

目录

1. 域名解析服务DNS

1.1 DNS和域名概念

1.2 域名解析过程

2. ICMP协议

2.1 ICMP协议格式(了解)

2.2 ping命令

3. NAT和NAPT

3.1?NAT概念

3.2 NATP概念

4.?代理服务器

4.1?代理服务器概念

4.2 NAT和代理服务器

5. 相关笔试选择题

答案及解析

本篇完。


前面几篇文章虽然讲介绍了整个网络通信的协议栈,也知道了完整的网络通信过程,但是还有几个坑没填,下面讲讲TCP/IP协议体系下的其它重要的协议和技术。

1. 域名解析服务DNS

1.1 DNS和域名概念

  • DNS是一整套从域名映射到IP地址的系统,也就是域名解析服务。
  • DNS服务的默认端口号是53。

在讲解网络通信的时候,都是说的IP地址,但是我们生活中访问一些网站时都用的域名,如www.baidu.com访问的就是百度的服务器。

在整个网络通信的协议栈中我们也并没有看到和域名有关的任何东西,因为网络通信的实现就是通过IP地址,并不是域名,域名也需要转换成IP地址,然后再进行通信。

对于使用网络的人来说,IP地址并不方便记忆,因为它是数字性的东西,所以将域名和IP地址映射起来,形成一一对应的关系,在使用的时候直接使用域名字符串就行。

最初,在每个人的主机上都存在一个hosts文件,该文件中存放的就是域名和IP地址的映射关系,如上图所示,主机名host-a对应着IP地址172.20.2.1。

这个hosts文件是由互联网中心(SRI-NIC)来管理的:

如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。

其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。

每当我们访问一个服务器输入域名的时候,浏览器都会自动去本地的hosts文件中查找对应的IP地址,然后再进行绑定创建套接字等发起网络请求。

但是这样的方式太麻烦了,需要定期去更新hosts文件,增加时还要修改再提交申请等等,所以就产生了DNS系统。

  • DNS:一个组织的系统管理机构,维护系统内的每个主机的IP和域名的对应关系,该机构就像CA机构一样,具有权威性。
  • 如果新计算机接入网络,需要将这个信息注册到数据库中。
  • 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址,返回给用户。

域名简介:

既然有了一个权威性的机构来提供域名解析服务,所以域名也有命名规则,以www.baidu.com为例:

  • com: 一级域名,表示这是一个企业域名,同级的还有net(网络提供商),org(非盈利组织)等。
  • baidu:二级域名,一般是公司名或者组织的名称。
  • www:只是一种习惯用法,不写也可以,直接使用baidu.com也可以访问百度的服务器。

1.2 域名解析过程

在Linux机器上使用yum -y install bind-utils指令可以安装一个dig工具,可以看到域名解析的过程。解析域名www.baidu.com的过程:

第一个绿色框中的内容是dig工具的版本号等信息。

第二个绿色框是域名解析的结果,NOERROR表示解析成功。

第三个绿色框是要解析的域名。

第四个绿色框是解析后的结果,在解析时,先将www.baidu.com解析成了www.a.shifen.com,然后再将www.a.shifen.com解析成了两个IP地址。

最后一个绿色框是解析后的结构统计,包括解析时长,DNS服务器的IP地址等信息。


在浏览器中输入域名www.baidu.com,可以直接访问到百度的首页,输入解析出来的IP地址112.80.248.76也可以直接访问到百度的首页,区别在于:

使用域名访问时,浏览器自动采用HTTPS协议。

使用IP地址访问时,浏览器自动采用HTTP协议。


2. ICMP协议

ICMP(Internet Control Message Protocol)网络控制报文协议。

如上图所示,主机A向主机B发送数据,数据经过多次局域网转发后到了路由器2,路由器2为了获取主机B的MAC地址,发送ARP请求,但是发送了多次都没有收到主机B的ARP应答。

此时路由器2会返回一个Destination Unreachable结果给主机A,主机A收到以后就知道了数据传送错误的原因。

这种返回错误的功能之前IP协议是没有的,如果发送不成功,传输层就会触发超时重传再次发送。这种方式对于使用者来说是没有问题的,但是对于网络管理员来说不够。

他们需要知道错误的原因从而进行修复,让网络通信正常,此时ICMP协议就派上了用场。

ICMP协议是一个网络层协议,它能确认IP数据包是否成功到达目标地址。如果没有发送成功,通知发送端IP数据包被丢弃的原因。

ICMP协议也是基于IP协议工作的,它并不是传输层的功能,所以我们把它归结为网络层协议。 ICMP只能搭配IPv4使用,如果是IPv6的情况,需要使用ICMPv6协议。


2.1 ICMP协议格式(了解)

ICMP报文大致分为两类,一类是通知出错原因,一类是用于诊断查询。

如上图表所示便是ICMP常见代码和代码所代表的内容。

2.2 ping命令

我们在验证一个机器的网络是否连接成功时,通常都会使用ping。

在Linux上ping www.baidu.com:

这是在Windows上ping的(直接搜索cmd然后输入ping www.baidu.com):

此处ping的是一个域名,而不是url(服务器web文件路径),域名可以通过DNS解析成IP地址。

ping命令不仅能验证网络的连通性,而且也会统计响应的时间和TTL(IP协议中的生存时间,也就是跳数)。

ping命令会先发送一个IMCP的Echo Request给对端,对端接收到之后会返回一个IMCP的Echo Reply。

ping命令是通过ICMP协议实现的,是网络层的协议,所以没有端口号,它绕过了应用层和传输层,直接从网络层开始。

3. NAT和NAPT

3.1?NAT概念

NAT(Network Address Translation)网络地址转换。

前面在讲解IP协议数据发送的时候,数据从局域网发送到公网服务器的过程中,每经过一个入口路由器,就会将IP报头中的目的IP地址替换成当前路由器的WAN口IP。

NAT能够将私有IP对外通信时转为公网IP,也就是一种将私有IP和公网IP相互转化的技术方法。

如上图所示,此时局域网的客户端A向公网中的服务器发送数据,客户端A将数据在网络层的时候封装IP报头,其中目的IP地址是服务器的公网IP地址163.221.120.9,源IP地址是自己的私有IP地址10.0.0.10,数据最后以MAC帧的形式发送到NAT路由器。

NAT路由器的内网LAN口IP地址是10.0.0.1,公网WAN口IP地址是202.244.174.37。

数据帧被路由器进行解包分用交给自己的网络层后,将IP报头中的源IP地址换成了WAN口IP地址,然后再封装成数据帧发送给公网中的服务器。

当目标IP地址的服务器响应时,同样也需要封装IP报头,其中目的IP就填路由器的WAN口IP,路由器拿到这个响应后,再将IP报头中的目的IP改成客户端A的IP地址10.0.0.10,再发送给客户端A。


问题来了,如果局域网中有多台客户端主机都访问这同一个服务器,甚至每台主机上有多个进程在访问这个服务器,请求数据包都可以通过NAT路由器发送给服务器,服务器也可以将响应返回给路由器。

但是,路由器收到数据包后,所有数据的IP报头中的目的IP地址都是WAN口IP,路由器如何判断这个数据是给局域网中的哪个主机呢?又是该给主机上的哪个进程呢?


3.2 NATP概念

NATP(Network Address and Port Translation)网络地址与端口号转换

这个时候NATP就来解决问题了,采用的是IP + port的方式建立一个转换表。

如上图所示,局域网中的每台客户端的IP地址都是唯一的,一台客户端上每个进程的端口号又是唯一的,所以将IP地址和端口号组合成IP,port也是唯一的。

所有客户端,所有进程访问的都是同一台服务器的同一个服务进程,所以它们的目的IP和端口都是相同的。

将源IP,源port和目的IP,目的port组合在一起形成一个四元组,这个四元组在局域网中也是唯一的。

一个四元组其实就是IP报头中的一部分,当数据传送到NAT路由器以后,路由器会维护一份转换表,如上图所示。

转换表中,将局域网四元组的源IP地址替换成WAN口IP,四元组中的端口号也替换成一个唯一的数字,此时就形成了一个新的四元组,该四元组在公网中是唯一的,然后和旧的四元组形成一个映射关系。这个映射关系是互为键值的。

路由器也是一个主机,客户端A的数据包和客户端B的数据包,它们的四元组不同,路由器就好像是创建了两个“进程”来转发这两个数据包,并且将这两个数据包的源IP地址替换,端口号替换。

由于是路由器的不同“进程”在转发数据包,所以每一对映射关系中,路由器的四元组中的端口号都是不同的,和操作系统分配端口号是一个规则。

当服务器响应多个数据包给NAT路由器的时候,虽然目的IP地址都是WAN口IP,但是端口号不同。

路由器再根据不同端口号的公网四元组找到对应的局域网四元组,将数据发给相应客户端的相应进程。

NAT路由器中的映射关系转换表是由路由器自动维护的。

假设使用TCP协议,当连接建立时,路由器中就会生成这对通信双方的映射表项,断开连接后就会删除这个表项。

路由器通常情况下都带有NAT功能,否则无法完成内网和公网的IP地址转换问题。

NAT技术的缺陷:

由于NAT技术非常依赖映射转换表,所以就有诸多限制:

  • 服务器无法从公网主动给内网中的客户端发数据,因为路由器中没有映射关系,映射关系是在客户端给服务端发送数据时建立的。
  • 转换表的生成和销毁都需要一定的开销,会增大路由器的负担。
  • 通信过程中,一旦NAT设备异常,所有的TCP连接就会出现异常。

4.?代理服务器

4.1?代理服务器概念

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

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

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

假设你想买一些韩国的化妆品,但是你去韩国不方便,正好有个同学在韩国留学,此时你就可以让他帮你去实体店买,然后再给你。这个过程中,你同学扮演的就是正向代理的角色。

由于这个化妆品很好,所以你周围有很多人都让你同学帮代购,你同学觉得不停的去买比较麻烦,所以就在他国内的家里屯了一堆化妆品,有人让他代购的时候,他就将家里的化妆品给它,此时你同学扮演的就是反向代理的角色。

假设现在你的学校里办活动需要自己买一些东西,你和你的同学们一起从淘宝买,此时你们使用的都是校园网,淘宝为了满足大量客户的访问,所以它的服务器不止一台,而是一个服务器机群。

你和同学在访问淘宝服务器时,其实并不是你的客户端在直接访问,而是你将自己的请求交给学校的正向代理服务器,然后正向代理服务器代替你去请求淘宝。

当多个请求发送给淘宝服务器时,并不是直接发给了机群中的某台服务器,这样会导致服务器扛不住压力而奔溃。所以这些请求都是交给了淘宝的反向代理服务器。

反向代理服务器通过一些均衡策略,让这些大量的请求去访问不同的服务器,将请求压力分摊给每一台服务器,保证它的正常服务。

比如Nginx就是专门用来做负载均衡,以及支持大量线程并发访问的服务器。

这也就是为什么我们在访问淘宝时,并不需要区分具体哪个服务器,只需要访问淘宝即可。因为我们访问的实际上是淘宝的反向代理服务器。

上面例子中,学校的代理服务器离我们近,它是正向代理服务器,淘宝的代理服务器离我们远,它是反向代理服务器。

如上图所示,假设你用学校的校园网去看《流浪地球》电影,你从客户端向腾讯视频发起请求,你的请求会被学校的代理服务器拦截下来,然后由代理服务器替你向腾讯视频发起请求。

腾讯视频收到代理服务器的请求后,将对应的电影资源响应给代理服务器,代理服务器收到响应后再将这个响应转发给你,并且将这个电影的响应缓存到代理服务器中。

你给你的同学推荐了这个电影,你的同学也用腾讯视频看这个电影,当他发起请求后,同样会被代理服务器拦截,然后发现本地有这个电影的缓存资源,就直接将这个资源返回了,代理服务器也不再向腾讯视频的服务器发起代理请求了。

这个过程中,你的同学拿到这个电影的资源比你会快很多,因为学校的代理服务器离你们更近。

  • 代替客户端发起请求的,就是正向代理服务器
  • 用来作缓存的一般就是反向代理服务器

实际上,正向代理服务器和反向代理服务器并没有非常明确的界限,就像上面例子中,学校的代理服务器既代替我们发起请求,也缓存了电影资源,它既是一个正向代理服务器也是一个反向代理服务器。


4.2 NAT和代理服务器

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

局域网中的客户端将请求交给NAT设备,NAT设备再将请求通过路由发送给目标服务器,目标服务器再将响应发送给NAT设备,NAT设备再将响应转发给局域网中的客户端。

NAT和代理服务器的区别:

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

5. 相关笔试选择题

1. DNS 的默认端口是多少?( )

A.135

B.445

C.3389

D.53

2.?在MTU较小的网络,需将数据报分成若干较小的部分进行传输,这种较小的部分叫做?()

A.组

B.片

C.段

D.节

3.?以下关于MSS说法错误的是()

A.TCP的单个数据报的最大消息长度, 称为MSS(Max Segment Size)

B.双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值

C.通信双方选择最大的MSS值作为双方通信最终的MSS

D.MSS的值就是在TCP首部的40字节变长选项中(kind=2)

4.?arp协议用了()

A.broadcast

B.multicast

C.unicast

D.以上选项都不正确

5.?ARP协议的功能是()

A.根据IP地址查询MAC地址

B.根据MAC地址查询IP地址

C.根据域名查询IP地址

D.根据IP地址查询域名

6.?以下关于ARP说法错误的是()

A.ARP(Address Resolution Protocol)是地址解析协议

B.ARP协议一定位于TCP/IP协议栈中的网络层

C.ARP表项的老化超时时间缺省为1200秒

D.Operation Code指定了ARP报文的类型,包括ARP request和ARP reply

7.?对于主机域名 for.zj.edu.cn 来说,其中()表示主机名。?

A.zj

B.for

C.edu

D.cn

8.?【多选题】关于DNS协议以下说法错误的是()

A.使用tcp协议进行传输

B.使用udp协议进行传输

C.可以进行从域名到ip的解析

D.可以根据ip查询其使用的域名

9.?下列有关NAT叙述错误的是( )

A.NAT是英文“网络地址转换”的缩写

B.址转换又称地址翻译,用来实现私有地址和公用网络地址之间的转换

C.当内部网络的主机访问外部网络的时候,一定不需要NAT

D.地址转换的提出为解决IP地址紧张的问题提供了一个有效途径

10.?【多选题】以下表述的正确是()

A.NAT有三种类型:静态地址NAT,动态地址NAT,网络地址端口转换NAPT

B.静态地址NAT将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一直不变的

C.动态地址NAT将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定,随机的。所有被授权访问Internet的私有IP地址可随机转换为任何指定合法的IP地址

D.网络地址端口转换NAPT是改变外出数据包的源端口并进行端口转换,采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,可以最大限度地节约IP地址资源

11.?【多选题】以下关于代理服务器说法正确的是()

A.代理服务器往往工作在应用层

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

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

D.正向代理用于请求的转发,反向代理往往作为一个缓存

12. 以太网的MTU值是1500 bytes,假设发送者的协议高层向IP层发送了长度为3008 bytes的数据报文,则以下说法错误的是()

A.首先需要计算在3008bytes的数据报文上添加20字节的IP报头后是否大于MTU,若大于则需要进行分片

B.计算最大的IP包中IP净荷的长度为1480 bytes

C.按照最大IP包中的IP净荷将长度为3008bytes的数据报文分为 1480+1480+48

D.最后发送的报文的大小为1480bytes,1480bytes,48bytes


答案及解析

1. D

DNS 的默认端口为53

2. B

MTU:最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小,是链路层的数据单元大小限制

数据在不同的层次或者不同的场景有不同的叫法,

数据段是传输层的说法,数据报是网络层的说法,数据帧是数据链路层的说法

数据片指的是UDP报文因为过大在网络层进行分割成小报文的说法,叫做数据分片

3. C

MSS为TCP的单个数据报的最大消息长度,TCP通信双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,通信双方选择最小的MSS值作为双方通信最终的MSS,MSS的值就是在TCP首部的40字节变长选项中

4. A

地址解析协议,即ARP(Address Resolution Protocol),是根据 IP地址 获取 物理地址 的一个 TCP/IP协议 。 主机 发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源

broadcast:广播, multicast:多播,unicast:单播

5. A

A正确:ARP协议称之为地址解析协议,将根据IP地址查询MAC地址

B错误:反向地址转换协议,允许机器根据MAC地址获取IP地址

C错误:通过域名获取IP是DNS协议

D错误:DNS的反向解析

6. B

B错误:通常认为ARP协议位于数据链路层和网络层中间,因为ARP协议涉及到IP地址和MAC地址

7. B

域名组成:主机名.结构名.网络名.最高层域名。本题, 主机域名for.zj.edu.cn 中,for是主机名,zj是结构名,edu是网络名,cn为最高层域名

8. AD

A错误:DNS协议规范使用UDP进行传输

D错误:DNS的初衷就是由于IP地址比较难以记忆,所以使用域名来访问,DNS将域名解析为对应的IP地址,而通过IP查询域名是一种反向解析技术并非DNS协议功能

9. C

NAT网络地址转换技术,通常用于私网或者内网的组建中的一种关键技术,在组建的私网中,NAT服务部署在网关设备上,对流经的数据进行地址转换,实现大量私网内主机使用相同的对外公网地址上网,节省IP地址的使用。

C错误:对于使用内部网络的机器而言,获取的IP地址是内网的地址,所以在需要访问外部网络的时候,需要进行网络地址转换,否则无法和外部网络进行通信

10. ABCD

静态地址NAT:实现固定私网主机地址到公网地址的一对一转换,适用于上网用户少,且同时上网用户数量与公网地址数量相同的场景

动态地址NAT:私网主机地址与公网地址的动态转换,并没有固定映射关系

网络地址端口转换NAPT:同时进行地址和端口的转换的NAT,可以实现多个私网地址对应同一个公网地址的转换,不同的私网地址数据使用相同公网地址时使用不同的端口进行转换,适用于公网地址数量少,但是私网用户数量大的场景。

11. ABCD

代理服务器一般工作在应用层,代理服务器分为正向代理和反向代理,正向代理用于请求的转发,反向代理一般作为一个缓存

正向代理,代理的是客户端,类似于房产中介,替我们跟房东交互,把我们的请求交给房东,把房东的回复交给我们, 比较典型的就是 VPN以及一些翻墙代理服务器,一般都是客户端架设的

反向代理,代理的是服务器,类似于二房东,你以为你跟房东交互租房呢,其实不是,你是在跟二房东租房,,反向代理通常由服务器端假设,隐藏服务器IP,并实现静态资源缓存以及负载均衡的作用

12. D

通信术语 最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。举一个具体的例子说明IP包分片的原理。以太网的MTU值是1500 bytes,假设发送者的协议高层向IP层发送了长度为3008 bytes的数据报文,则该报文在添加20 bytes的IP包头后IP包的总长度是 3028 bytes,因为3028 > 1500,所以该数据报文将被分片,分片过程如下:

1. 首先计算最大的IP包中IP净荷的长度 =MTU-IP包头长度=1500-20= 1480 bytes。

2. 然后把3008 bytes按照1480 bytes的长度分片,将要分为3片,3008= 1480+1480+48。

3. 最后发送者将为3个分片分别添加IP包头,组成3个IP包后再发送,3个IP包的长度分别为1500 bytes、1500 bytes和 68 bytes。

本篇完。

下一步学下高级IO再学学几种常用的网络编程如select,poll/epoll等,本专栏就要介绍了。

下一篇:网络和Linux网络_13(高级IO+多路转接)五种IO模型+select编程。

文章来源:https://blog.csdn.net/GRrtx/article/details/133925667
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。