【JavaEE初阶】IP协议-IP地址不够用了咋办?

目录

IP地址不够用了的两种解决方式

[NAT 网络地址转换](#NAT 网络地址转换)

把IP地址分为两类

外网和内网的区别

NAT背景下,网络通信是如何进行的

[为什么情况三:不同局域网,设备A访问设备B,是不允许的 ?情况五(公网访问局域网)同理](#为什么情况三:不同局域网,设备A访问设备B,是不允许的 ?情况五(公网访问局域网)同理)

那公网设备A怎么访问局域网设备B呢?

内网穿透

使用NAT进行网络通信的过程图

同一个局域网中的两个设备访问外网的A服务器

服务器返回响应的过程

若两个设备的端口号一样咋办


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 的门卫会做两件事:
    1. 把 B 的 "内部门牌号"(192.168.1.3)翻译成 "对外门牌号"(203.0.113.6),告诉互联网;
    2. 记个 "小本本":"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在进行地址映射的时候,端口号是可以随意修改的
  • 反正就是会确保我 发到外网中的端口号 肯定是不一样的

太棒了!你居然耐心地看完了这些知识!

有这个毅力你做什么都能成功的!(๑•̀ㅂ•́)و✧

下节再见✿✿ヽ(°▽°)ノ✿~

相关推荐
醇氧2 小时前
MAC 安装openJDK8
java·开发语言
海阔天空在前走2 小时前
JAVA中六种策略模式的实现
java·开发语言·策略模式
我最厉害。,。2 小时前
内网对抗-隧道技术篇&防火墙组策略&HTTP反向&SSH转发&出网穿透&CrossC2&解决方案
网络协议·http·ssh
汤愈韬2 小时前
网络通信原理
网络·网络安全
Slow菜鸟2 小时前
Java后端常用技术选型 |(五)可视化工具篇
java
青衫码上行2 小时前
【Java Web学习 | 第十篇】JavaScript(4) 对象
java·开发语言·前端·javascript·学习
q***69772 小时前
快速在本地运行SpringBoot项目的流程介绍
java·spring boot·后端
随缘体验官2 小时前
【无标题】测试一下
java
门思科技2 小时前
LoRaWAN通信协议详解:架构、加密机制与核心应用
运维·服务器·网络·嵌入式硬件·物联网