第十九篇:NAT协议,上网绕不开的协议

通过前面的介绍,我们知道每台主机上网都要通过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 都依赖于⾃⼰的转换表,因此会有以下的问题:

  1. 外部⽆法主动与 NAT 内部服务器建⽴连接,因为 NAPT 转换表没有转换记录。
  2. 转换表的⽣成与转换操作都会产⽣性能开销。
  3. 通信过程中,如果 NAT 路由器᯿启了,所有的 TCP 连接都将被᯿置。

④ 解决NAT的潜在问题

解决的⽅法主要有两种⽅法:

  • 改⽤ IPv6

IPv6 可⽤范围⾮常⼤,以⾄于每台设备都可以配置⼀个公有 IP 地址,就不搞那么多花⾥胡哨的地址转换了,但是IPv6 普及速度还需要⼀些时间。

  • NAT 穿透技术

NAT 穿越技术拥有这样的功能,它能够让⽹络应⽤程序主动发现⾃⼰位于 NAT 设备之后,并且会主动获得 NAT 设备的公有 IP,并为⾃⼰建⽴端⼝映射条⽬,注意这些都是 NAT设备后的应⽤程序⾃动完成的。

也就是说,在 NAT 穿透技术中,NAT设备后的应⽤程序处于主动地位,它已经明确地知道 NAT 设备要修改它外发的数据包,于是它主动配合 NAT 设备的操作,主动地建⽴好映射,这样就不像以前由 NAT 设备来建⽴映射了。

说⼈话,就是客户端主动从 NAT 设备获取公有 IP 地址,然后⾃⼰建⽴端⼝映射条⽬,然后⽤这个条⽬对外通信,就不需要 NAT 设备来进⾏转换了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值