UDP打洞和为何打洞、为什么TCP"不适合"P2P,以及NAT介绍(下面讲的是NAT的NAPT)
下面介绍流程如下
- A、NAT中的4种NAPT
- B、NAT的概念
- 为什么会出现NAT
- NAT是啥,能干啥
- C、TCP是否需要NAT,以及谈谈为什么UDP需要打洞(什么是NAT穿透)
- TCP当然也是需要走上面的NAT流程的
- TCP是否能实现P2P
- TCP有链接和UDP无连接
- 为什么需要UDP打洞(什么是UDP打洞/NAT穿透)
- D、如何实现UDP打洞(NAT穿透),实现流程。
A、先简单介绍NAT中的4种NAPT类型
对称NAT进行打洞/穿透比较随缘(家用路由据说一般都不是对称NAT,即是锥形的)。
-
全锥型(Full Cone)
-
受限锥型(Restricted Cone) 限制IP
-
端口受限锥型(Port Restricted Cone) 限制IP和PORT
-
对称型(Symmetric) 限制IP和PORT,并且不同外网和内部使用NAT的不同PORT
对称和锥型最大的区别就是是否NAT使用同一个端口了。
B、谈论打洞问题之前,必须先了解NAT概念。
-
为什么会出现NAT。
学过计网的都知道ACBDE类IP地址吧,IPv4地址总共就32位,地球上上网的那么多,每个人都分一个的话肯定不够(IPv6就不说了,毕竟还没有做到全普及)。为了解决这个ipv4地址不够所有人用的问题,就诞生了NAT。
-
NAT是啥,能干啥。
NAT是一种网络地址转换方法,用一个port标识内网和外网的联系。
前面提到IPv4的地址是有限的,生活中拥有IPv4公网地址的往往是网络提供商(联通、电信、移动之类的)。我们为了能"上网"(连接互联网的意思),那么肯定需要一个IPv4公网地址,这样别人才能在网络上找到我,我也才能找到别人(指拥有IPv4公网地址的人)。网络提供商肯定不能直接让你用这个IPv4标识你自己的电脑,为什么呢?因为要是你这么干,别人也会这么干。假如2个人甲和乙都能共用这个ipv4(1.1.1.1)。那么甲(1.1.1.1:80)和另一个网友老王(ipv4:2.2.2.2:80)聊天,结果老王回复你的时候,乙(ipv4:1.1.1.1:80)收到了这个消息,那不是乱套了。
网络提供商(拥有ipv4:1.1.1.1的机器)开辟了一个WAN广域网,甲和乙都去找它办宽带了,甲宽带分配到ip(162.100.100.1),乙分配到ip(168.240.162.5),这两个ip是联系ipv4:1.1.1.1用的,不能直接和互联网上的ipv4交流。
有了各自的宽带后,甲就能够和老王聊天了。但是甲的ip162.100.100.1不是ipv4,不处于互联网,不能和老王直接交流。这时候NAT就出来帮忙了。甲(162.100.100.1:80)–NAT(网络提供商ipv4:1.1.1.1:6751)–>老王(ipv4:2.2.2.2:80)。
NAT使用一个port标识 甲的ip:port(162.100.100.1:80)和另一个外网ipv4拥有者老王(ipv4:2.2.2.2:80)的联系。
老王收到甲的消息时,看到的ip和port只能是公网ipv4的,也就是网络提供商ipv4:1.1.1.1:6751。老王给甲回消息,也是传给ipv4:1.1.1.1:6751。这里老王根本不知道甲处在的WAN中的ip和port到底是多少。
网络提供商的路由器查找NAT表,得知6751端口标识的是自己创建其中一个WAN中的甲和老王的联系。于是把ipv4:1.1.1.1:6751收到的数据发送给甲(162.100.100.1:80)。
这样一来甲和老王就成功联系在一起了。甲----甲处在的网络的NAT—> 老王;老王----甲处在