前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NAT是怎么回事

NAT是怎么回事

作者头像
普通程序员
发布2019-10-23 11:43:10
1.7K0
发布2019-10-23 11:43:10
举报
文章被收录于专栏:普通程序员
NAT很多人可能没有听说过。简单的讲,NAT(Network Address Translation,网络地址转换)是将IP数据报头中的IP地址转换为另一个IP地址的过程。在实际应用中,NAT主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公网IP地址代表较多的私网IP地址的方式,将有助于减缓可用IP地址空间的枯竭(IPv4地址不够用)。

我们使用的手机,网络公司的服务器往往都采用了NAT技术,因此,做网络系统开发绕不开这个问题。IM系统中的心跳,直播系统等跟NAT息息相关。

一个简单的NAT结构如下图,内网用户主机PC(192.168.1.3)向外网服务器(1.1.1.2)发送的IP报文通过NAT设备。(怎么看IP报文,可以参考另一篇文章《IM系统开发中如何调试TCP协议》,做超链接都需要权限……)

发报文过程:NAT设备查看报头内容,发现该报文是发往外网的,将其源IP地址字段的私网地址192.168.1.3转换成一个可在Internet上选路的公网地址20.1.1.1,并将该报文发送给外网服务器,同时在NAT设备的网络地址转换表中记录这一映射。

收报文过程:外网服务器给内网用户发送的应答报文(其初始目的IP地址为20.1.1.1)到达NAT设备后,NAT设备再次查看报头内容,然后查找当前网络地址转换表的记录,用内网私有地址192.168.1.3替换初始的目的IP地址。

这就是基本的NAT结构及消息收发过程,实际网络环境下,NAT有很多改进方式,比如将多台Host(多个IP)映射为一个公网IP。但是基本原理就是这样,最多是映射表(路由表)复杂一些。

看一个具体的业务场景。我们用手机打开微信,微信服务器给我们发消息。消息流程如下图

消息从微信服务器,经过网络,到达基站。基站在这里可以认为是一个NAT设备,基站通过查询NAT路由表确定这条消息是发给哪个手机的。最终,消息成功发送到手机的微信程序中。

手机类的设备移动很强,比如天安门的基站,每天可能有数十万甚至上百万人会连接(游客,一会就去别的地方了),基站没有那么多资源(端口,内存等)一直保留100万个手机的路由表,因此基站会将长时间不收发消息的手机从路由表中清除,如果此时微信给你发消息,基站将无法找到你的手机,你就收不到消息了(NAT失效)。

怎么确保手机不被基站从路由表中清除了,时不时发一条数据,这就是IM类软件心跳的一个重要作用。移动、联通NAT失效时间是5分钟,电信失效时间约30分钟(良心企业啊),这就是为什么微信每隔4.5分钟一定会有一个心跳(或别的消息)的原因。

NAT基本原理已经说明,这个结构中,需要手机先向微信服务器发送报文,基站才能建立NAT路由表。如果手机不访问微信服务器,微信服务器就没有办法找到手机。但是向实时视频类的功能,需要躲在两个NAT设备后的手机能够互相发现,这就需要NAT穿透的技术,下一篇文章将进行介绍。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 普通程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档