NAPT(以此类型讨论)

一、NAPT(以此类型讨论)

192.168.1.106 : 32054<-------->183.15.192.72 : 27786<-------->212.79.111.156 : 3478

192.168.1.106 : 32055<-------->183.15.192.72 : 27786<-------->212.79.111.155 : 3478

简而言之,两个基本规则:

Ø内部IP/PORT出NAT的规则,分Cone和Symmetic。

Cone: 只要内部IP固定,映射到外部的NAPT->PORT就固定。见上面蓝色交互。

Symmetic:任意内部IP或PORT有一项改变,映射到外部的NAPT->PORT就改变。

Ø外部IP/PORT进NAT的规则,基于Cone细分,对Symmetic无甚意义。

见下面的详述。

只要cli有send2ip的操作(不管是否能send success),ip再send2cli时,cli的NAPT就不会抛弃来自ip的数据。sen2ip可以看作是cli在自身NAPT上对ip的”登记”(是否还有更好的表述方式)。

ØFull cone

假定cli有send2ip(任意一对ip:port),所有IP都可以从此通道[session]回访。不限制外部IP/PORT。

Cli→session→nat→IP

Cli←session←nat←IP

//无需cli先连接IP_Other_x,只要知道cli的NAPT:PORT,IP_Other_x就可以直接访问了。

Cli←session←nat←IP_Other_0

Cli←session←nat←IP_Other_1

ØRestricted cone

假定cli有send2ip。限制外部IP,不限制外部IP->PORT。

Cli→session→nat→IP

Cli←session←nat←IP

//需要cli先连接IP_Other_x,IP_Other_x才可以访问。

Cli→session→nat→IP_Other

Cli←session←nat←IP_Other

ØPort restricted cone

假定cli有send2ip。限制外部IP && PORT。

对比 Restricted cone:

Cli→session→nat→IP/PORT0

Cli←session←nat←IP/PORT0仅IP/PORT0可以回访,其他IP/PORTX不可以。

ØSymmetic

同Port restricted cone。限制IP && PORT。

和cone不同的是,每次cli建立连接都使用不同的session。

Cli→session0→nat→IP/PROT0

Cli→session1→nat→IP/PROT1//同一个IP,不同PORT,也使用不同的session。

Cli→sessionx→nat→IPx/PROTx

文字概述了下,再来点图文并茂的增加点感情。

Ø直观图

srvn为公网IP(非隐藏在NAT后面)。

ØP2P流程

为了作图方便,祛除了不会影响流程的session。

以后的图都假定cli_a/b都注册到了srv,互相知道对方第一次向外的NAPT:PORT(to srv)。

UDP打洞其实就是发送数据到对方的NAPT:PROT。只是把某一特定时刻的send称之为打洞。

cli_a/b通过srv预先得知了对方第一次send2srv时的【NAPT:port】

l1<------>不限

可惜的是full cone几乎不存在。

l2/3<------>2/3

因为cli_a对cli_b的认知基于【NAPT_B:portn】(反之cli_b对cli_a也类推),而【NAPT_B:portn】在{cli_b IP已定 &&  2/3} 的条件下是不会改变的,所以2/3可以放在一起讨论。就画出2<------>2的。

v1、绿色线条:a->b,也可以看作是a打了一个指向b的洞,虚线表示此时的数据会被抛弃,不会抵达b。

v2、红色线条:a请求b打洞。srv转发给b。

v3、蓝色线条:b->a打洞。因为a之前有向【NAPT_B:PROT】发送过数据(内->外),所以【NAPT_A:PORT】允许【NAPT_B:PROT】通过,b可以抵达a。

v4、绿色线条:a->b也是通了。

l2<------>4

NAPT限制较小的先向对方打洞。画简单点。

v1、绿色线条:a->b,也可以看作是a打了一个指向b的洞,虚线表示此时的数据会被抛弃,不会抵达b。

v2、蓝色线条:因为a之前有向【NAPT_B】发送过数据(内->外),所以【NAPT_A】允许【NAPT_B】通过。

va<------>【NAPT_A:PROTn】<------>【NAPT_B:PROTm】<------>b

l3<------>4

v1、绿色线条:a->b,也可以看作是a打了一个指向b的洞,虚线表示此时的数据会被抛弃,不会抵达b。

v2、蓝色线条:虽然a之前有向【NAPT_B】发送过数据(内->外),但【NAPT_A】限定port,【NAPT_B:PROTm】被拒。

v3、红色线条:如果a知道portm,send2portm后,蓝色线条就可以走通了。即a<------>b。

有的NAPT->PORT是递增的,有portm  =  portn + 1。

l4<------>4

不讨论,通不了。

网上摘抄的:

1.Endpoint Independent Mapping ( Full cone )

不区分终结点的映射,A 使用本地端口 P1 连接一个服务器,外网端口 P2 收到的任何数据包会转发到机器 A 上,跟直连没有什么区别,不需要打洞。

2.Address Dependent Mapping ( Restricted cone )

基于地址的映射,A 使用本地端口 P1 连接服务器 B,外网端口 P2 收到来自 B 的包转发到机器 A 上。

3.Address and Port Dependent Mapping ( Port-restricted cone )

基于地址和端口的映射,A 使用本地端口 P1 连接服务器 B,外网端口 P2 收到来自 B 特定端口的包会转发到机器 A 上,实际使用中与 2 没有太大区别。

