Java 网络原理 ③-NAT || DHCP

news/2025/2/7 20:47:57/

 这里是Themberfue 

 上篇文章我们简单介绍了 IP 协议 的首部字段的含义,这节课我们将继续深入 IP 协议~~~


DHCP

  • 上节课我们提到,IPv4 使用点分十进制的方式管理地址,但是 IPv4 最多分配43亿个地址,早在2019年,IPv4 的地址就已经全部分配完了,为了解决这些问题,人们想到了一系列方法:动态IP分配、NATIPv6......
  • 动态IP分配:每台需要使用网络的机器的地址并不是每时每刻都是该台机器的,如果该机器未在使用网络,在不分配 IP 地址,此时就会空出一个,把这空出来的给另一个正在使用网络的机器,DHCP 便充当该角色,但 DHCP 的功能并非只有这个。
  • DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态 IP 分配指的是通过自动化方式(通常由专门的服务器完成)给网络中的设备分配 IP 地址,而不是手动为每台设备静态配置 IP 地址。这种方式主要通过 DHCP(动态主机配置协议) 来实现。下面详细介绍动态 IP 分配的原理、过程和优缺点。
  • 在大型网络中,手动为每台设备配置IP地址既繁琐又容易出错;而设备经常加入或离开网络IP 地址 资源需要灵活管理。动态 IP 分配使得网络管理员能够集中管理 IP 地址池,设备接入网络时自动获得 IP 地址,降低维护成本,提高网络的可管理性与灵活性。
  • 动态IP分配通过 DHCP 协议 自动为客户端分配 IP 地址 及相关网络配置信息,极大地简化了网络管理工作。它通过租约机制确保 IP 地址 资源的高效利用,同时为设备频繁加入和退出网络提供灵活支持。尽管存在对中心服务器依赖和安全问题,但通过恰当的管理和防护措施,动态 IP 分配已成为现代网络的标准配置方式。

DHCP协议的主要步骤

DHCP发现(DHCP Discover)

  • 当客户端(例如一台电脑或手机)首次连接网络时,它不知道可用的IP地址。
  • 客户端发送一个 DHCP Discover 广播消息,寻找局域网内的 DHCP服务器

DHCP提供(DHCP Offer)

  • 网络中的 DHCP服务器 收到广播后,从其IP地址池中挑选一个可用的IP地址,并发送一个 DHCP Offer 消息。
  • 该消息中包含了可分配的IP地址、子网掩码、网关、DNS服务器等配置信息,以及租约时间(lease time)。

DHCP请求(DHCP Request)

  • 客户端从收到的多个DHCP Offer中选择一个(通常第一个响应的),然后发送一个 DHCP Request 消息给选定的 DHCP服务器,确认请求该IP地址。
  • 这个消息也会被其他 DHCP服务器 收到,从而让它们知道客户端选择了某个服务器的配置。

DHCP确认(DHCP ACK)

  • 选定的 DHCP服务器 收到客户端的请求后,发送一个 DHCP ACK 消息,确认IP地址分配。
  • 客户端收到ACK后,就正式使用该IP地址,并根据租约时间使用该地址,直到租约到期或续租。

  • 上述提到的租约是什么
  • 租约(Lease):动态IP分配并非永久性的。分配给客户端的IP地址有一个租用期限(lease time)。在租期结束前,客户端可以发起续租请求;如果续租失败或客户端离网,DHCP服务器会将该IP地址收回,供其他设备使用。
  • 租期管理:租期机制确保了IP地址资源的有效利用,并防止由于设备长时间不更新状态而造成的资源浪费。
  • 集中管理DHCP服务器集中管理网络中的IP地址池和相关配置信息,一旦IP地址发生冲突或网络结构变化,管理员可以统一调整设置。

💎凡事皆有优劣,使用 动态 IP 分配也不例外

优点

  • 自动化管理:客户端自动获取IP地址,简化了网络配置工作。

  • 灵活性IP地址可以在设备间动态分配,适应设备频繁加入或离开的情况。

  • 降低错误:避免手动配置可能导致的地址冲突和错误配置问题。

  • 集中控制:管理员可以通过 DHCP服务器 集中管理整个网络IP地址和其他网络参数(如DNS、网关)。

缺点

  • 依赖中心服务器:如果DHCP服务器故障或不可达,新设备可能无法获得IP地址,导致网络接入受阻。

  • 租约管理带来的额外开销:租期到期后,设备需要发起续租操作,增加了网络交互次数。

  • 安全问题DHCP本身缺乏认证机制,可能受到攻击者伪装的DHCP服务器(如DHCP欺骗)的威胁。


DHCP 的应用场景非常丰富

  • 家庭网络:家用路由器内置DHCP服务器,自动为连接的电脑、手机等设备分配IP地址。
  • 企业网络:企业内部网络通过专用的DHCP服务器分配IP地址,并结合DNS、网络管理工具实现集中控制。

  • 移动网络:移动运营商利用动态IP分配管理大量的用户终端连接。

  • 公共Wi-Fi热点:在咖啡馆、机场等场所,公共Wi-Fi通常也依赖DHCP为访问者分配临时IP地址。


