完成“打洞”任务,需要一个“局外人”(前文中的S服务)来主持。要完成探测NAT类型的工作,还需引入更多的外部服务:
上图中描述的是一个Cone形NAT。msvrd(主服务main)就是前文中的S,psvrd是主管探测(probe)的服务 ...
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以外的数据包可以进来。
要完成 ...
目前的NAT存在如下事实:
NAT所认可的连接只能由NAT以内的主机主动发起(即:当且仅当内部主机向外发包时NAT才会建立session记录),外部的连接请求将被拒绝,这里的“连接”是个泛指,建立UDP通信也是建立“连接”
NAT工作在应用层以下,无法对应用层中携带的地址信息进行识别和转换
NAT的这些特性为p2p应用或基于IP的语音和视频应用带来了巨大障碍,用技术手段越过这些障碍即所谓的“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是peer to peer(对等网络或对等技术)的简称,在p2p网络中的各个节点被称为peer(对等体)。简单地说,p2p技术是一种用于不同网络节点之间、不经过中继设备而直接交换数据或服务的技术。在p2p网络中,每个节点的地位都是相同的,具备客户端和服务器的双重特性,可以同时作为服务的使用者和服务的提供者。
p2p并非生事物,其理念自互联网诞生以来就存在了 ...