IP穿透

内网穿透即NAT穿透

img

基础NAT:

静态NAT:一个公网ip对应一个内部ip,一对一转换

动态NAT:n个公网ip对应m个内部ip不固定的一对一转换

NAPT:(有点类似端口映射功能)

现在基本使用这种又称为对称和锥形NAT

  1. 完全圆锥形NAT:类似于端口映射,某个私网地址为192.168.23.20:4000发至公网的请求都映射为某一个公网地址1.2.3.4:80,192.168.23就可以收到从任意外部主机发到公网地址1.2.3.4:80的所有数据包

  2. 受限制圆锥形NAT:有一个作为服务器的设备 ip为1.2.3.4,同一私网下端口192.168.23.20:4000所有请求都映射到公网的ip2.2.2.2:80端口,只有私网192.168.23.20:4000向服务器1.2.3.4发出一个数据包,私网才能接收从公网2.2.2.2:80发来的数据包

  3. 端口受限制型锥形三种:私网ip192.168.23.22:50映射到外网的服务器ip192.168.2.1:50、外部主机ip 192.168.4.6:50。

    过程 首先私网->外部主机,然后私网才能接收外部主机向其外部映射地址192.168.2.1:50发送的数据包

检测NAT类型

打洞技术(建立映射关系)

UDP打洞

1、双方都通过UDP与服务器通讯后,网关默认就是做了一个外网IP和端口号 与你内网IP与端口号的映射,这个无需设置的,服务器也不需要知道客户的真正内网IP 
2、用户A先通过服务器知道用户B的外网地址与端口 
3、用户A向用户B的外网地址与端口发送消息, 
4、在这一次发送中,用户B的网关会拒收这条消息,因为它的映射中并没有这条规则。 
5、但是用户A的网关就会增加了一条允许规则,允许接收从B发送过来的消息 
6、服务器要求用户B发送一个消息到用户A的外网IP与端口号 
7、用户B发送一条消息,这时用户A就可以接收到B的消息,而且网关B也增加了允许规则 
8、之后,由于网关A与网关B都增加了允许规则,所以A与B都可以向对方的外网IP和端口号发送消息

在这里插入图片描述

TCP打洞

tcp打洞也需要NAT设备支持才行。
tcp的打洞流程和udp的基本一样,但tcp的api决定了tcp打洞的实现过程和udp不一样。
tcp按cs方式工作,一个端口只能用来connect或listen,所以需要使用端口重用,才能利用本地nat的端口映射关系。(设置SO_REUSEADDR,在支持SO_REUSEPORT的系统上,要设置这两个参数。)

TCP因为三次握手原因,需要注意时序性,可能会掉线

过程:

nat后的两个peer,A和B,A和B都bind自己listen的端口,向对方发起连接(connect),即使用相同的端口同时连接和等待连接。因为A和B发出连接的顺序有时间差,假设A的syn包到达B的nat时,B的syn包还没有发出,那么B的nat映射还没有建立,会导致A的连接请求失败(连接失败或无法连接,如果nat返回RST或者icmp差错,api上可能表现为被RST;有些nat不返回信息直接丢弃syn包(反而更好)),(应用程序发现失败时,不能关闭socket,closesocket()可能会导致NAT删除端口映射;隔一段时间(1-2s)后未连接还要继续尝试);但后发B的syn包在到达A的nat时,由于A的nat已经建立的映射关系,B的syn包会通过A的nat,被nat转给A的listen端口,从而进去三次握手,完成tcp连接。

ICE

yn包会通过A的nat,被nat转给A的listen端口,从而进去三次握手,完成tcp连接。

ICE

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值