【原创】IP摄像头技术纵览(七)—P2P技术—UDP打洞实现内网NAT穿透
本文属于《IP摄像头技术纵览》系列文章之一:
Author: chad
Mail: linczone@163.com
本文可以自由转载,但转载请务必注明出处以及本声明信息。
NAT技术的实际需求在10几年前就已经出现,为了解决这个问题,10几年来全世界的牛人早已经研究好了完整的解决方案,网上有大量优秀的解决方案文章,笔者自知无法超越,所以秉承拿来主义,将优秀文章根据个人实验及理解整理汇录于此,用于解释IP摄像头整个技术链路。
P2P(peer-to-peer, 点对点技术)又称对等互联网络技术,研究该技术的原因在于:首先我们不希望我们的视频数据通过服务器中转,这样容易造成隐私泄漏;再者,如果我们自己是IP摄像头供货商,通过服务器中转的方式也会增加我们的产品成本,毕竟当用户数量非常庞大时,服务器数量以及带宽都是一笔不小的开销。基于这两点,可以说P2P通信方式是IP摄像头实现的最好方式。而P2P通信中最重要的一点就是NAT(Network Address Translation,网络地址转换)穿透。
本文主要内容包含:P2P通信与网络设备的关系、不同的网络设备特征对P2P产生的影响、网络地址转换(NAT)的类型、NAT类型的检测方法、协议防火墙的突破方法、隧道技术、对于不同的NAT类型采取的穿透方法。
目前P2P通信在穿透上至少存在着两个问题:防火墙穿透和NAT穿透,两者对于网络访问的限制是处于不同角度而实现的,其中防火墙是基于网络数据传输安全上的考虑,其行为主要表现为对网络协议和访问端口的限制,实际上每种限制都包含了两个方向:进和出。而NAT则是基于网络地址转换的实现对内网主机进行的保护,目前来说NAT的存在至少存在以下两方面的意义:解决IPV4地址 匮乏的问题和保护网内主机的目的,所以即使将来IPV6解决了IP地址数量上的问题,但出于对内网主机的保护,NAT仍然有其存在的必要。
综上所述,要实现一个完善的P2P程序必须至少突破以上两个方面的限制,当然,实际情况会存在一些无法突破的情况,比如双方都是对称型NAT或对称型与端口限制型NAT的通信,对于此类问题在实际开发时可使用服务器转发或代理服务来处理。这篇文章的目的是提出一个能够在两个NAT设备内部的主机间建立直接的Internet连接的方法,同时又尽量不依赖于第三方主机。
1、NAT简介
NAT(Network Address Translation,网络地址转换)技术的出现从某种意义上解决了IPv4的32位地址不足的问题,它同时也对外隐藏了其内部网络的结构。NAT设备(NAT,一般也被称为中间件)把内部网络跟外部网络隔离开来,并且可以让内部的主机可以使用一个独立的IP地址,并且可以为每个连接动态地翻译这些地址。此外,当内部主机跟外部主机通信时,NAT设备必须为它分配一个唯一的端口号并连接到同样的地址和端口(目标主机)。NAT的另一个特性是它只允许从内部发起的连接的请求,它拒绝了所有不是由内部发起的来到外部的连接,因为它根本不知道要把这个连接转发给内部的哪台主机。
NAT必须考虑路由器的三个重要的特性:透明的地址分配、透明路由、ICMP包负载解析。
地址分配是指在一个网络会话开始的时候为内部不可以路由的地址建立一个到可路由地址的映射。NAT必须为原地址和目标地址都进行这样的地址分配。NAT的地址分配有静态的和动态的方式。静态的地址分配必须预先在NAT中定义好,就比如每个会话都指派一对<内部地址,外部端口>映射到某对<外部地址,外部端口>。相反地,动态的映射在每次会话的时候才定义的,它并不保证以后的