当前位置: 首页 > news >正文

网络原理补充——NAT/NAPT、代理服务、内网穿透、交换机

文章目录

  • 网络原理补充
    • NAT/NAPT
      • NAT的IP替换过程
      • NAPT技术
      • NAT的缺陷
    • 代理服务
      • 正向代理
      • 反向代理
      • 科学上网
    • 内网穿透
    • 内网打洞
    • 交换机
    • 总结
      • 数据链路层
      • 网络层
      • 传输层
      • 应用层

网络原理补充

本篇文章,我们将针对于网络通信中的一些细节进行讲解。

虽然我们之前已经自顶向下,把TCP/IP协议的相关内容都介绍了一遍。但是,还有一些细节是没有讲到的一些细节进行补充!并且,最后我们需要对网络通信进行一个简单的总结!

其中,我们本篇文章的细节部分重点聚焦于以下三个部分:

1.NAT/NAPT -> 理解内外网如何交换数据
2.代理服务,理解正反向代理、以及科学上网
3.理解内网穿透、打洞问题,即两台内网主机如何通信

NAT/NAPT

我们在学习网络层协议的时候就知道了:
在IPv4协议下,IP地址的数量是绝对不够用的!对此提出了三种解决方案!
而当下使用的,就是把网络分为内网和公网!

公网的IP地址全球唯一,内网IP只在内网内唯一,不同子网可以有一样的内网IP!
👇
所以,在讲解网络层协议的时候,我们就了解了,一台内网主机如何把数据发送到公网!
但是,我们并没有讲,报文如何从公网回到内网的主机上!

所以,下面我们来讲解一下,报文从内网->公网,公网->内网是如何操作的!

NAT的IP替换过程

其实我们早就知道了,NAT技术是如何替换掉源IP的!如下图所示:
(这里的通信是内网主机和公网主机)
在这里插入图片描述

但是,这里我们需要提出几点概念,以方便后序进行讲解:

  1. NAT的技术替换的是内网的源IP,一旦到了公网,就不需要进行替换了!
    很好理解,因为在当前通信的情况下,目标主机在公网,一旦发送的报文到了公网了,就可以直接和公网主机通信了,没必要再替换源IP了!

  2. 子网划分,是路由器做的!这个我们早也知道了!

  3. 第三点我们先输出一个结论,后序来解释:
    内网中,使用NAT技术的时候,不仅仅是替换源IP,还有端口号!

针对于第三点,我们现在是搞不清楚的。我们需要理解一个新的概念——NAPT!

NAPT技术

我们上面说了那么多,但是问题始终没有解决:

1.即公网的服务器把数据处理好后,如何从把数据返回给内网的主机呢?
2.如果说一个内网中的多台主机都向这个服务器发送数据,服务器处理完后应该怎么确定返回给内网中的哪一台主机呢?因为这些内网主机的源IP出到公网都是一样的!

答案是:使用NAPT技术!
在这里插入图片描述

1.首先,我们认为内网中只有一台主机向服务器发送数据的时候,服务器怎么返回!
其实是这样的:
在路由器进行源地址替换的时候,不仅仅是把源IP与当前路由器的WAN口IP做替换那么简单。
还需要形成一个键值对,这个键值对是(进入该路由器前的源IP <-> 当前路由器的WAN口IP)!

这个键值对不仅仅可以正向查询,也可以反向查询!
所以,当服务器返回一个报文的时候:
①先返回主机对应子网的出口路由器位置(出到公网就是公网IP了)
②再根据每个路由器中的表进行逆向查询!因为子网内的内网IP也是不能重复的!
最后经过一路反向查询,就可以回到原来发送数据的主机
如果说,同一个时间内,该子网内只有一台主机向服务器发送数据接收数据,当然可以!

2.子网内可能有不同的主机发送数据,也有可能是一台主机的不同进程!
上述那种理想情况必然是不可能出现的!实际上:
在一个子网内,一台主机可能有不同的进程都在请求该服务器的服务,也可能是不同的主机在请求,所以,上面如果仅仅只是存储源IP地址和WAN口IP地址的键值对就没办法解决问题!

所以,NAPT到底是怎么做的呢?
在这里插入图片描述
看绿色框部分,我们发现,不仅仅是把源IP替换了,替换了端口号!

本质:网络通信,就是不同主机的两个进程在通信!

一台主机多个进程的情况下:
如果是一台主机下多个进程同时访问一个服务器,其实很好区分!
在内网中,IP也是唯一的!一台主机中port也是唯一的!
👉内网IP + port,就可以表示出内网中的唯一进程!

