NA(P)T

来源:互联网 发布:midi软件知乎 编辑:程序博客网 时间:2024/04/30 09:15

  NAT就是Network Address Translation,过去好长时间我直觉得很好奇,在家里用路由器上网时,我没有全球唯一的IP,外网上的服务器是怎么样通过一层层的设备找到我的。另外,我也想知道是不是有办法能找到世界上任何一台计算机,不论它是在多深的NAT设备后面。

  今天终于知道了原理,虽然细节还不清楚,但在我心里,这件事至少是有道理的了,是可以想得通的了。

  在网上也搜了很多文章来看,但真的不知道写或者翻译那些文章的人是不是真的懂,至少在网上能找到的很多中文文档,都只是在说一些概念,完全不讲到实质,不能解惑。最后还是看IETF的RFC原文才弄明白的。

  专门讲NAT的RFC大概有4份:1631, 2663, 3022, 3715。其中最终解开我疑惑的是rfc3022,它解释了两种NAT方式的原理和区别。

  大多数情况下,NAPT(Network Address Port Translation)方式用得比较多,我们在家里用路由器上网时用的都是这种方式,内网的package到达NAT时,NAT记录下源地址和端口号,并重新分一个端口号给这个package,用这个新的端口号和NAT对外的地址换掉原来的源地址,再继续发送;当有回复到达NAT这个端口时,NAT再把之前记录下来的源地址和端口号换上,做为目标地址和端口,再发向内网主机,这样,内网主机就收到了回得的包。

  所以,总的来说,当由内网主机最初发出的包最终到达目标主机时,源端口号是被修改过的,不是最初的那个。但似乎这样并不影响通信。

原创粉丝点击