目录
NAT技术
介绍
NAT 是一种网络技术,它允许在一个公共 IP 地址和多个私有 IP 地址(入口路由器的wan口地址 和 私网内的私有ip)之间进行转换
- 目前解决ip地址不足的最主要手段
- 路由器的重要功能之一
NAT转换表
引入
如果局域网内有多台主机请求同一个服务器,经过NAT技术,会在入口路由器处转换ip地址
- 源ip 替换成 路由器的wan口ip地址
但是,在响应返回 的过程中,当路由到入口路由器处时,就会出现多条[目的ip]相同的报文
- 该如何确定究竟发送局域网内哪台主机呢?
- 实际上,路由器内会形成一张转换表
介绍
NAT 转换表是路由器用来管理网络地址转换过程的一个数据表
- 私有源ip+源端口 ,目的ip+目的端口 -> 公有源ip+源端口,目的ip+目的端口
- 简单来说就是,建立了[内网使用的套接字->公网使用的套接字]的映射关系
以上过程叫做NAPT技术,NAPT是NAT的一种形式/类型
NAPT技术介绍
NAPT(Network Address Port Translation,网络地址端口转换)是一种 NAT(网络地址转换)技术的具体实现
- 用于允许多个内网设备通过一个公共 IP 地址与外部网络进行通信
- 它不仅仅转换 IP 地址,还涉及到端口号的转换,以便管理和区分不同的网络连接
NAPT替换过程
- 源ip -- 私有ip -> 入口路由器wan口ip
- 源端口号 -- 内网某主机的端口号 -> 临时端口号(由路由器分配)
NAPT原理
如果把左侧内容当成一个大字符串,它一定是全网唯一的
- 之前我们就说过,套接字信息可以唯一标识一条网络通道
- 即使访问相同的服务器,所有主机的ip地址也会不一样,即使是同一个主机,端口号也会不同
- 那么,[私有ip可重复]会对这个唯一性造成影响吗?
- 不会,因为那是在不同局域网内的情况,同一个路由器虽然可以连接多个子网,但如果有重复ip地址,就无法识别,所以不会出现一个路由器内有重复ip
- 而这个表是路由器内部维护的,所以不会重复
而右侧,也是全网唯一
- 虽然源ip相同,但因为连端口号也替换了,而这个端口号是路由器内部的标识,所以可以保证唯一性
因为左右均唯一,所以它们互为键值,于是可以实现:
注意点
因为每条连接都会占用一个端口号,那会不会出现超出路由器的容纳上限呢?
- 不会
- 路由器分为家庭路由器 和 企业路由器,虽然两种承受能力不同,但家庭路由器完全可以承载一个家庭内的所有设备,企业路由器可以承载更多
- 即使真的超出数量,运营商也会自动重新组建子网(在大型企业网络和数据中心,通常会使用自动化工具来管理和配置子网)
并且,主机数量过多也会让数据碰撞概率增大,所以一个局域网内也不会有太多主机
- 所以NAT查表过程成本不高
NAT缺陷
无法直接访问其他内网主机
我们无法主动访问其他私网内主机
- NAT 主要用于将私网中的 IP 地址转换为公共 IP 地址,从而允许内部设备通过公共 IP 地址访问外部网络
- NAT 设备不会自动创建外部到内部的映射关系,因此,外部网络设备无法主动发起连接到内部私网中的设备
- 只能是两台主机先与某公网服务通信,然后由公网服务转发给主机
内网穿透
如果非要这么做 -- 内网穿透 -> 利用一个公网服务器作为中介,使得在内网中的设备能够与外部网络进行通信
- 首先要建立一个公网服务器,目的主机(内网设备)与该服务器之间要先建立好tcp长连接
- 这样我们就可以通过这个服务器,来直接与目的主机通信 (公网服务器接收到想要访问目的主机的请求后,通过之前建立的 TCP 连接,将请求转发到内网设备)
- 这一切的前提 是 -- 目的主机已经与服务器建立好连接
工具
frp -- 高效的内网穿透工具,允许通过公网服务器将内网设备的服务暴露给外部网络,实现远程访问
- 包含两个主要组件 -- frps(服务端) , frpc(客户端)
- 我们可以在云服务器上部署frps,家里的电脑部署frpc:
- 只要能访问云服务器,你就能通过 frp 提供的映射访问家里的电脑上的服务,实现远程操作
其他
- 装换表的生成和销毁都需要额外开销
- 通信过程中一旦NAT设备异常, 即使存在热备(备份系统或组件在主系统运行时已经在线并处于活动状态), 所有的TCP连接也都会断开