所以,在NAPT转化表中,不仅仅要记录IP的替换,还要标识端口号

多台主机一个进程的情况下:
但是,如果是不同主机,万一真的有个别主机通信的进程,端口号一样怎么办?
比如主机A和B都向服务器发送数据,它们的端口号都是1025!
那出到公网的时候,IP:Port不都一样吗?

所以,在路由器这一层,需要对端口号做替换!
但是,具体换成什么是不重要的!因为只是为了标识进程唯一性质!能够逆向查找即可!

因为替换前:IP:Port足以标识进程在内网中的唯一性了
但是经过一个内网路由器,就会导致源IP替换!就有可能破坏唯一性
所以,需要把端口号给替换了,在替换后也保持唯一性的同时,能够逆向查找!

多台主机多个进程的情况下:
所以,现在就很好理解了,不管子网内有多少台主机要和同一个服务器通信:
都是经过上述的逻辑,NAPT技术把前后IP:Port做键值对映射!
替换的IP就是内网路由器的WAN口IP,端口号不用管是什么,只要保证该子网下唯一性即可!

总结:这种关联关系也是由NAT路由器自动维护的。
例如在TCP的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项

NAT的缺陷

任何技术都不是十全十美的!多多少少都会有一些问题:
由于 NAT 依赖这个转换表,,所以有诸多限制:

  1. 无法从 NAT 外部向内部服务器建立连接;
  2. 转换表的生成和销毁都需要额外开销;
  3. 通信过程中一旦 NAT 设备异常,即使存在热备,所有的 TCP 连接也都会断开;

1.因为NAT的转化表,是依赖于内网出公网的过程形成的!故公网是没有办法直接进内网的!
2.路由器设备压力会比较大,因为存储这样的转化表,增删查改,开销还是比较大的!
3.NAT/NAPT技术是子网和公网联系的桥梁!一旦出现问题,必然导致连接断开!

但是,虽然它有一些缺陷,但是它在很大程度上解决了当前IPv4协议下的:
IP地址资源不足的问题!
而且,NAT技术在当前网络技术中是非常常用的!

代理服务

在讲HTTP协议的重定向报头的时候,我们曾经讲过一个重定向的作用:
即某些服务器不做数据处理,只做转发!原理就是使用重定向!这种我们称为代理服务器!

现在,我们来了解一下代理服务器的相关知识!

正向代理

正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
在这里插入图片描述
我们从图中可以看出来,正向代理是在互联网的左侧的!
其实就是客户端向网络的请求,会让这个服务器做代理,服务器代替客户端做请求!

工作原理:

1.首先,客户端将请求发送给正向代理服务器
2.正向代理服务器会解析请求,从而实现对请求的实现、过滤、缓存查找等
3.正向代理服务器将处理后的请求转发给目标服务器
4.目标服务器对请求做处理,然后返回给正向代理服务器
5.目标服务器可以对返回内容做检查,对敏感内容过滤;反之可以缓存内容,转发给客户端

正向代理特点:

缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度。
内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性。

所以,这就是为什么有时候我们使用校园网的时候,信息可能被学校看到!有时候也没有办法去访问一些网址,就是因为校园网代理服务器在控制!

反向代理

反向代理(Reverse Proxy)服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。

在这里插入图片描述
我们可以看到,反向代理服务器实在互联网的右边的!
反向代理服务器,代理的不是客户端,而是服务器的后端!

工作原理:

反向代理服务器位于客户端和 Web 服务器之间:
当客户端发起请求时,它首先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。

因为如果让一台服务器来连接多个客户端来进行服务,对于这台服务器来说压力是很大的!
所以,在客户端和 Web 服务器之间会存在反向代理服务器!

在这种情况下,客户端可能会有两种类型请求
1.访问静态资源
2.与服务器做交互

对于与服务器做交互的情况,服务器端会把交互数据放在不同种类的数据集群内,所有的后端web服务器都能与这些数据集群联通。所以,当代理服务器接收到客户端交互请求,就转而把请求转发给后端的Web服务器:
在这里插入图片描述

如果是访问静态资源,静态资源其实就是服务器上存储的一些图、视频、网页等。我们自行模拟过HTTP协议,这里就不再讲解了。
但是,代理服务器还是觉得压力有点大,只想做转发功能。所以,就会把连接缓存起来!然后把具体的内容存储在CDN(Content Delivery Network,内容分发网络)上:

