NAT

NAT(Network Address Translation,网络地址转换)是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程


NAT有三种类型:静态NAT(Static NAT),动态地址NAT(Pooled NAT),网络地址端口转换NAPT.


NAT可以分为Basic NAT和PAT:

Basic NAT只转化IP,不映射端口

- PAT除了转化IP,还做 端口映射,可以用于多个内部 地址映射到少量(甚至一个)外部地址。


目前常用的针对UDP的NAT 穿透(NAT Traversal)方法主要有:STUN、TURN、ICE、uPnP等



Full cone NAT
即著名的一对一(one-to-one)NAT
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。任意外部主机都能通过给eAddr:port2发包到达iAddr:port1
Address-Restricted cone NAT
限制地址,即只接收曾经发送到对端的IP地址来的数据包。
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。任意外部主机(hostAddr:any)都能通过给eAddr:port2发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:any. "any"也就是说端口不受限制

Port-Restricted cone NAT
类似受限制锥形NAT(Restricted cone NAT),但是还有端口限制。
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。一个外部主机(hostAddr:port3)能够发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:port3.


Symmetric NAT(对称NAT)
每一个来自相同内部IP与port的请求到一个特定目的地的IP地址和端口,映射到一个独特的外部来源的IP地址和端口。
同一个内部主机发出一个信息包到不同的目的端,不同的映射使用
外部主机收到了一封包从一个内部主机可以送一封包回来


类型检测:

第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?

第二步:检测客户端NAT是否是Full Cone NAT?

第三步:检测客户端NAT是否是Symmetric NAT?

第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?


NAT穿透:


一、转发:

                                      Server S
                              18.181.0.31:1234
                                     |
                                     |
              +----------------------+----------------------+
              |                                                           |
            NAT A                                                  NAT B
   A-S 155.99.25.11:62000                        B-S 138.76.29.7:31000
   A-B 155.99.25.11:62001                        B-A 138.76.29.7:31001
              |                                                           |
              |                                                           |
           Client A                                              Client B
        10.0.0.1:1234                                 10.1.1.3:1234

               ----------S转发A和B之间的消息------------



二、反向连接
                                   Server S
                            18.181.0.31:1235
                                         |
                                         |
            +----------------------+----------------------+
            |                                                           |
          NAT A                                                     |
    155.99.25.11:62000                                    |
            |                                                           |
            |                                                           |
         Client A                                              Client B
      10.0.0.1:1234                               138.76.29.7:1234

客户端B就只能通过服务器S来请求A做一个"反向"连接到客户端B,客户端A将打开一个与客户端B通讯的连接(在B的公网IP地址和端口号上).NAT A允许这个连接通过,因为这个连接起源于NAT A的内部,并且同时客户端B能够受这个连接因为B并不位于NAT之后. 


三、 UDP打洞


1).
                                Server S
                            18.181.0.31:1234
                                   |
                                   |
            +----------------------+----------------------+
            |                                                           |
          NAT A                                                 NAT B
    155.99.25.11:62000                            138.76.29.7:31000
            |                                                           |
            |                                                           |
         Client A                                              Client B
      10.0.0.1:1234                                 10.1.1.3:1234


A -------------(udp-packet)-------------->> B             A发送一个UDP包给B的公网IP

A -------------- S ------------------->> B                       A通过S邀请B给A发送UDP到公网IP

这样,一对UDP会话打开了,洞打好了!

双方此时都可以把对方介绍给其他主机,充当媒介


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值