目录

NAT出现的原因:

一是为了解决IPv4地址不够用的问题。当时IPv6短期内还无法替换IPv4,而IPv4的地址又特别紧缺,所以人们想到让多台主机共用一个公网IP地址,大大减缓了IPv4地址不够用的问题。

二是为了解决安全问题。使用NAT后,主机隐藏在内网,这样黑客就很难访问到内网主机,从而达到保护内网主机的目的。

NAT就是一种地址映射技术,它在内网地址与外网地址之间建立了映射关系。

当内网主机向外网主机发送信息时,数据在经过NAT层时,NAT会将数据包头中的源IP地址和源端口号替换为映射后的外网IP地址和外网端口。相反,当接收数据时,NAT收到数据后会将目标地址映射为内网的IP地址和端口再转给内网主机。

在这里插入图片描述

完全锥型NAT

特点:

一旦打洞成功,所有知道该洞的主机都可以通过它与内网主机进行通信。

host主机通过NAT访问外往主机B,会在NAT打个洞。

如果主机B将该洞信息分享给主机A、C,那么A、C也能通过该洞与host主机进行通信。

在这里插入图片描述

洞的含义:

在NAT上建立了一个内外网的映射表,是一个4元组:

{
    内网IP,
    内网端口,
    映射的外网IP,
    映射的外网端口
}

大多数NAT穿越使用UDP,因为UDP是无连接协议,打洞更方便。

IP限制锥型NAT

特点:

NAT打洞成功后,只有与之打洞成功的外网主机才能通过该洞与内网主机通信,而其他外网主机即使知道洞口也不能与之通信。

在NAT上打了一个洞。此时,只有主机B才能通过该洞向内网host主机发送信息,而其他外网主机(如A与C)不能再像完全锥型NAT一样通过该洞与内网host主机通信了。但需要注意的是,主机B上不同的端口(如p1、p2等)是可以向host主机发送消息的。

在这里插入图片描述

是因为NAT对穿越洞口的IP地址做了限制,只有登记过的外网IP地址才可以通过NAT。

此时打洞映射表为:

{
    内网IP,
    内网端口,
    映射的外网IP,
    映射的外网端口,
    [被访问主机的IP, ...]
}

ip限制锥型NAT只对IP做检测,对端口不做限制。

端口限制锥型NAT

端口限制锥型NAT比IP限制锥型更加严格。端口限制锥型NAT的主要特点:除了像IP限制锥型NAT一样需要对IP地址进行检测外,还需要对端口进行检测。

虽然端口限制型NAT的映射表也是一个5元组,但它与IP限制锥型NAT的映射表还是有重要区别的,端口限制锥型NAT的映射表包括内网IP、内网端口、映射的外网IP、映射的外网端口以及被访问主机的IP和被访问主机的端口的组合。其格式如下:

{
    内网IP,
    内网端口,
    映射的外网IP,
    映射的外网端口,
    [{被访问主机的IP, 被访问主机的端口}, ...]
}

对称型NAT

对称型NAT的特点:内网主机每次访问不同的外网主机时,都会生成一个新洞,而不像前面3种NAT类型使用的是同一个洞。

在这里插入图片描述

host主机在访问主机B时在NAT上打了个洞,只有主机B上相应端口发送的数据才能穿越。

当它访问主机B时会新打一个洞,而不是复用访问主机B时的洞。

也就是访问不同主机会产生不同的新洞

由于该特性,导致对称型NAT与对称型NAT之间的打洞成功率很低。webrtc遇到这种情况直接放弃打洞。

对称性NAT映射表是一个6元组,其映射的外网IP地址和外网端口会随着访问目的主机的不同而变化。

其格式如下:

{
    内网IP,
    内网端口,
    // 不仅访问地址变化了,映射IP也要发生变化
    映射的外网IP,
    // 不仅访问端口变化了,映射端口也要发生变化
    映射的外网端口,
    被访问主机的IP,
    被访问主机的端口
}

NAT 类型检测