IP地址理解

IP地址=+主机    

Internet管理委ABCDE地址,在地址中,还规定了络编和主机。在TCP/IP协议中,IP地址是以二字形式出的,共32bit1bit就是二制中的1位,但形式非常不用于人阅读记忆。因此Internet管理委会决定采用一分十制表示法表示IP地址:面向用的文中,由四段成的32特的IP地址被直地表示的十制整数。

TCP/IP定,主机1地址用于广播之用,叫做广播地址。所广播,指同向同一子所有主机文。各位全0被解成本

A地址A地址的络标识由第一8位二表示,A地址的特络标识的第一位二须为0。不算出,A地址第一地址00000001,最后一地址是01111111算成十制就是127,其127留作保留地址,A地址的第一段范是:1126A地址允2^72 =126段(2是因0不用,127留作用),中的主机标识38位二2^24-2=1677,7216台主机(2是因0地址地址,全1广播地址,这两地址一般不分配主机)。通常分配给拥有大量主机的。(A地址127是一保留地址,用于络软测试以及本地机通信,叫做回送地址(loopback addres s)

B地址B地址的络标识由前两组8位二表示,中的主机标识两组8位二B地址的络标识的前位二须为10B地址第一地址10000000,最后一地址是10111111算成十B地址第一段范就是128191B地址允2^14 =16384段,中的主机标识28位二2^16-2=65533台主机,用于多的 

C地址C地址的络标识由前38位二表示,中主机标识18位二C地址的特络标识的前3位二须为110C地址第一地址11000000,最后一地址是11011111成十C地址第一段范就是192223C地址允2^21 =2097152段,中的主机标识182^8-2= 254台主机,用于少的


码:的作用就是和IP地址算后得出地址,子也是32bit且是一串1后跟一串0成,其中1表示在IP地址中的对应的位,而0表示在IP地址中主机对应的位


 各类地址的缺省子网掩码  
 A类-----------------255.0.0.0  也可以表示为 /8 表示有8个1 
 B类-----------------255.255.0.0 也可以表示为 /16 表示有16个1 
 C类-----------------255.255.255.0 可以表示为 /24 表示有24个1

标准子网掩码出现的都是255和0的组合,在实际的应用中还有类似255·255·255·252不全是255和0的组合的子网掩码  这些子网掩码又是为了把一类网络划分成多个子网络
使用子网划分时的地址格式 
A类------------网络(8位)+子网(X位)+主机(24-X位) 
B类------------网络(16位)+子网(X位)+主机(16-X位) 
C类------------网络(24位)+子网(X位)+主机(8-X位)

在TCP/IP协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下:
10.0.0.0/8:10.0.0.0~10.255.255.255 
172.16.0.0/12:172.16.0.0~172.31.255.255 
192.168.0.0/16:192.168.0.0~192.168.255.255

使用保留地址的网络只能在内部进行通信,而不能与其它网络互连。因为本网络中的地址同样也可能被其它网络使用,如果进行网络互连,那么寻找路由时就会因为地址的不唯一而出现问题。但是这些使用保留地址的网络可以通过NAT通信设备将本网络内的保留地址翻译转换成公共地址的方式实现与外部网络的互连。

NAT要求整个服务的连接是从内网向外网主动发起的,而外网用户则无法直接(主动)向内网内网的服务发起连接请求,除非在NAT的(所有)网关上针对服务的端口作了端口映射。


a 克隆NAT(CloneNAT)

当在(私有IP,私有端口)与(公开IP.公开端口)已经建立了一个端口映射表后,克隆NAT将为随后从相同的私有地址和端口号发起的呼叫重复使用该映射,条件是只要使用映射(有时业叫绑定)的会话至少有一个继续保持激活状态。
  根据克隆时受到的限制大小,又可以把克隆NAT分为以下三种:
(1)
全克隆(Full Cone) 

dynamic session (outer IP, outer Port)<----->(inner IP, inner Port)------>dynamic(rtu IP, rtu Port)
首先,把所有来自相同内部IP地址和端口的请求映射到相同的外部1P地址和端口。其次,任何一个外部主机通过把一个IP包发送给已得到映射的外部IP地址的方式,都能够把该包发送给该内部主机。
(2)
限制性克隆(Restricted Cone)

dynamic session (outer IP, outer Port)<----->(inner IP, inner Port)------>dynamic(rtu IP, rtu Port)+ inner sended a packet to  a RTU have rtu IP
把所有来自相同内部IP地址和端口号的请求映射到相同的外部IP地址和端口。与全克隆NAT方式不同,只有当内部主机以前曾经给IP地址为x的外部主机发送过一个包时,IP地址为x的该外部主机才能够把一个IP包发送给该内部主机。
(3)
端口限制性克隆(Port Restricted Cone)

dynamic session (outer IP, outer Port)<----->(inner IP, inner Port)------>daynamic(rtu IP, rtu Port)+ inner sended to a RTU have rtu IP and rtu Port
端口限制性克隆与限制性克隆类似,只是限制中多了端口号。特别是,一个外部主机可以发送一个源IP地址和源端口号分别为(x,P)的IP包给内部主机,只有当内部主机以前曾经给IP地址为x,端口号为P的外部主机发送过一个包时,IP地址为X的该外部主机才能够把一个源端口号为P的IP包发送给该内部主机。

b对称式NAT(symmetric NAT)

dynamic session (outer IP, dynamic outer Port)<----->(inner IP, inner Port)------>daynamic(rtu IP, rtu Port) +inner sended a packet to  a RTU have rtu IP
是指把所有来自相同内部IP地址和端口号,到特定目的1P地址和端口号的请求映射到相同的外部IP地址和端口。只有收到了一个IP包的外部主机才能够向该内部主机发送回一个UDP包。对称式的NAT不保证所有会话中的(私有地址,私有端口)和(公开IP,公开端口)之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。


			( A1, P1)       
			    V
			+--------+
                        |  Test  |
                        |   I    |
                        +--------+
                            |
                            |          A:(outer IP, outer Port)==(inner IP, inner Port)?
                            V		     V
                            /\              /\
                         N /  \ Y          /A \ Y             +--------+
          UDP     <-------/Resp\--------->/ IP \------------->|  Test  |
          Blocked         \ ?  /          \Same/              |   II   |
                           \  /            \? /               +--------+
                            \/              \/                    |
                                             | N                  |
                                             |                    V
                                             V                    /\
                                         +--------+              /  \  N
                                         |  Test  |             /Resp\---->symmetric UDP firewall
                                         |   II   |             \ ?  /
                                         +--------+              \  /
                                             |                    \/
                             (A2, P2)        V                     |Y
                  /\            V            /\                    |
   Symmetric  N  /  \       +--------+   N  /  \                   V
      NAT  <--- / IP \<-----|  Test  |<--- /Resp\               Open
                \Same/      |   I    |     \ ?  /               Internet
                 \? /       +--------+      \  /
                  \/                         \/
                  |                           |Y
                  |                           |
                  |                           V
                  |                           Full
                  |                           Cone
                  V              /\
              +--------+        /  \ Y
              |  Test  |------>/Resp\---->Restricted
              |   III  |       \ ?  /
              +--------+        \  /
                                 \/
                                  |N
                                  |       Port
                                  +------>Restricted
A STUN server MUST be prepared to receive Binding Requests on four
address/port combinations - (A1, P1), (A2, P1), (A1, P2), and (A2,
P2). (A1, P1) represent the primary address and port, and these are
the ones obtained through the client discovery procedures below.
Typically, P1 will be port 3478, the default STUN port. A2 and P2
are arbitrary. A2 and P2 are advertised by the server through the
CHANGED-ADDRESS attribute, as described below.


In test II, the client sends a
Binding Request with both the "change IP" and "change port" flags
from the CHANGE-REQUEST attribute set.that means rtu will response use different rtu ip and rtu port(A2,P2)  from the (A1, P1) parse from received packet , at the same response packe will have 
CHANGED-ADDRESS set,  and this attribute's data will  be (A2,P2)

In test III, the client sends
a Binding Request with only the "change port" flag set


In test I, the client sends a
STUN Binding Request to a server, without any flags set in the
CHANGE-REQUEST attribute, and without the RESPONSE-ADDRESS attribute.
This causes the server to send the response back to the address and
port that the request came from.

NAT类型检测

前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。

第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就 不能P2P了(检测停止)。 
当客户端能够接收到服务器的回应时,需要把服务器返回的客户端(IP,Port)和这个客户端socket的 (LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检 测停止)。否则客户端在NAT后要做进一步的NAT类型检测(继续)。

第二步:检测客户端NAT是否是Full Cone NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回 发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。

第三步:检测客户端NAT是否是Symmetric NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。 
用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。 
比 较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT,需要进行端口预测打洞。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。

第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP 数据包响应客户端, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值