nat 类型分4种
1、全锥形 full cone
A 与 主机B交互,nat转换 A的内部地址及端口为 ip1 port1,ip1和port1为对外地址,任何机器能访问。
2、ip 受限制(对B而言)
A 与 主机B交互,nat转换 A的内部地址及端口为 ip1 port1,B要想访问A,需要A先访问过B(不管是否失败),并且B的ip不能变,但是B的端口可以变。
3、端口 受限制(对B而言)
A 与 主机B交互,nat转换 A的内部地址及端口为 ip1 port1,B要想访问A,需要A先访问过B(不管是否失败),并且B的ip不能变,B端口也不能变。
4、对称型
以上种,再nat转换时,都会转换成ip1 port1的形式,但是这种,访问主机B,转为ip1,port1,访问主机C,转为ip1,port2,或者ip2,port2
A 与 主机B交互,nat转换 A的内部地址及端口为 ip1 port1,B要想访问A,,需要A先访问过B(不管是否失败),并且B的ip不能变,B端口也不能变
nat穿透:
局域网的A访问一个外部主机,这个主机返回A它的nat转换后的ip1 port1。另一个局域网B访问外部主机(stun),外部主机返回B被nat转换后的ip2,port2。A访问B,就是A去访问ip2,port2。B访问A,就是访问ip1,port1。
非对称与非对称:由于A(客户机)无论访问哪个主机,A的nat都是将它转换为ip1 port1(ip1 与port1都不会变化),因此A B都去访问stun,得到的ip与port不会变化。因此可以打洞。
一端对称,一端非对称:A(非对称Nat,且只能是ip不变,port变化的那种情况),一端非对称B,且只能是 full cone 或者ip受限。首先B访问A,B记录A的ip1(只要ip1的信息发过来,就能收到),B的数据必然被A的nat丢掉,但是A就可以访问B了,这儿假定A的nat转换后的ip是不变的(A一般都是这种)。
对称与对称:A去访问stun 得到的为Aip1 Aport1。B去访问stun,得到Bip1 Bport1。 A去访问B, A net记录Bip1 Bport1, B去访问A,自身nat将其转换为BIp2, Bport2(Bip1,Bport1是访问stun得到的),但是A的洞只为Bip1,Bport1留着,Bip2,Bport2根本链接不上A,所以2个都改为对称Nat,根本没法打穿。
https://www.cnblogs.com/gsgs/p/9263679.html
https://blog.csdn.net/bytxl/article/details/14516779
一、stun协议格式
1)最高的2位必须置零,这可以在当STUN和其他协议复用的时候,用来区分STUN包和其他数据包。
2)STUN Message Type 字段定义了消息的类型(请求/成功响应/失败响应/指示)和消息的主方法。
虽然我们有4个消息类别,但在STUN中只有两种类型的事务,即请求/响应类型和指示类型。响应类型分为成功和出错两种,用来帮助快速处理STUN信息
其中显示的位为从最高有效位M11到最低有效位M0,M11到M0表示方法的12位编码。C1和C0两位表示类的编码。
因此:MessageType=MessageClass | MessageMethod |
MessageClass定义:0b00表示request,0b01表示indication,0b10表示success response,0b11表示error response
Message Method定义为0x001
1)MAPPED-ADDRESS
MAPPED-ADDRESS用来表示NAT客户端的反射地址。
2)XOR-MAPPED-ADDRESS
和MAPPED-ADDRESS基本相同,不同点是反射地址部分经过了一次异或(XOR)处理。
3)ERROR-CODE
该属性用于error response报文中。包含了300-699表示的错误代码,以及一个UTF-8格式的文字出错信息(Reason Phrase)。
https://blog.csdn.net/bizhijia110/article/details/113441138
https://blog.csdn.net/day_day_up1991/article/details/51707281
https://www.cnblogs.com/52by/p/15639589.html
https://blog.csdn.net/qq_40741808/article/details/107686105
https://datatracker.ietf.org/doc/html/rfc5780#section-4
https://datatracker.ietf.org/doc/html/rfc4787
https://datatracker.ietf.org/doc/html/rfc4787#section-4
https://datatracker.ietf.org/doc/html/rfc3489#section-5
https://datatracker.ietf.org/doc/html/rfc3489#section-5
https://datatracker.ietf.org/doc/html/rfc4787#section-5