当前位置: 首页 > news >正文

【网络】私有IP和公网IP的转换——NAT技术

目录

引言

NAT工作机制​编辑

NAT技术的优缺点

优点

缺点


个人主页:东洛的克莱斯韦克-CSDN博客

引言

公网被子网掩码划分为层状结构,一个公网IP的机器又可以用很多私有IP搭建内网。在日常生活场景中用的都是私有IP,例如手机,笔记本,家用路由器,学校的机房等等。一般都是由运营商的路由器(公网IP)为我们搭建内网,如果想要访问公网,自己肯定拿到了目标主机的公网IP,那么如果自己的源IP是私有IP响应的数据就无法返回,因为私有IP在全网内不具有唯一性。

所以就有了私有IP和公网IP转化的技术——NAT技术。

NAT工作机制

以10.0.0.10的主机与163.221.120.9的主机进行通信为例。利用NAT途中的NAT路由器将发送源地址从10.0.0.10转换为全局的IP地址,(202.244.174.37)再发送数据。反之,当包从地址163.221.120.9发过来时,目标地址(202.244.174.37)先被转换成私有IP地址10.0.0.10以后再被转发。

在NAT(NAPT)路由器的内部,有一张自动生成的用来转换地址的表。当,10.0.0.10向163.221.120.9发送第-个包时生成这张表,并按照表中的映射关系,进行处理。

当私有网络内的多台机器同时都要与外部进行通信时,仅仅转换IP地址,人们不免担心全局IP地址是否不够用。这时采用包含端口号一起转换的方式(NAPT)可以解决这个问题。

NAT技术的优缺点

优点

IP地址资源节约

共享公共IP地址:NAT允许多个内部设备共享一个或多个公共IP地址,这极大地缓解了IPv4地址枯竭的问题。一个公司或家庭可以通过一个公共IP地址让多个设备访问互联网。


减少对IP地址的需求

NAT使得内部网络中的设备可以使用私有IP地址,而这些地址不必在全球唯一,因此减少了对全球唯一的公共IP地址的需求。


增强安全性与隐私

NAT隐藏了内部网络的拓扑和IP地址,使得外部网络无法直接访问内部设备。这提供了一层额外的安全保护,防止外部攻击者轻易发现内部网络中的设备。NAT默认只允许内部设备发起的通信通过,而外部设备无法直接向内部设备发送请求,除非进行了特殊配置(如端口转发),这有助于阻止未经授权的入侵。


灵活性与兼容性

NAT支持动态地址映射(Dynamic NAT),即内部设备不必固定使用某个公共IP地址,而是在需要时动态分配。这种灵活性使得NAT适应多种应用场景。尽管NAT可能对某些特定协议(如SIP、FTP)造成影响,但大多数互联网协议在NAT环境下都能正常工作。


应用广泛

NAT广泛应用于家庭路由器和企业防火墙中,使得配置简单且无需为每个设备分配唯一的公共IP地址。NAT在某些情况下也可以用于负载均衡和高可用性设置,分配流量到多个服务器,提升系统可靠性。


缺点


复杂性与维护难度

对于双向通信的应用(如P2P、VoIP),NAT的配置和维护可能比较复杂,特别是在处理入站流量时,需要配置端口转发规则。某些应用和协议在NAT环境下可能遇到“穿透”问题,导致通信失败。这通常需要使用STUN(Session Traversal Utilities for NAT)或TURN(Traversal Using Relays around NAT)等技术来解决。


影响性能

NAT需要对每个数据包进行地址和端口转换,这会增加处理延迟,并消耗额外的CPU资源,可能对网络性能产生一定影响,特别是在大规模网络环境中。在某些需要低延迟和高带宽的应用(如实时视频会议、在线游戏)中,NAT可能成为性能瓶颈。


对某些协议的影响

由于NAT改变了IP地址和端口信息,某些嵌入IP地址信息的协议(如FTP、SIP、IPsec)可能会在NAT环境下工作不正常,需要使用额外的代理或ALG(Application Layer Gateway)来处理。NAT使得外部设备难以直接访问内部网络中的设备,这对某些需要点对点通信的应用来说是不利的,如视频通话、文件共享等。


管理与监控难度

NAT会改变数据包中的源或目的地址,可能增加网络流量监控和故障排除的难度。对于安全审计和日志分析,这种修改可能导致不准确或不完整的记录。当内部多个设备共享一个公共IP时,日志记录变得复杂,追踪具体的内部设备活动更加困难。

http://www.lryc.cn/news/426451.html

相关文章:

  • java 面试 PDF 资料整理
  • 初步认识Linux系统
  • JavaScript AI 编程助手
  • 达梦数据库的系统视图v$datafile
  • Triton/window安装: triton-2.0.0-cp310-cp310-win_amd64.whl文件
  • 应急响应-DDOS-典型案例
  • JAVA学习之知识补充(下)
  • qt生成一幅纯马赛克图像
  • python循环——九九乘法表(更加轻松的理解循环结构)
  • UDS诊断系列之十八故障码的状态掩码
  • 【jvm】直接引用
  • PythonStudio 控件使用常用方式(二十七)TActionList
  • PDF 转Word 开源库
  • Docker - 深入理解Dockerfile中的 RUN, CMD 和 ENTRYPOINT
  • Python 函数式编程 内置高阶函数及周边【进阶篇 3】推荐
  • 【Rust光年纪】探秘Rust GUI库:从安装配置到API概览
  • Element plus部分组件样式覆盖记录
  • 重塑业务生态,Vatee万腾平台:引领行业变革的新引擎
  • 标准术语和定义中的【架构】应该如何描述
  • 华为鸿蒙Core Vision Kit 骨骼检测技术
  • Table API SQL系统(内置)函数System (Built-in) Function详解
  • 一键运行RocketMQ5.3和Dashboard
  • HAL STM32 SG90舵机驱动控制
  • 【Kubernetes】k8s集群图形化管理工具之rancher
  • AI编程系列一1小时完成链家房价爬虫程序
  • 【JavaEE初阶】文件内容的读写—数据流
  • Spring Boot项目中使用Sharding-JDBC实现读写分离
  • 【网络安全】SSO登录过程实现账户接管
  • Admin.NET源码学习(3:LazyCaptcha使用浅析)
  • 在原生未启用kdump的BCLinux 8系列服务器上启用kdump及报错处理