目录
[NAT 网络地址转换](#NAT 网络地址转换)
[为什么情况三:不同局域网,设备A访问设备B,是不允许的 ?情况五(公网访问局域网)同理](#为什么情况三:不同局域网,设备A访问设备B,是不允许的 ?情况五(公网访问局域网)同理)
IP地址不够用了的两种解决方式
- 动态分配IP地址(上网时分配,不上网不分配)
- NAT网络地址转换【助理方案】
NAT 网络地址转换
核心:NAT 是个 "单向门 + 地址翻译官",只让内网设备主动往外跑,不让外网(或其他内网)的设备随便闯进来
把IP地址分为两类
- 内网IP,也叫"私网IP" (以10开头、172.16~172.31开头、以192.168开头的IP地址)
- ->(10.* 、172.16~172.31.* 、192.168.*)
- 外网IP,也叫"公网IP" -> 去除上面,剩下的IP地址
外网和内网的区别
- 外网IP是唯一的
- 内网IP在不同的局域网中(比如连同一个WiFi的地方),允许重复
NAT背景下,网络通信是如何进行的
- 情况一:同一个局域网下,设备A访问设备B,由于局域网内IP本身不允许重复,因此NAT不起作用,可以直接访问
- 情况二:公网设备A访问公网设备B,由于公网IP本身也不重复,因此NAT也不起作用,可以直接访问
- 情况三:不同局域网,设备A访问设备B,这是不允许的!NAT禁止这样的访问方式(具体原因后面解释)
- 情况四:公网设备A 访问 局域网设备B,NAT也是不允许的!(原因和解决方法后面解释)
- 情况五:局域网设备A 访问 公网设备B -> 通过 NAT(网络地址映射)实现
为什么情况三:不同局域网,设备A访问设备B,是不允许的 ?情况五(公网访问局域网)同理
- 用简单的例子来讲:
- 不同的局域网 -> 不同的小区
- 小区里的每户人家(内网设备,比如设备 A、设备 B),都只有 "小区内部门牌号"(内网 IP,比如 192.168.1.2)
- 这个门牌号只在自己小区里有用,出了小区没人认识(比如另一个小区也有 192.168.1.2,根本分不清是哪户)。
- 每个小区只有一个 "对外门牌号"(公网 IP,比如 203.0.113.5)
- 这是全世界唯一的标识,相当于小区在 "互联网大街" 上的地址。
- NAT 的核心规则是 "只认'自己人主动发起的请求' "
- 如果是小区 2 里的设备 B 主动访问互联网(比如刷视频、逛网页)
- 小区 2 的门卫会做两件事:
- 把 B 的 "内部门牌号"(192.168.1.3)翻译成 "对外门牌号"(203.0.113.6),告诉互联网;
- 记个 "小本本":"B(192.168.1.3)刚才去联系 XX 网站了,等对方回信,我要转发给 B"。
- 但现在是设备 A(小区 1)主动找设备 B(小区 2)
- A 的请求先到小区 2 的门卫(NAT)
- 门卫一看这个请求 ------"小本本上没记录啊!不是我们小区里任何人主动发起的
- 也不知道该转给哪户(小区 2 里可能有 10 台设备,都用内网 IP,请求里没写具体是哪台)"。
- 门卫的规则是 "陌生人上门,没预约就不让进"
- 于是直接把 A 的请求扔掉了
那公网设备A怎么访问局域网设备B呢?
- 如果B想在电脑上搭建一个能让外网访问的服务器
- 需要采取一些特殊手段,比如通过"内网穿透"、VPN(虚拟私人网络)
- 其实以上的手段和NAT不冲突,本质上是借用其他带有公网的设备进行转发
内网穿透
举个栗子~
- 通过内网穿透程序,在家的服务器(例如端口号2201)和云服务器之间,建立一个TCP长连接
- 通过内网穿透程序,在云服务器上搞一个 与家里端口号2201 对应的端口号13306
- 我人在别处,我通过访问云服务器的13306端口
- 我的请求就会被云服务器,通过刚才的TCP连接,转发到我家里服务器的3306端口
使用NAT进行网络通信的过程图
同一个局域网中的两个设备访问外网的A服务器
- 私网IP 第一次经过公网路由器的时候-> 触发NAT(网络地址映射)->换马甲 ->IP地址变成公网路由器的IP地址
- 私网IP只有第一次到公网路由器时才会触发 网络地址映射,之后就一直使用这个公网IP与外界进行交互
- 现实中,同一个局域网中的 若干设备 会共用同一个公网IP->这样IP地址就够用了
路由器触发NAT地址替换时,自身会维护一个"哈希表"结构,来记录替换的映射关系
- 端口号 ,可以用来区分一个主机上的不同程序
- 也可以用来区分不同主机上的不同程序
服务器返回响应的过程
- 当服务器的IP数据报根据目的公网IP 到达 目标路由器后,
- 会去哈希表中,根据端口号查表,找到私网中的目的设备,再把数据转发给目的设备
若两个设备的端口号一样咋办?
- 把端口号放进哈希表的时候发现,有两个一样的端口号,操作系统就当场再分配一个空闲的端口号
- NAT在进行地址映射的时候,端口号是可以随意修改的
- 反正就是会确保我 发到外网中的端口号 肯定是不一样的
太棒了!你居然耐心地看完了这些知识!
有这个毅力你做什么都能成功的!(๑•̀ㅂ•́)و✧
下节再见✿✿ヽ(°▽°)ノ✿~




