通过前面的介绍,我们知道每台主机上网都要通过DHCP协议从运营商的DHCP服务器哪里获得一个未被其他主机使用的IP地址;那么这个IP地址是内网IP还是外网IP呢?
答案是内网IP!!!
我们可以看到,家庭的无线Wi-Fi使用的局域网IP,只有一个路由器有一个外网IP;如此两个不同的局域网里的设备IP可能是一样;假设有两个局域网A和B,小明的电脑在局域网A,其IP地址是192.168.1.3;小王的电脑在局域网B,其IP地址也是192.168.1.3;那么小明和小王现在想通信,但是他们使用的IP地址是一样的,路由器根本就不知道如何路由报文;无法进行通信。有同学会问:为什么不每台设备都用公网IP,每台设备的IP都独一无二,那不解决问题了吗?我只能说:同学,你想得太简单了。全世界的IP一共40多亿,能用的公网IP更有限,中国的可用的公网IP也才3到4亿,中国十几亿人口,有的人不但有多台电脑,还有多台手机等电子设备,如果每台设备都用公网IP,显而易见,IP地址完全不够用!那么怎么办呢?有解决办法吗?
为了解决这个问题,下面我将学习一个新的协议:NAT协议。
① NAT协议定义
(Network Address Translation),是指网络地址转换。是用于在局域网中使用私有地址,在连接互联网时转而使用全局IP地址的技术。
② NAT的工作机制
图中,主机A发送一个信息出去,报文里面有源IP地址,这个IP地址只是内网地址,在信息经过路由器的时候,路由器会将源IP地址替换成路由器对外的公网IP地址。
那么问题来了,局域网里面有多台主机设备,如果所有的内网IP都转换成公网IP,那么假设我在搜索引擎里面输入“搞笑视频”进行搜索,搜索服务器返回的搜索结果应该返回给局域网的哪台主机呢?
我们自然的想到,在路由器里面建一张表,比如这样:
应答报文只通过外网IP地址根本就无法判断信息要返回给哪台主机。
如此,可以加一个端口号解决。
1)当局域网的某一台主机请求服务器的时候,请求报文经过NAT路由器,报文的源IP和源端口都将被更改;形成一个局域网IP:端口和公网IP:端口的记录;该记录放在一个NAT表里面;
这种转换表在 NAT 路由器上⾃动⽣成。例如,在 TCP 的情况下,建⽴ TCP 连接⾸次握⼿时的 SYN 包⼀经发出,就会⽣成这个表。⽽后⼜随着收到关闭连接时发出 FIN 包的确认应答从表中被删除。
- 2)当请求被应答,应答报文到达路由器的时候,路由器根据报文的目的IP+目的端口去NAT表里面进行查询,然后将目的IP和目的端口改为局域网端的IP和端口;
③ NAT的潜在问题
由于 NAT/NAPT 都依赖于⾃⼰的转换表,因此会有以下的问题:
- 外部⽆法主动与 NAT 内部服务器建⽴连接,因为 NAPT 转换表没有转换记录。
- 转换表的⽣成与转换操作都会产⽣性能开销。
- 通信过程中,如果 NAT 路由器᯿启了,所有的 TCP 连接都将被᯿置。
④ 解决NAT的潜在问题
解决的⽅法主要有两种⽅法:
- 改⽤ IPv6
IPv6 可⽤范围⾮常⼤,以⾄于每台设备都可以配置⼀个公有 IP 地址,就不搞那么多花⾥胡哨的地址转换了,但是IPv6 普及速度还需要⼀些时间。
- NAT 穿透技术
NAT 穿越技术拥有这样的功能,它能够让⽹络应⽤程序主动发现⾃⼰位于 NAT 设备之后,并且会主动获得 NAT 设备的公有 IP,并为⾃⼰建⽴端⼝映射条⽬,注意这些都是 NAT设备后的应⽤程序⾃动完成的。
也就是说,在 NAT 穿透技术中,NAT设备后的应⽤程序处于主动地位,它已经明确地知道 NAT 设备要修改它外发的数据包,于是它主动配合 NAT 设备的操作,主动地建⽴好映射,这样就不像以前由 NAT 设备来建⽴映射了。
说⼈话,就是客户端主动从 NAT 设备获取公有 IP 地址,然后⾃⼰建⽴端⼝映射条⽬,然后⽤这个条⽬对外通信,就不需要 NAT 设备来进⾏转换了。
标签:协议,IP,局域网,绕不开,NAT,IP地址,设备,路由器 From: https://blog.csdn.net/u013501979/article/details/142783061