TCP/IP卷一:41---NAT之(NAT针孔和打孔)

  • 鉴于将ALG和NAT编辑器放置于NAT设备中的复杂性,一种可替代的方法是应用程序自已尝试执行NAT穿越。此时应用程序需要确定其流量通过NAT时使用 的外部IP地址和端口号,并对其协议操作做相应的修改

直接通信:

  • 如果一个应用程序分布在整个网络中(例如,有多个客户端和服务器,其中一些并不在NAT后),服务器可为位于NAT后的客 户端之间传递(拷贝)数据,或者使这样的客户端发现对方的NAT绑定,并促成它们之间的直接通信
  • 使用一台服务器在客户端之间进行数据拷贝是不得已的选择,因为这其中会涉及负载和潜在的滥用。因此,大多数时候是尝试提供一些方法,以便允许客户机之间直接通信
  • 直接通信的方法在对等文件共享、游戏和通信应用中已经非常广泛
  • 然而,这种技术往往局限于某一特定的应用程序,这意味着每一个需要NAT穿越的新分布式应用程序,均倾向于实现自已的方法。这可能会导致冗余和互操作性问题,最终增加了用户的挫败感和成 本

NAT穿越的标准:

  • 为了应付这种情况,已经建立了一个处理NAT穿越的标准方法,它取决于几个我们在下面的讨论的不同从属协议

现在,我们先从其中一个为分布式应用所采用、健壮但尚未成为标准的方法开始。紧接着,我们来标准化NAT穿越的框架

一、针孔和打孔

针孔:

  • 前面介绍,一个NAT通常包括流量重写和过滤功能。当一个NAT映射创建时,针对特 定应用程序的流量通常允许在NAT的两个方向传输。这种映射是临时的,通常只适用于在 执行时间内的单一应用程序。这类映射被称为针孔
  • 因为它们被设计为只允许通过 一部分的临时信息流量(例如,一对IP地址和端口号组合)。随着程序之间的通信,针孔通常动态地创建和删除

打孔:

  • 通过采用针孔试图使位于NAT之后的两个或两个以上的系统直接通信的方法称为打孔

打孔步骤:

  • 为了打一个孔,一个客户机需通过一个向外的连接来访问一台已知的服务器,这样便在本地 的NAT中创建了一个映射
  • 当另一个客户机访问同一台服务器时,由于服务器和每个客户机均有连接,因此知道它们的外部寻址信息。它然后在客户机之间交换它们的外部寻址信息
  • 一旦知道了这个信息,一个客户机便可以尝试直接连接到其他的客户机

流行的对等应用Skype便使用了这种方法(和其他一些方法)

图例:

  • 假设客户机A访问服务器S1,然后客户机B也访问服务器S1
  • S1会知道 A和B的外部寻址信息:分别为IPv4地址192.0.2.201和203.0.113.100
  • 将B的信息发送给 A (反之亦然),A可以尝试利用B的外部地址直接联系B (反之亦然)。这是否有效取决于已,部署的NAT类型。
  • 对于连接(A,Sl),其NAT状态在N1中,对于连接(B,Sl),其NAT状,态同时在N2和N3中
  • 如果所有NAT独立于端点,这些信息便足够使直接通信成为可能。 由于任何其他类型的NAT将不会接受除了S1之外的流量,从而阻止直接通信。换句话说,如果两台主机均位于具备依赖于地址或者同时依赖于地址和端口映射行为的NAT之后,那么这种方法是行不通的

二、单边的自地址确定

待续

三、NAT的会话穿越工具

待续

四、利用NAT中继的穿越

待续

五、交互连接建立

待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董哥的黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值