p2p总结(五):探测NAT类型

完成“打洞”任务,需要一个“局外人”(前文中的S服务)来主持。要完成探测NAT类型的工作,还需引入更多的外部服务: 上图中描述的是一个Cone形NAT。msvrd(主服务main)就是前文中的S,psvrd是主管探测(probe)的服务 ...


p2p小结(四):TCP打洞

NAT只允许其内部的主机主动连接到外部主机,外部发起的连接请求会被NAT拒绝掉。这也就是说,若想跟一个处于NAT内部的主机建立连接,就算知道了NAT为该主机分配的共有IP和端口,也只能让这个NAT内的主机主动去连你才行。然而,若你本身也处于一个NAT之后的话,问题就变得更加复杂。

NAT的这种特性为p2p带来的困扰就在于:“一个peer无法自由地与另一个peer建立连接”,这是与p2p的思想相违背的。必须要实现一种机制来应对这个问题,让peer之间的互联变得没有障碍,仿佛NAT不存在一样,这就是所谓的“NAT穿越”。

(注:上面提到的“连接”是一个泛指,UDP和TCP通讯都统称为“连接”,TCP的连接成功,就是TCP定义的连接成功,UDP的连接成功,指的是发出UDP包后收到了对方的返回)。

上篇已对NAT穿越技术做了概述,其中与p2p相关的是Hole punching,即:“打洞”。这里总结基于TCP的打洞过程。

努力的大方向就是要让NAT中产生session,一个session就像一个“隧道”或者一个“洞”,在NAT上“凿”出这个“洞”,让NAT以外的数据包可以进来。

要完成 ...


p2p小结(三):NAT穿越

目前的NAT存在如下事实:

  • NAT所认可的连接只能由NAT以内的主机主动发起(即:当且仅当内部主机向外发包时NAT才会建立session记录),外部的连接请求将被拒绝,这里的“连接”是个泛指,建立UDP通信也是建立“连接”

  • 转换后的公有IP和端口号只有NAT自己知道,NAT内的相应主机对此一无所知

  • NAT工作在应用层以下,无法对应用层中携带的地址信息进行识别和转换

  • NAT有多种类型,不同类型的NAT对外来数据包提出了不同的约束规则,不符合规则的外来数据包将会被丢弃

NAT的这些特性为p2p应用或基于IP的语音和视频应用带来了巨大障碍,用技术手段越过这些障碍即所谓的“NAT穿越”,其目标就是解决下面几个问题:

  • NAT外部发起的连接请求如何到达内部主机:即使已明确知道内部主机对应的公有IP及端口号,处于NAT外部的主机也是无法直接连接到该内部主机的,而且,就算由于 ...


p2p小结(二):NAT

NAT即:Network Address Translation,是一种网络地址转换技术。该技术最初被用于简化重定向IP网络流量的相关工作,后来作为应对IPv4地址枯竭的关键技术被广泛使用,现在的NAT技术确切地说是NAPT,早期的Basic NAT只能做一对一的地址转换,意义不大,下面提到的NAT,如未做特殊说明,都是指NAPT

普遍的做法是将带有NAT功能的路由器部署在局域网的出口处,该路由器拥有ISP分配的一个公有IP,所有要外出的IP包都会由NAT转换为这个公有IP,然后再投递出去,同样,从外部返回的IP包也会经由NAT转换地址后再进入局域网。这样,只需一个公有IP就可以实现多台主机同时上网,从而大大减少了对公有IP的需求。

NAT所谓的“地址转换 ...


p2p小结(一):基本

因开发需要,最近对P2P技术进行了研究,总结如下:

基本概念

p2p是peer to peer(对等网络或对等技术)的简称,在p2p网络中的各个节点被称为peer(对等体)。简单地说,p2p技术是一种用于不同网络节点之间、不经过中继设备而直接交换数据或服务的技术。在p2p网络中,每个节点的地位都是相同的,具备客户端和服务器的双重特性,可以同时作为服务的使用者和服务的提供者。

p2p并非生事物,其理念自互联网诞生以来就存在了 ...