UDP穿透之NAT类型分析

原创 2007年10月01日 14:23:00

 NAT,即网络地址转换,是指在一个网络内部,根据需要可以随意自定义的IP地址,而不需要经过申请。而当内部的计算机要与外部internet网络进行通讯时,NAT设备(比如:路由器)负责将其内部的IP地址转换为合法的IP地址并进行通信。

从功能上来说,NAT可以分为:传统NAT,双向NAT(Bi-Directional NAT),两次NAT(Twice NAT),多宿主NAT(Multihomed NAT),但是市场上现在最多的是传统NAT,尤其是NAPT设备,所以本文的穿透也是针对NAPT展开,其类型主要细分为以下四种类型:

1) 非对称NAT(Cone NAT)

其下又细分为:

a) 全ConeNAT(Full Cone NAT)

打洞创建原则:向外部任意IP发送一个package,就形成了一个映射,即创建了一个洞。

接收数据原则:只要过来的数据是发送到打洞的PC,就可以顺利通过。

b) 限制性ConeNAT (Restricted Cone NAT)

打洞创建原则:向外部某个IP发送一个package,就形成了与此IP的一个映射。

接收数据原则:满足两个条件:1,此数据来自此IP;2,此数据要发送到打洞的PC。

c) 端口限制性 ConeNAT(Port Restricted Cone NAT)

打洞创建原则:向外部某个IP的某个Port发送一个package,就形成了与此IP/Port对的一个映射。

接收数据原则:满足两个条件:1,此数据来自此IP的此Port;2,此数据要发送到打洞的PC。

2) 对称NAT(Symmetric NAT)对称NAT是指把所有来自相同内部IP地址和端口号,到特定目的1P地址和端口号的请求映射到相同的外部TP地址和端口。如果同一主机使用不同的 源地址和端口对,发送的目的地址不同,则使用不同的映射。只有收到了一个IP包的外部主机才能够向该内部主机发送回一个UDP包。对称的NAT不保证所有 会话中的(私有地址,私有端口)和(公开IP,公开端口)之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。

 传统P2P文件传输在NAT检测方面比较薄弱,没有一个系统全面地检测方法,其中对对称型NAT的检测几乎没有。本文这里会运用连接服务器和NAT检测辅助服务器对各种常用NAT做一个全面地检测,尤其关注对称型NAT。    

下图是检测的流程图:

 其中:连接服务器为A,NAT检测服务器为B。

第一步:当一个接收客户端(Endpoint-Receiver ,简称 EP-R)需要接收文件信息时,在其向连接服务器发送文件请求的同时紧接着向检测服务器发送NAT检测请求。此处再次强调是“紧接着”,因为对于对称型 NAT来说,这个操作可以直接算出其地址分配的增量(⊿p)。

第二步:当EP-R收到A或B的反馈信息时发现其外部地址与自身地址不同时就可以确定自己在NAT后面;否则,就是公网IP。

第三步:由服务器A向B发送其获得的EP-R的外部映射地址(IPa/Porta),服务器B获得后进行比较,如果端口不同,则说明这是对称型NAT,同时可以直接计算出其分配增量:

⊿p=Portb-Porta

第四步:如果端口号相同,则由B向EP-R的Porta发送连接请求,如果EP-R有响应,则说明EP-R没有IP和Port的限制,属于全ConeNAT类型。

第五步:如果没有响应,则由服务器B使用其新端口b’向EP-R的Portb端口发送连接请求,如果有响应,则说明EP-R只对IP限制,属于限制性ConeNAT类型;否则就是对IP和port都限制,属于端口限制性ConeNAT类型。    

通过上述五步基本可以全部检测出EP-R是否在公网,还是在某种NAT后面。

 

NAT的完全分析及其UDP穿透的完全解决方案

NAT的完全分析及其UDP穿透的完全解决方案 一:基本术语防火墙防火墙限制了私网与公网的通信,它主要是将(防火墙)认为未经授权的的包丢弃,防火墙只是检验包的数据,并不修改数据包中的IP地址和TCP/U...
  • colinchan
  • colinchan
  • 2006年05月08日 13:18
  • 43964

【转载】NAT穿透的详细讲解及分析

这篇文章看了很有收获,很多东西都和自己的猜想一样。于是转过来分享一下,感谢博主! 摘自:http://bbs.pediy.com/thread-131961.htm 一、什么是NAT?为什么要...
  • liqinghan
  • liqinghan
  • 2017年04月24日 10:46
  • 698

P2P之UDP穿透NAT的原理与C#实现

P2P之UDP穿透NAT的原理与实现声明:原文来自P2P中国网,C#实现是本人做的,供参考关键字:P2P, UDP, NAT, .NET 论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东...
  • hcfalan
  • hcfalan
  • 2004年11月26日 15:40
  • 3188

C#实现P2P之UDP穿透NAT原理讲解

C#实现P2P之UDP穿透NAT及其原理讲解11 C#实现P2P之UDP穿透NAT及其原理讲解网上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。呵呵,在这里我就用自己实现的...
  • dandandeshui
  • dandandeshui
  • 2009年10月03日 09:17
  • 2812

P2P之UDP穿透NAT的原理与实现(shootingstars)【转】

原始作者: Hwycheng Leo(FlashBT@Hotmail.com)源码下载: http://www.ppcn.net/upload/2005_08/05080112299104.rar 参...
  • clearver
  • clearver
  • 2010年01月14日 21:47
  • 525

UDP穿透NAT的原理与实现(UDP“打洞”原理)

NAT(The IP Network Address Translator) 的概念和意义是什么?NAT, 中文翻译为网络地址转换。具体的详细信息可以访问RFC 1631 - http://www.f...
  • overmaker
  • overmaker
  • 2008年11月01日 16:23
  • 41130

试验UDP打洞穿透NAT

目标 路由穿透,实现广域网P2P通讯。 4种典型NAT类型 按照NAT设备在进行地址映射时行为的不同,NAT可以分为以下四种:  Full Cone  Restr...
  • liwf616
  • liwf616
  • 2015年05月05日 20:24
  • 2179

UDP/TCP 打洞(穿透NAT)技术

转自:http://www.cnblogs.com/LeoWong/archive/2009/09/25/1574265.html 内容概述:在p2p通信领域中,由NAT(Network Addre...
  • u013864585
  • u013864585
  • 2014年05月26日 09:28
  • 1177

UDP通信在NAT(NAPT/内网穿透)中Session保持实现与效果测试

在网络开发中,常常使用UDP通信进行数据传输。随着路由的普及,NAT在UDP数据包回发形成了障碍。我们知道UDP协议是“无连接”的,既然有回发数据的需求,那么路由器就为了这种需求,开发了UDP映射保持...
  • xiaohupashu
  • xiaohupashu
  • 2017年07月29日 21:15
  • 1040

udp穿透简单讲解和实现(Java)

转载自:http://www.cnblogs.com/wunaozai/p/5545150.html 在上一小节中了解到了通过浏览器自带的Webrtc功能来实现P2P视频聊天。在HTML5还...
  • u012377333
  • u012377333
  • 2016年06月01日 13:17
  • 2999
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UDP穿透之NAT类型分析
举报原因:
原因补充:

(最多只允许输入30个字)