NAT技术

目录

NAPT

内网穿透

代理服务器

NAT与代理服务器的区别


本文仅从计算机网络原理角度进行技术探讨,不涉及任何违规工具的推荐使用。

NAPT

传统NAT技术可以将内网IP转化为公网IP ,它只负责映射内网IP和外网IP。现在说的NAT技术一般指NAPT,它负责映射内网IP:端口和外网IP:端口

在内网主机向公网主机发数据时,首先通过将目的IP与子网掩码按位与后发现该目标IP不在当前网段中,于是交给默认网关

路由器通过将目的IP与子网掩码按位与确认该目标IP也不在当前网段中,继续交给默认网关。但它会将报文中的源IP替换成自己的IP(WAN口IP) ,并在路由器中的转换表中记录下原IP:port和转换后IP:port的映射关系

这样当服务器发送响应给公网路由器后,就可以通过查转换表将IP:port重新映射回去

若一局域网有多台主机都请求同一个服务器,由于转换后的IP与port都相同,不能保证唯一性,因此会改变转换后的端口号

这样双端都可以在各自网段中确保唯一性互为Key,从左往右或从右往左查都可以找到唯一的值(唯一四元组)

内网穿透

因为NAPT的存在,只有内网主机可以直接访问公网主机 ,而公网主机要访问内网主机需要先让内网主机向公网主机发消息,在路由器的转换表中建立映射关系(外网不能主动找内网,但内网主动找外网后,外网可以顺着这条线回话

但如果先让内网主机和自己的公网服务器建立连接 ,当其他人有数据想发送给内网主机时,先发到公网服务器,再由服务器转发给内网主机,就可以解决NAPT,这就是内网穿透

代理服务器

代理分为正向代理反向代理

若一个公司的用户量很庞大,一般都会有多个服务器来减轻负担,但如果将每个主机都暴露在公网上,客户端到底该访问哪个服务器?

因此一般会有一个入口服务器(负载均衡器 ),所有客户端的请求都发给入口服务器 ,由该服务器的策略将请求均匀分到所有服务器上 ,即负载均衡

这种就是反向代理

策略一般有轮询、随机、IP哈希等等(但返回响应时一般是该服务器直接发送,不会再传给负载均衡器)

再比如校园网, 当连着校园网时,所有数据都会先被转发到学校的机房服务器 ,由该服务器代替我们转发到目标公网IP ,当返回响应时,也会由学校机房服务器先接收再转发给指定主机 ,这就是正向代理

简而言之,正向代理隐藏的是"客户端"(买家),反向代理隐藏的是"服务端"(卖家)。

正向代理离客户端更近,反向代理离服务器更近

对比维度 正向代理 (Forward Proxy) 反向代理 (Reverse Proxy)
代理的对象 客户端(代表客户端去请求) 服务端(代表服务端接收请求)
隐藏的对象 隐藏真实的客户端 IP 隐藏真实的服务器 IP
客户端是否知道目标 知道(客户端明确知道要访问哪个目标网址) 不知道(客户端以为代理服务器就是最终目标)
配置位置 配置在客户端(如浏览器设置代理、系统网络设置) 配置在服务端(如部署在机房入口的 Nginx)
流量走向 客户端 -> 代理 -> 目标服务器 客户端 -> 代理 -> 真实服务器
典型工具/软件 Squid、Privoxy、浏览器代理插件 Nginx、HAProxy、CDN、云厂商的 WAF

NAT与代理服务器的区别

两者都能实现"让内网机器访问外网 "以及"隐藏真实 IP "的功能,但它们的工作层级底层逻辑完全不同

NAT主要解决IPv4枯竭问题 ,工作在网络层,是必须要有的,部署在局域网出口

而代理服务器工作在应用层,用于加速,网络优化,负载均衡等,可在局域网/广域网部署

对比维度 NAT (网络地址转换) 代理服务器 (Proxy Server)
工作层级 网络层 (L3) / 传输层 (L4) 主要工作在 应用层 (L7)(如 HTTP 代理),部分在 L4/L5(如 SOCKS 代理)
处理对象 只修改 IP 头部 和 TCP/UDP 头部(改 IP 和端口) 解析并处理 应用层数据(如 HTTP 请求头、URL、Cookie)
连接状态 "修改报文":维持客户端到服务端的端到端连接假象 "断开重连":建立两段独立连接(客户端↔代理,代理↔服务端)
客户端感知 完全透明:客户端无需任何配置,以为自己直接连着外网 通常需要配置:客户端必须在系统或软件中手动指定代理 IP 和端口
协议感知 不感知:不管是 HTTP、FTP 还是游戏数据包,一视同仁转发 深度感知:知道你在访问什么网页,可以缓存图片、过滤敏感词
主要目的 解决 IPv4 地址短缺、实现内外网基础隔离 访问控制、缓存加速、突破访问限制、深度隐藏身份
典型设备/软件 家用路由器、企业防火墙、云厂商的 NAT 网关 Squid、Nginx、浏览器代理插件
相关推荐
啦啦啦啦啦zzzz1 小时前
自定义日志缓冲区(上)c++20
linux·服务器·c++·网络编程
邪修king1 小时前
Re: Linux系统篇(十八):进程篇(七): 进程深度解析:从 fork 创建到退出的完整旅程(附写时拷贝原理 + 代码实战)
java·linux·运维
Golden_Chen1 小时前
Win10 WSL安装ubuntu
linux
RobinDevNotes1 小时前
RoCEv2如何扛起大模型训练网络
linux·网络·ai·网络linux
G佳伟2 小时前
宝塔面板打不开且 Bt-Panel 未运行:从 HTTP 502 到 gevent 缺失的完整排查与修复
网络协议·http·php
亿朝亿夕2 小时前
linux基础命令
linux
modelmd2 小时前
Linux SIGTERM 信号
linux
keyipatience2 小时前
IP网络层
服务器·网络·网络协议·ubuntu·http