4.Symmetric NAT

具有 IP 和 端口的限制,且会为每一个 Session 分配一个新的端口,这个端口号通常是递增的,但是也有随机的,随机的一般无解。

来自为知笔记(Wiz)

时间: 05-11

NAPT(以此类型讨论)的相关文章

卡尔曼滤波(Kalman Filter) 的进一步讨论

我们在上一篇文章中通过一个简单的例子算是入门卡尔曼滤波了,本文将以此为基础讨论一些技术细节. 卡尔曼滤波(Kalman Filter) http://blog.csdn.net/baimafujinji/article/details/50646814 在上一篇文章中,我们已经对HMM和卡尔曼滤波的关联性进行了初步的讨论.参考文献[3]中将二者之间的关系归结为下表. 上表是什么意思呢?我们其实可以下面的式子来表示,其中,w 和 v 分别表示状态转移 和 测量 过程中的不确定性,也即是噪声,既然是

Overfitting and Its Avoidance【总结】

主要内容: Overfitting(问题) 判断和防止overfitting 的方式 ------------------------------------ 过度拟合的模型往往不能进行一般化推广(generalization) 拟合问题需要在两个方面进行权衡 需要注意的是 如果用来训练的数据和测试的数据是同样的,那么这样的检验是没有意义的,就像  "Table Model" 一样 一般我们会将数据集分为training/testing(holdout) 两个部分  注: 在pytho

JavaFX Scene Builder 使用基础(一)

怎么用Scene Builder 来配合编写一个程序?下面我们就以此来讨论一下. (一)基础准备工作 本人使用NetBeans与JavaFX Scene Builder协同编写. 对于NetBeans我们需要做的是如下步骤:文件-->新建项目-->JavaFX-->JavaFX FXML应用程序,然后单击下一步,如图: 建立好工程文件后,我们可以看到工程下有三个文件,一个.FXML文件,两个.java文件,如图: 其中FXMLDocument.fxml为用户界面,我们可以通过JavaFX

机房收费合作版总结

机房合作版到了尾声,看着我们每天的记录,有太多的成长.不知道是不是大家的通病,在一件事情开始之前,总把它设想成多么艰难,自己绊着自己的脚,渐渐相信了原来恐惧本身才是最恐惧的事情,之前看他们合作使用的工具,高大上,给人一种不容易接近的感觉,一旦自己经历才有资格说和别人感同身受.这次合作感触很多,不管对我的学习和交流都是一种提高. 这是我们合作的第一个项目,作为组长不知道是我的幸运还是不幸,开始真的压力山大,虽然个人重构也是结束没多久,现在可是三人合作共同去完成,还是无从下手,不知道第一步要干什么,

iOS CoreMotion框架(传感器)

我们知道iOS的应用真的太多了,很多应用让我们惊叹不已!!!很多意想不到的应用! 比如: 1.电子罗盘指南针之类的应用-让我们知道方向. 2.运动类型软件-让我们知道我们跑步多少公里. 3.社交软件中的摇一摇功能. 4.游戏中扮演角色类中根据设备的晃动等进行操作. 等等..而且还有很多应用正在层出不穷的展现再我们面前. 其实,他们多半是使用了iOS中的一个框架-核心运动框架-CoreMotion.framework CoreMotion.framework框架是做什么的 我们可以使用iOS提供给

Bzoj4823 [Cqoi2017]老C的方块

没有题面,懒得手打 网络流 最小割 码农题(误) 一开始是冲着n<=5000的部分分写了网络流,结果神奇地发现似乎就是正解. 说好的dinic时间复杂度上界$O(V^2 E)$呢……网络流不愧是玄学算法. 放一张题目里的图 四种图案: 观察这四种图案和它们旋转/翻转以后的样子,可以发现一个共同点:每种图案都是由“中心一条蓝色边和它相邻的两个方块”,以及另外两个邻接的方块组成的 范围画出来就是这个样子: 可以发现“另外两个邻接的方块”肯定一个在蓝线左边一个在蓝线右边. 先说一种错误的想法: 将每个

SQL Server 地理数据库中的系统表

转自:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/002q00000080000000/ 地理数据库的系统表可以强制地理数据库行为.存储有关地理数据库的信息以及追踪存储在地理数据库中的数据. 不得使用 ArcGIS 软件以外的任何其他软件更改系统表及其内容.不过,可以使用 SQL 查看系统表的内容. GDB_ITEMRELATIONSHIPS GDB_ITEMRELATIONSHIPS 表用于存储有关 GDB_I

Java开发冒险(AVG)游戏杂谈

之前用过Android,Python的pygame,c#编程语言开发过游戏,一般来说,Java开发的游戏通常是AVG(英文adwenture game的简称)冒险游戏. 就技术角度而言,使用Java AVG 开发可以算得所有游戏类型中最容易的.一款简单 AVG 游戏的制作难度甚至在贪食蛇.俄罗斯方块之下.由于实现的简易性,导致 AVG 的开发重心往往着重于策划及美工,程序员的作用则微乎其微.同时也正因 AVG 开发的门坎约等于 0 ,所以此类型的同人游戏之多即可堪称世界之冠.另外, AVG 开发

01-Java学习笔记

本系列笔记由常彦博整理,请知悉 目  录 一. Java技术基础......................................................................................................... 1 1.1编程语言.......................................................................................................