【网络编程】DNS协议、ICMP协议、NAT协议

一、DNS协议

1.1 域名解析服务

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆。于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系。
cat /etc/hosts 查看hosts文件内容
在这里插入图片描述

我们知道百度的域名是36.152.44.96,但是这对普通人来说不友好,还是www.baidu.com对普通人友好。

但是这个影响的范围太小了,所以后来就有了组织把全世界的主机名和IP地址的映射关系全部写成了一套网络服务,这个网络服务允许任何人请求,然后把域名转换成IP地址返回去。也叫做域名解析服务

通过域名得到IP地址后才向网络发起请求,这个工作是我们自己安装的软件完成的。

1.2 域名分级

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

com:一级域名,表示这是一个工商企业域名。同级的还有.net(网络提供商)和.org(开源组织或非盈利组织)等。
baidu:二级域名,公司名。
www:只是一种习惯用法。

1.3 从输入网址到获得页面的过程

这也是面试的高频问题,还有一种问法:浏览器输入url后发生的事情?

1️⃣ DNS解析获得IP地址
2️⃣ 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
3️⃣ TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
4️⃣ 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;

先站在纯应用层:介绍HTTP协议的请求和响应格式,建立好连接后就可以交换请求和响应,有些浏览器在请求之前可能要先做DNS域名解析,得到IP后才能向目的IP和目的端口发送请求,关于请求有GET和POST方法。关于请求和响应里面常见的字段有:状态码,Cookie和Session。
然后关于连接的过程和信息传输的过程可能出现问题(数据丢包、拥塞控制、数据路由),然后就可以讲下面几层。

二、ICMP协议

2.1 ICMP协议功能

IP协议不仅仅要有通信能力,还需要有故障排查能力

ICMP是一个处于网络层和传输层之间的协议,它主要是用来确认报文是否丢失。

ICMP的主要功能包括:

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

比方说主机A和主机B之间有多个路由器,但是数据在最后一个路由器到达不了B,此时这路由器就会多次发送ARP请求如果还得不到应答,最后就会返回信息给主机A。此时主机A就知道自己发送的数据无法到达主机B。

2.2 ping命令

windows下:
在这里插入图片描述
Linux下:
在这里插入图片描述

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

所以ping命令底层是通过ICMP协议设置TTL(跳数)来检测网络连通性。

2.3 ping的端口号?

有些面试官可能会问: telnet对应的端口号是23,ssh对应的端口号是22,那ping对应的端口号是多少?

ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息。 所以ping根本没有端口号,ping命令实际是绕过了传输层的直接访问底层ICMP协议的一种做法。

三、NAT协议

在讲IP协议的时候说过IPv4协议的IP地址数量不足,而NAT技术就是当前解决IP地址不够用的主要手段,是路由器的一个重要功能:

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

3.1 NAT IP转换过程

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

这个在之前的IP协议的网段划分讲过,其实就是当数据包到达家用路由器的时候,路由器会把源IP替换成WAN口IP

在这里插入图片描述

此时目标服务器收到了数据包,然后构成响应,现在要返回给我们自己的主机,但是这个响应信息只能返回到运营商路由器,那么怎么从运营商服务器转发到我们自己的主机呢?

因为一个局域网内多台主机都同时访问一台外网服务器,此时服务器返回的数据中所有的目的IP都是相同的(发送的过程替换了源IP),所以就不知道返回给局域网中哪台主机(路由器)了。

3.2 NAPT(地址转换表)

NATP就能很好的解决数据返回的问题,使用IP + 端口来建立这个关联关系。

其实路由器在转发数据的时候不仅仅只改变了源IP,还维护了一张地址转化表

就拿此图来举例子:
在这里插入图片描述

这两个家用路由器在转发到运营商路由器的时候,此时运营商路由器就会建立地址转化表:
在这里插入图片描述

左侧表里面的就是IP:端口的四元组形式,标识了局域网内的唯一一台主机
右侧就是替换完成后的源地址和目标地址。

这样就构成了一组互为键值的映射表

这里讲一以下端口号相同的问题,有可能同一个局域网的两台主机用的同一个客户端(有相同的端口号)相同, 此时进过外网路由器,要替换源IP,这样就导致了区分不了这两台主机了。解决办法就是向外转发的时候发现两个主机有相同的端口号,那么就在转发出去的时候改变端口号。

所以NAT路由器除了做WAN口IP的替换,还会进行端口号的替换。

在数据进行转发的时候每个路由器都会维护一张NAPT地址转换表。

思考一个问题:
如果一台主机从来都没有访问过外网的服务器,那么这个服务器能够找到这台主机吗?

不能,因为路由器没有建立映射关系,所以找不到。
无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立连接。

3.3 代理服务器

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

  • 正向代理

客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端。
在这里插入图片描述

当多台主机都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他主机要访问该资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。

  • 反向代理

对于客户端而言,反向代理服务器就相当于目标服务器,用户不需要知道目标服务器的地址,用户只需要访问反向代理服务器就可以获得目标服务器提供的服务。

在这里插入图片描述
比如域名www.baidu.com对应的服务器实际就是一个反向代理服务器。

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

  • 正向代理和反向代理的关系

对于客户端而言,离客户端近的就是正向代理,离服务端近的就是反向代理。

正向代理代理的是客户端,反向代理代理的是服务端,一个为客户端服务,一个为服务端服务,在区别上非常明显,如下图:
在这里插入图片描述

不同点:

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

3.4 NAT和代理服务器的区别

NAT和代理服务器都是代替我们向服务器发起数据请求的,但它们有如下区别:

  • 从应用上讲,NAT设备是网络基础设备之一(必须的),解决的是IP不足的问题,而代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用的代理服务器(广域网中的代理)。
  • 从底层实现上讲,NAT工作在网络层,直接对IP地址进行替换,而代理服务器往往工作在应用层
  • 从使用范围上讲,NAT一般在局域网的出口部署,而代理服务器可以在局域网代理,也可以在广域网代理,也可以跨网代理。


猜你喜欢

转载自blog.csdn.net/qq_66314292/article/details/131851890