Bootstrap

NAT && 代理服务器

1. NAT

ip协议章节,我们说报文转发给路由器时,由于私有IP地址不能出现在公网中,路由器会将报文源IP地址替换为路由器的WAN口IP地址,这个过程我们称为NAT转换

NAT技术是路由器的一个重要功能,缓解了IP地址不足的问题,因为它允许不同私网主机的IP地址可以相同;公网IP地址要求唯一,但私有IP地址不要求

既然源IP地址被替换了,应答该如何返回到源主机呢?

路由器在对源IP地址替换时,还会保存源IP地址与路由器WAN口IP地址的映射关系,形成NAPT,我们简称为NAT转换表

在这里插入图片描述

私网内的主机第一次向公网发送报文时,映射关系就会保存在NAPT

如果同一局域网内有多台主机向同一服务器发送报文,由于它们的上层路由器都是同一个,应答返回时怎么知道对于哪台主机呢?因此,映射关系采用IP地址 + 端口号的方式

这种映射关系由路由器自主维护,使用tcp,建立连接时,会生成NAPT,断开连接,销毁NAPT

NAT技术的缺陷:

  1. 外网不能直接访问私网IP地址,因为路由器没有映射关系,报文到达路由器时不知道往哪走
  2. NAPT的生成和销毁都需要额外的开销
  3. 一旦NAT设备(路由器)异常,所有连接都断开

现在,我们了解了NAT技术,就能解释平时上网时的出现的现象:

  1. 为什么使用QQ等聊天软件与朋友聊天,必须先登上QQ?
  2. 为什么不同局域网内的两台主机不能直接通信?

所谓登上QQ,就是连接上了公网中的QQ服务器,双方都连上QQ,私网到公网的映射关系建立,消息发给服务器,服务器也就能将消息从公网发送到私网中

在这里插入图片描述

不同局域网内的两台主机不能直接通信,因为路由器没有相应的映射关系

在这里插入图片描述

2. 内网穿透

以Windows作为client,连接云服务器上的服务,发送消息,将源主机的IP地址打印出来,会发现打印出来的IP地址与Windows主机的IP地址不同

在这里插入图片描述

根据学过的内容,最终将报文转发给云服务器的是运营商的路由器,因此,云服务器中打印的实际上是运营商路由器的IP地址

借此,我们可以引出新的技术:内网穿透、内网打洞

在这里插入图片描述

首先,B连接云服务器,路由器建立了对应的映射关系;其次,在云服务器上部署一种服务,该服务将所有发送到云服务器指定端口的报文全部转交给B,由B处理报文并将应答返回给云服务器,再由云服务器将应答返回,这样就完成了两个私网之间的通信,我们把这种技术叫做内网穿透

这种技术有何作用呢?

一般配置好的云服务很贵,这样做就能使用一台便宜的云服务器,让另一台主机完成复杂的工作

有时,我们也需要远程办公,比如B是你家中的主机,A是你在出差地的主机,这样就能在远方访问到家中的主机,完成工作

3. 内网打洞

与内网穿透相对应的技术还有内网打洞

在这里插入图片描述

由于云服务器能得知主机运营商路由器的IP地址,如果两台主机连接同一云服务器,云服务器就得知双方运营商路由器的IP地址;此时,如果云服务器将B运营商路由器IP地址发给A,将A的发给B;之后,A要与B通信,发送报文都往B的运营商路由器发,由于B已经连接过云服务器,路由器中NAPT就有对应的映射关系,报文也就能正确到达B,同理,B向A的运营商路由器发送报文也能正确到达A

同样,我们也能完成不同私网的主机之间的通信

内网打洞有何用呢?

例如直播,数据直接发给对方运营商路由器,一样能发送给对方,而不再需要由服务器进行发送了,大大减少了服务器的压力

有些视频软件,会发现下载视频非常快,如果B要下载某个视频,服务器会先查找距离B主机最接近且有相应资源的主机,如果找到了,B直接从对方主机下载该视频

4. 代理服务器

正向代理服务器

在这里插入图片描述

工作原理:

client要访问公网,先将请求发送给自身子网中的代理服务器,由代理服务器请求,应答也是发送给代理服务器,由代理服务器再返回应答给client

