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连接,输入用户名密码后,会发现登录的是虚拟机

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

相关推荐
HLC++8 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室9 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy11 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕12 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫13 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生14 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1115 小时前
linux基础IO
linux·运维·服务器
BelongPanda17 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯17 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983417 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器