NAT 

  • 单纯靠动态 IP 分配解决 IPv4 地址短缺的问题是不够的。目前,NAT 机制才是解决 IPv4 地址短缺的可靠方案。
  • 在进入 NAT 前,学计算机的宝宝们有没有这样一个疑惑,我知道你的 IP 地址,你也知道我的,那我和你为什么不能直接通信,比如联机游戏不能直接连接,而是需要听过某些方法才可以一起娱乐的玩耍,这就是 NAT 机制造成的了~~~
  • NAT(Network Address Translation,网络地址转换) 是一种用于 IPv4 网络的技术,主要用于在私有网络(如家庭、公司局域网)与公有网络(如互联网)之间进行 IP 地址转换。它允许多个私有 IP 通过一个或多个公网 IP 访问互联网,从而缓解 IPv4 地址耗尽的问题,并提供一定的安全性。

  • NAT 机制将 IP 分为 公网IP/外网IP私网IP/内网IP,私网IP 在同一个局域网下不可重复,但在不同的局域网下可以重复,其表示范围通常在 10.*、172.16-172.31.*、192.168.*。公网IP 则必须是唯一的,除了 私网IP 表示的范围除外,其他都可以用来表示 公网IP


  • 在同一局域网下的设备,任何设备之间都是可以直接通信的,其本身不受 NAT 机制的限制。
  • 拥有 公网IP 的设备,每个设备之间也是可以直接通信的,因为其本身就是暴露在公共场合下,同样不受 NAT 机制的影响。
  • 处于不同局域网下的设备,设备A处于局域网A,设备B处于局域网B,设备A 和 设备B 是不可以直接进行通信的,这便是 NAT 机制的限制,如需通信,则需通过某些特殊手段才可进行通信。
  • 公网设备A 是不可以直接访问 私网设备B 的,如需让 公网设备 访问你的 私网设备,同样需要某些特殊手段。
  • 私网设备如何访问公网设备呢?通过网络地址映射,内网设备 192.168.100 访问 百度(220.181.38.148)NAT 会把数据包的源 IP192.168.1.100 改为你的设备绑定的 公网 IP(例如 203.0.113.1)。
  • 路由转发过程中会经过多个节点,这些节点可能会是多个 公网IP,其会进行多次地址转换吗?答案是不会的,在转换前,它会检查你的 源IP 是否为 私网IP,否则不进行 网络地址映射。
  • 返回的数据如何找到被替换之前的 源IP 呢?通过端口号查找,例如:
  • 192.168.1.100:5001 → 203.0.113.1:60001 → 220.181.38.148:80
  • 192.168.1.101:5002 → 203.0.113.1:60002 → 220.181.38.148:80
  • NAT 设备维护一个 NAT 映射表,记录私有 IP、端口号和公网 IP、端口号的对应关系。服务器返回数据时,NAT 设备根据 NAT 映射表,将目的 IP 和端口号修改回私有 IP 和端口号,并将数据包转发回正确的内网设备。

❓端口号是否会冲突

  • NAT网络地址转换) 中,如果多个内网设备同时访问外部网络,并且它们的源端口号相同,NAT 设备如何处理端口冲突呢?
  • 如果两个内网设备使用相同的源端口访问 相同的目标 IP 和端口NAT 设备会调整映射,避免冲突。
  • 1. 修改源端口:NAT 设备会动态修改源端口,确保映射唯一。
  • 例如:
    • 192.168.1.100:5000 → 203.0.113.1:60001 → 220.181.38.148:80
    • 192.168.1.101:5000 → 203.0.113.1:60002 → 220.181.38.148:80
  • NAT 设备在 NAT 映射表中记录新的端口号,并在返回数据时修改回原来的端口号。
  • 2. 使用五元组映射
  • 有些高级 NAT 设备不仅使用四元组,还会记录协议类型(TCP/UDP),实现五元组映射:
    • IP + 源端口 + 目标 IP + 目标端口 + 协议类型
  • 这样,即使两个设备的 IP 和端口相同,但访问的目标服务器不同,NAT 仍然可以区分。
  • 3. 使用多个 公网IP
  • 在大规模 NAT 设备(如 ISP 级 CGNAT)中,如果单个公网 IP 的端口资源耗尽,NAT 设备可能会分配多个公网 IP 来均衡负载。

❓端口号耗尽怎么办

  • 由于 端口号范围只有 0-65535,如果 NAT 设备的公网 IP 过少,而同时连接数过多,可能会导致端口资源耗尽。解决方案:

  • 引入多个公网 IP(负载均衡 NAT)。
  • 回收闲置端口(超时回收 NAT 映射)。
  • 限制 NAT 连接数(部分 ISP 会限制单个用户的 NAT 连接数)。