功能:

  1. 缓存:代理服务器能够缓存部分静态资源,下次client如果访问相同的数据,代理服务器直接应答即可
  2. 内容过滤:外网想要访问私网中的主机,必须经过代理服务器,代理服务器就能对公网的不良信息过滤
  3. 访问控制:如果client想要访问非法网址,代理服务器可以直接拦截
  4. 隐藏客户端身份:由于请求是由代理服务器请求的,一定程度上隐藏了client的身份,保护client隐私

**应用场景:**学校的校园网

反向代理服务器

在这里插入图片描述

工作原理:

client发送给服务器的请求,最先到达反向代理服务器,由反向代理服务器选择分配给哪台服务器进行处理请求,并将应答返回给client

功能:

  1. 负载均衡:由反向代理服务器合理规划每台服务器的使用,让每台主机都"有事可做"
  2. 安全保护:私网服务器一般不暴露在公网上,隐藏服务器的IP地址,我们平时使用的云服务器上的公网IP地址可能就是反向代理服务器的IP地址,对client的请求进行过滤
  3. 缓存:反向代理服务器可以缓存服务器的响应内容,对于client重复的请求,可以从缓存中获取

NAT与代理服务器的区别:

  1. 应用上:NAT技术解决的是IP地址不足的问题,代理服务器则是一种具体应用
  2. 底层上:NAT工作在网络层,代理服务器工作在应用层
  3. 部署位置上:NAT一般部署在防火墙、路由器上,代理服务器则是一个软件程序,一般部署在服务器上
  4. 使用范围上:NAT一般在局域网的出口处,代理服务器可以在局域网、广域网等地方

代理服务器还有一个应用:翻墙

在这里插入图片描述

5. DNS

DNS是一套解析域名到IP地址的系统

我们说过,访问任何服务器都要以IP地址 + 端口号的方式,但IP地址对于普通用户来说非常不友好,于是就产生域名,它能增加用户的体验

最开始,由hosts文件维护主机名与IP地址的映射关系,这样做,非常的不方便:

  1. 一旦由新主机连接到互联网,或主机IP地址变化,就要到信息中心更改hosts文件
  2. 计算机需要定期更新hosts文件才能正常上网

于是,就有了DNS系统,域名解析过程:

在这里插入图片描述

域名www.baidu.com,其中com是一级域名,表示盈利组织,还有net(网络提供商)、org(非盈利组织),baidu则是二级域名

使用dig指令,能查看DNS的过程

在这里插入图片描述

如果访问过某个网址,本地DNS服务器也会缓存IP地址

在这里插入图片描述

6. ICMP

ICMP是网络层协议,不是用来传输数据的,而是用来网络问题定位,网络问题诊断的

在这里插入图片描述

由于IP协议不保证可靠性,如果IP报文丢包,IP协议不能通知传输层以及丢包的原因

ICMP的功能:

  1. 确认IP报文成功到达目标主机
  2. 通知报文丢弃的原因

在这里插入图片描述

需要注意的是:ping命令是基于ICMP的,不经过传输层,由OS直接调用网络层接口发送,因此,该命令也就没有端口号

在这里插入图片描述

traceroute命令基于ICMP,打印主机到目标经历过的路由器

在这里插入图片描述

7.测试内网穿透

使用frp软件测试内网穿透,将虚拟机作为frpc,将云服务器作为frps

在这里插入图片描述

在这个过程中,Windows主机会被当成路由器,构建子网,虚拟机是该子网中的一台主机

在这里插入图片描述

下载frp并拷贝到云服务器和虚拟机上

在这里插入图片描述

注意:由于公网不能访问私有IP地址,只能从虚拟机向云服务器拷贝

在这里插入图片描述

在这里插入图片描述

启动服务端和客户端

在这里插入图片描述

在这里插入图片描述

可以看到,frps进程会有两个端口号,8888是虚拟机的连接,8081是未来client向该端口发送的报文都会转交给虚拟机上的服务的连接

确保虚拟机上有sshd服务,也就是远程登录服务,使用client向云服务器的8081端口发送ssh连接,输入用户名密码后,会发现登录的是虚拟机

如果想在虚拟机上部署多个服务,可以继续添加配置文件

在这里插入图片描述

;