在这里插入图片描述
就是有一些专门做CDN的厂家,提供该服务,然后静态资源就不用存储在代理服务器上了,只需要存储一个链接,需要的时候通过CDN访问获取内容即可。(CDN本质也是反向代理!)

这样子,就可以很轻松地实现动态资源和静态资源的分离了,使得代理服务器更加高效!


同时,还做到了负载均衡!即不让单一服务器压力过大。代理服务器可以根据后端不同的Web服务器压力来选择合适的服务器进行处理,实现负载均衡。
当然,也不止是一个代理服务器,代理的服务器也可以是多个!

科学上网

说明:这个话题我们只讲原理,不会进行任何的实验!旨在了解技术!
在这里插入图片描述
我们需要明白一点:
不科学的地方就是因为运营商!但是我们需要明白:无论如何都是绕不开运营商的!
所以,要想科学地上网,就只能骗过运营商!

1.在本地主机安装一种工具/软件,功能如下:
在这里插入图片描述
2.需要有一个合法的、可以访问外部的一个合法的站点:
在这里插入图片描述
其实国内不是不能访问外部,比如像一些跨境电商、科研机构等是有这样的需求的。
所以,有一些站点是能够合法地科学上网的!

3.需要在合法站点上部署服务:
在这里插入图片描述

4.整体流程(灰色笔迹展示线路):
在这里插入图片描述
其实会存在很多这样的合法的站点,因为必然会有这样的需求的!
总而言之,就是通过加密请求 + 合法站点代理地方式,从而能够进行科学上网的!
(BUT:净化网络,人人有责,这里只是做技术探讨! 😀)

这里提出一个小问题——科学上网地代理服务器是正向代理还是反向代理?
答案:正向代理!因为它是代理客户端的,在网络的左侧!

内网穿透

虽然我们现在已经知道,内网的主机如何和处在公网上的主机进行通信了!
但我们肯定会有一个疑问:就是一个内网下的主机怎么和另一个内网下的主机进行通信呢?

答案是:很可惜,是没有办法直接通信的!
我们简单思考一下也可以明白是不行的:
因为我们自己拿手机和别人通信也要先登陆聊天软件的app。

但是,处在不同的内网下的主机是如何进行通信的呢?


我们就举一个例子:
在这里插入图片描述
一些大型的公司是有自己公司的内网的!一般来说,只要员工回到家了,就没办法登录公司的网络了。这是很合理的!公司内网也确实不应该能够被在外部随便登录。
再一个,目前确实没有办法能够直接从一个内网访问另一个内网!

但是,一些大型的网络公司,有时候可能会出现一些bug需要员工及时修复。但是员工回家了怎么办? -> 让员工赶回来不现实 -> 只能想办法让员工能够在家登录公司内网!

具体的原理如下所示:
在这里插入图片描述
其实就是用一个云服务器做两个内网之间的桥梁,只不过需要使用特定的部署工具!
云服务器端部署frps(server),公司内网部署的是frpc(client)!

这种把内网服务暴露在公网(这里是公司内网)、能够让其他内网内的主机访问的情况:
就是内网穿透! -> 实现了不同内网主机的通信!

但是像是这种公司的内网,也是不能随便放给别人访问的!
所以,一般来说,公司暴露这个服务,其他子网登陆的时候是需要进行登录验证的!

内网打洞

现在,我们来介绍内网打洞的知识点!其实和内网穿透很类似。

这里就以直播平台为例子:
在这里插入图片描述
直播的基本传输网络结构如上所示!

内网打洞的流程:
在这里插入图片描述
因为各个主机/路由之间的NAT转化是已经建立好的!所以,拿到对方的子网出口ip:端口,就一定能通过NAT/NAPT转化,传输回给对方主机!

这种情况,就脱离了服务器,就是内网打洞!
其实原理和内网穿透是一样的,只不过在这种情况下,不用再依赖于服务器!直接让两台主机能直接进行通信,这就是内网打洞!

交换机

前面我们分别补充了各个层的一些相关细节,但在数据链路层中,还有个细节值得我们关注!
即交换机!我们来简单理解一下交换机的原理。

下图是局域网通信的原理:
在这里插入图片描述

我们知道:

1.以太网就是一个巨大的碰撞域
2.以太网上的信息会泛洪,所有主机都看得见
3.以太网在同一时刻只能有一个主机发送信息
4.以太网需要对碰撞的MAC帧进行处理

