简单理解 NAT

简单理解 NAT

写这篇文章仅供自己参考 =W=

1. 简介

  • NAT(NetworkAddressTranslation),即网络地址转换。利用网关,将不能访问外部网络的IP地址转换为可访问外部的IP地址,从而实现内部网络到外部网络的访问。
  • 分类
    • 静态NAT(Static NAT)
    • 动态NAT(Pooled NAT)
    • 网络地址端口转换NAPT(Port-Level NAT)-> 最常用
  • 主要功能
    • 数据包伪装、平衡负载、端口转发、透明代理
  • 例子
    • 平时运营商为大家安装的宽带(一般情况下,大家拥有的都是内网IP,统一由一个拥有公网IP的NAT网关进行转换,保证大家在Internet的访问)
    • 虚拟机的NAT转换

2. 静态NAT(Static NAT)

  • 特征
    • 一个内网IP对一个外网IP,不会改变
    • 外网可直接访问内网
  • 示意图
    静态NAT示意图
  • 解释(举栗子)
    • 服务器A发出访问服务器X的请求(src=192.168.0.101, dst=14.215.177.39),由于在内网,请求先被发到网关处(192.168.0.1)
    • NAT网关接收到请求,根据所设置的IP映射表,转换请求(src=14.215.177.21, dst=14.215.177.39),将请求通过网络发送至服务器X
    • 服务器X收到请求,进行响应(src=14.215.177.39, dst=14.215.177.21),请求会先走到NAT网关处
    • NAT网关接收到请求,根据所设置的IP映射表,转换请求(src=14.215.177.39, dst=192.168.0.101)
    • 服务器A顺利收到服务器x的响应

3. 动态NAT(Pooled NAT)

  • 特征
    • 一个内网IP对一个随机外网IP,因为存在外网IP池
    • 外网难以直接访问内网
  • 示意图
    动态NAT示意图
  • 解释
    • 由于拥有的外网IP较少,每台内网服务器不能都分到外网IP。这个时候大家需要共享IP,使用时从IP池中分配,不用了就释放。
    • 传输方式和静态相似,需要注意一下几点:
      • 在NAT网关处分配IP后,NAT网关会做IP映射记录,用于将外部服务器的响应发送到正确的内网IP服务器
      • 在NAT网关处分配IP后,一定时间内不使用,将会抹去映射记录,该IP进入空闲状态,可以被分配给其他内网服务器
      • 由于内网访问外网的IP是动态的,所以外网向内网发送请求时难以成功

4. 网络地址端口转换NAPT(Port-Level NAT)

  • 特征
    • 多个内网IP对一个外网IP的不同端口
    • 外网难以直接访问内网
  • 示意图
    网络地址端口转换NAPT示意图
  • 解释
    • NAT网关只需一个外网IP即可完成外网访问转换,极大地降低了外网IP的使用量
    • NAPT传输方式依旧和前面的相似,只有一个外网IP的情况下,将映射关系改为了“内网IP -> 随机端口”,用端口来区分内网IP,保证正确的解析外网服务器的响应
    • NAPT内部还有几个分类:全锥NAT、限制性锥NAT、端口限制性锥NAT、对称NAT等

5. 一些问题

  • 平时运营商给个人用户设置网络,采用的是什么方式?
    • 采用NAPT,这样节约公网IP
  • 如果使用的是网络地址端口转换NAPT,外网真的没法向内网发起请求吗?
    • 可以,通常有2种方式:
      • 服务器中转:
        • 在公网准备一台服务器S,内网服务器A与服务器S保持心跳连接。
        • 外网服务器B若想要访问内网服务器A,需向服务器S发起请求,服务器S再向内网服务器A获取资源,返回给外网服务器B。
        • 所有的数据传输都需要经过服务器S,性能较低。内网穿透方式不行时,可以这样干。
      • 内网穿透:
        • 在公网准备一台服务器S,服务器A与服务器S保持心跳连接,S获得服务器A的IP、Port。
        • B服务器向服务器S发送消息,表明它想访问服务器A。S获得服务器B的IP、Port,同时向A发送B的IP、Port,向B发送A的IP、Port。
        • 服务器A通过从服务器S处获得的B的IP、Port向服务器B发送消息。显然因为服务器B的NAT网关没有相关映射记录,服务器B收不到该消息。但是因为服务器A发送了这样一条消息,服务器A的NAT网关会记录下 A -> B的映射。
        • 同时服务器B也会向A发送消息,此时服务器B的NAT网关会记录下 B -> A的映射
        • 至此,服务器A与服务器B的网络通了
        • 成功率:
          • 静态端口映射的NAT成功率较高
          • 动态端口映射的NAT成功率较低
  • 描述一下NAT的功能?
    • 数据伪装:内网IP地址通过NAT被转换为外网IP,外网服务器只知道数据是NAT转换后的外网IP地址传过来的,这样内网服务器不用暴露在外网。
    • 平衡负载:NAT网关将内网多台服务器IP映射到一个外网IP,当外网服务器直接请求外网IP时,NAT网关会对内网的服务器进行轮询,再响应外网服务器,这样就实现了负载均衡。但是NAT无法感知内网服务器故障,即便内网服务器出了问题,依然会转发请求。
    • 端口转发:为内网某个服务器配置端口映射,例如 9000端口 -> 内网服务器A(192.168.0.100),即可将访问NAT网关该9000端口的请求转向内网服务器A。
    • 透明代理:内网服务器只需要设置默认网关为该NAT网关即可,NAT网关再去代理与外网连接,内网完全感受不到代理的存在。

6. 其他

  • Linux监控HTTP/TCP连接(三次握手/四次挥手)
    • 安装:yum install tcpdump
    • 开启监控:tcpdump -nn -i eth0 arp or port 80 (即监控网卡eth0的arp协议或80端口)
    • 发送请求:
      • curl www.baidu.com 80
      • 或 arp -d 192.168.0.1 && nc www.baidu.com 80
  • Windows监控HTTP/TCP连接(三次握手/四次挥手)
    • windows平台需要安装windump
    • 开启监控
      • 列出本机网卡:WinDump.exe -D
      • 监控某个网卡关于www.baidu.com的连接:WinDump.exe -nn -i “\Device\NPF_{34D20894-77D0-40ED-ACE2-B658D462584B}” host “www.baidu.com” and “tcp”
    • 发送请求
      • curl www.baidu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值