优点

  • 节省 IPv4 地址:多个设备共享一个公网 IP
  • 增强内网安全性:外部无法直接访问内网设备,提供一定的防火墙功能。
  • 灵活的 IP 管理:内网 IP 规划更加自由,无需公网 IP 资源。

缺点

  • 破坏端到端通信NAT 修改了 IP 地址,影响 P2P 应用、VoIP、在线游戏等需要直接通信的服务。
  • 增加网络延迟NAT 设备需要处理地址转换,增加了一定的延迟和计算开销。
  • 影响某些协议:如 FTP、SIP(VoIP 语音协议)等,需使用 NAT 穿透技术 才能正常工作。

NAT 穿透(NAT Traversal)

由于 NAT 阻止了外部网络主动访问内网设备,有些应用(如 P2P 下载、VoIP)需要额外技术来穿透 NAT

常见 NAT 穿透技术
  • STUN(Session Traversal Utilities for NAT让设备知道自己在公网的 NAT 地址,适用于对称 NAT 以外的情况。

  • TURN(Traversal Using Relays around NAT使用中继服务器转发数据,适用于严格 NAT 网络,但增加了服务器负担。

  • UPnP(通用即插即用)允许应用程序向路由器请求打开端口,实现内外部通信(但存在安全隐患)。

  • NAT-PMP(NAT 端口映射协议)Apple 提出的协议,可动态申请端口映射,类似 UPnP。


  • 具体解决 IP 协议 更多内容,我们下节再见~~~
  • 毕竟不知后事如何,且听下回分解 
  • ❤️❤️❤️❤️❤️❤️❤️

 


http://www.ppmy.cn/news/1570147.html

相关文章

FFmpeg(7.1版本)编译:Ubuntu18.04交叉编译到ARM

一、本地编译与交叉编译 1.本地编译 ① 本地编译:指的是在目标系统上进行编译的过程 , 生成的可执行文件和函数库只能在目标系统中使用。 如 : 在 Ubuntu中,本地编译的可执行文件只能在Ubuntu 系统中执行 , 无法在 Windows / Mac / Android / iOS 系统中使用 ; 在 Ubuntu…

图论- DFS/BFS遍历

DFS/BFS遍历 深度优先搜素(DFS)Vertex模版 - 遍历所有节点为什么成环会导致死循环呢临接矩阵和临接表版 - 遍历所有节点遍历所有路径 - 临接矩阵和临接表版 广度优先搜索(BFS)不记录遍历步数的需要记录遍历步数的需要适配不同权重边的 深度优先搜素(DFS) Vertex模版 - 遍历所有…

【低功耗 Power 学习专栏 -- isolation cell】

文章目录 SOC Isolation Cell1. Isolation Cell 的工作原理2. Isolation Cell 与 Shutdown Module、Always-On Module 之间的关系3. Isolation Cell 的 Primary Power 和 Secondary Power4. Isolation Cell 的插入位置5. Isolation Cell 示例6. 总结 SOC Isolation Cell 1. Iso…

SQL高级技巧:高效获取两表交集数据的三种方法(JOIN、IN、EXISTS)

一、引言 在SQL开发中,获取两表交集数据是常见的需求,而实现这一目标的主要方法有三种:JOIN、IN 和 EXISTS。虽然它们都能完成任务,但语法、性能和应用场景却各有不同。 我们将通过对比分析这三种方法的区别与优缺点&#xff0c…

idea整合deepseek实现AI辅助编程

1.File->Settings 2.安装插件codegpt 3.注册deepseek开发者账号,DeepSeek开放平台 4.按下图指示创建API KEY 5.回到idea配置api信息,File->Settings->Tools->CodeGPT->Providers->Custom OpenAI API key填写deepseek的api key Chat…

把bootstrap5.3.3整合到wordpress主题中的方法

以下是将 Bootstrap 5.3.3 整合到 WordPress 主题中的方法: 下载 Bootstrap 文件:从 Bootstrap 官网下载最新的 5.3.3 版本的 CSS 和 JavaScript 文件。 上传文件到主题目录:将下载的 CSS 文件上传到 WordPress 主题文件夹中的 /css 文件夹…

安装和卸载RabbitMQ

我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/SUWXdDb0UoCV86xP6b3c7qtMn6b 使用Ubuntu环境进行安装 一、安装Erlang 在安装RabbitMQ之前,我们需要先安装Erlang,RabbitMQ需要Erlang的语言支持 #安装Erlang sudo apt-get install erlang 在安装的过程中,会弹出一段信息,此…

【SOC估计】基于扩展卡尔曼滤波器实现锂离子电池充电状态估计matlab代码和报告

锂离子电池 SOC 估计技术介绍 在现代电子设备中,锂离子电池是核心的能量来源,准确估计其剩余电量(SOC)显得尤为关键。SOC 估计技术不仅能有效预测电池剩余电量,还能避免电池过度充放电,进而延长电池寿命&am…