NAT 代理服务器

embedded/2025/1/11 13:30:06/

文章目录

  • 1. NAT
  • 2. 内网穿透
  • 3. 内网打洞
  • 4. 代理服务器
    • 正向代理服务器
    • 反向代理服务器
  • 5. DNS
  • 6. ICMP
  • 7.测试内网穿透

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

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

在这里插入图片描述


http://www.ppmy.cn/embedded/153021.html

相关文章

概率论常用的分布公式

01 常见离散型分布及其概率分布、期望和方差公式 伯努利分布 概率分布:期望: E(X)p方差:D(X)p(1−p) 二项分布 概率分布:期望:E(X)np方差: D(X)np(1−p) 表示方法:X∼B(n,p) 泊松分布 概率分布…

缓存-Redis-常见问题-缓存击穿-永不过期+逻辑过期(全面 易理解)

缓存击穿(Cache Breakdown) 是在高并发场景下,当某个热点数据在缓存中失效或不存在时,瞬间大量请求同时击中数据库,导致数据库压力骤增甚至崩溃的现象。为了解决这一问题,“永不过期” “逻辑过期” 的策略…

CMD批处理命令入门(4)——ping,ipconfig,arp,start,shutdown,taskkill

CMD批处理命令入门(4)——ping,ipconfig,arp,start,shutdown,taskkill 本章主要内容:测试IP连接:ping查看 IP 配置:ipconfig解析地址:arp开启命令:start关闭或重启计算机:shutdown关…

c#编写基于ffmpeg的视频裁剪

c#编写基于ffmpeg的视频裁剪 前言展示① 压缩裁剪② 批量处理③ 自定义命令④ 配置管理⑤ 执行日志 功能实现思路① 帧预览② 框选区域③ picturebox,Zoom模式,让图片显示靠边显示④ 时间区间选择进度条⑤ 配置和缓存 代码链接最后 前言 c#编写的一个基…

【AJAX详解】

AJAX详解 AJAX(Asynchronous JavaScript and XML)是一种创建交互式网页应用的网页开发技术。它允许在不重新加载整个页面的情况下,通过后台与服务器交换数据并更新部分网页内容。这提供了更流畅的用户体验,因为用户不需要等待整个…

通过gradle发布aar或jar携带sources-jar到maven nexus

找了很久,没有找到满意的。终于找到一个好的办法。 gradle7.x适用。比以前的写法简洁。 发布传统的jar工程 比如okhttp,fastjson等项目,纯java工程。 直接创建新文件publish.gradle: apply plugin: maven-publishProperties properties …

SQLite 调试与性能优化指南

在前几篇文章中,我们深入了解了 SQLite 的基础和高级功能,以及如何利用其扩展能力。本篇文章将重点讲解 SQLite 的调试工具和性能优化技巧,以帮助您解决常见问题并进一步提升数据库性能。 常见问题及解决方法 SQLite 的轻量级特性使其非常易…

STM32按键中断案例(基于寄存器)

目录 引言 一、案例需求描述 二、硬件电路设计 2.1 LED硬件电路 2.2 按键硬件电路 三、软件设计 3.1 相关寄存器介绍 3.1.1 时钟相关寄存器 3.1.2 配置寄存器 3.1.3 输入数据寄存器 3.1.4 AFIO引脚复用相关 3.1.5 EXTI配置 3.1.6 清除中断标志位 3.2 工程创建 &…