关于网络穿透

上过计算机网络的课,简单的认为,要访问非固定IP的某个主机,得到该主机在NAT表中记录的端口号即可。

今天突然想起,看了这个文章,有些新的认识。

1. NAT表的建立

首先,拥有固定IP的一级路由器,可以手动进行转发表的配置。

考虑比较一般的情况,转发表由一级路由自动分配。
此时,当内网中的主机向公网中发送数据(包)时,一级路由会自动分配一个转发表,主要内容包括(源IP,源端口,目的IP,目的端口)的一个表项。

建立表项的方式有两种。对于一个socket(绑定了某个端口),向公网中的两个不同地址发送数据(包)时,根据NAT表中目的端口号的不同生成形式分为:
a. Cone NAT。创建的两个表项拥有相同的目的端口号;
b. SymmetricNAT。创建的两个表项拥有不同的目的端口号。

(可以庆幸的是,现在绝大多数的NAT属于后者,即Cone NAT)

2. 穿透

定位穿透为两个没有固定IP的进程能够互相通信。

需要一个有固定IP的服务器来充当中间桥梁。

直观的认识:
两个进程通过服务器得知对方NAT表上的端口,就可以由任一方发起连接。

实际上,为了安全起见,NAT的转发只对来自表项中目的IP发来的数据包有效。因此,要真正的实现穿透,需要NAT转发表中有另外一个主机IP地址的的表项。

假设两个主机A、B,服务器S,NAT协议使用Cone NAT。在主机A、B,服务器S都在线时,穿透可以描述为:
S通知B向A发送数据;(这个操作的意义在于让B上级路由的NAT表上目的地址为A的表项)
B接收到S的通知,向A发送任意数据,并向S反馈已经向A发送数据;
S接收到来自B的反馈,向A发送消息(说明已经可以向B发送数据)
A接收来自S的消息,向B发起连接或发送数据。
然后通过心跳包维持连接。

3. 问题

a. 使用SymmetricNAT时,如何穿透?
b. 假设有一级路由器,如何抓取NAT表的实时内容?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值