交换机的功能就是:划分局域网碰撞域,尽可能减少MAC帧的碰撞!
在这里插入图片描述
此时,该局域网就像是被分成两个部分一样,A和D在左边,B、C、E在右边!

当A->D(D->A)的时候,交换机就识别到,这是在左边传输的帧,就不再泛洪给另一边了!
同理另一边也是这样的!

所以,当一个局域网内主机数量过多的时候,就需要通过交换机来划分多个碰撞域!
尽可能地不让不同碰撞域内传输地帧发生碰撞 -> 提高网络传输的效率。
所以,交换机的本质,就是一个划分碰撞域的、处在数据链路层的一种硬件设备!

总结

下面就对TCP/IP协议的不同层做一下基本的总结!

数据链路层

数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据

  • 以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容.
    (例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等)
  • 以太网帧格式
  • 理解 mac 地址
  • 理解 arp 协议
  • 理解 MTU

网络层

网络层的作用: 在复杂的网络环境中确定一个合适的路径.

  • 理解 IP 地址, 理解 IP 地址和 MAC 地址的区别
  • 理解 IP 协议格式
  • 了解网段划分方法
  • 理解如何解决 IP 数目不足的问题, 掌握网段划分的两种方案. 理解私有 IP 和公网 IP
  • 理解网络层的 IP 地址路由过程. 理解一个数据包如何跨越网段到达最终目的地
  • 理解 IP 数据包分包的原因
  • 了解 NAT 设备的工作原理

传输层

传输层的作用: 负责数据能够从发送端传输接收端

  • 理解端口号的概念
    认识 UDP 协议, 了解 UDP 协议的特点
  • 认识 TCP 协议, 理解 TCP 协议的可靠性. 理解 TCP 协议的状态转化
  • 掌握 TCP 的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答
  • 理解 TCP 面向字节流, 理解粘包问题和解决方案
  • 能够基于 UDP 实现可靠传输
  • 理解 MTU 对 UDP/TCP 的影响

应用层

应用层的作用: 满足我们日常需求的网络程序, 都是在应用层

  • 能够根据自己的需求, 设计应用层协议.
  • 了解 HTTP 协议
  • 理解 DNS 的原理和工作流程
http://www.dtcms.com/a/390643.html

相关文章:

  • 深入 HTTP 协议:剖析 1688 商品详情 API 的请求构造与签名机制
  • 共用体union和大小端模式
  • 2022年下半年 系统架构设计师 案例分析
  • LeetCode 面试经典 150_哈希表_有效的字母异位词(42_242_C++_简单)
  • go webrtc - 3 工程演示
  • JVM(五)-- 执行引擎
  • 微算法科技(NASDAQ:MLGO)量子架构搜索技术:突破变分量子算法性能瓶颈,实现量子计算的鲁棒优化
  • 海亮科技亮相第十一届亚教展,“教育 + AI”赋能县域教育振兴
  • JMeter的配置元件
  • Charles与Postman、JMeter结合使用教程:高效接口调试与性能测试方案
  • 【Haddop】Hive的离线分析与Sqoop的数据集成
  • 嵌入式 Linux 基础入门笔记(1)
  • Starlink 2.0与3GPP NTN技术对比分析:颠覆性优势与产业格局重构
  • 鸿蒙Next用户文件管理全解析:安全、高效、跨设备的未来体验
  • 简形电力JX2202 智能测试系统:重构新能源电力检测效率标准
  • AI识别视频中动物与人物的技术深度解析
  • iOS 上架完整流程指南 苹果应用发布步骤、App Store 上架流程
  • MySQL-CRUD 操作及常用查询语法详解
  • 玳瑁的嵌入式日记---0919(ARM)
  • Objective-C —— APIs declaration 自定义
  • 【XTDrone】笔记5:control文件详解
  • 抓包的那些事,抓包的原理、常见场景、工具比较与实战排查流程(抓包步骤、iOS 抓包、HTTPS 抓包技巧)
  • 软件工程实践八:Web 前端项目实战(SSE、Axios 与代理)
  • 【常见集合】ArrayList与LinkedList
  • IPD流程实战:如何跨领域应用IPD思维?
  • Archery:开源、一站式的数据库 SQL 审核与运维平台
  • 北斗GNSS在地质灾害监测中的变形监测技术与应用解析
  • C语言题目:用“*”作为元素打印菱形
  • Redis的java客户端(SpringDataRedis)
  • Amazon Aurora DSQL:分布式无服务器数据库的下一场革命