作者丨车小胖谈互联网
来源丨车小胖谈互联网(ID:)
假设远程主机向我发送了一个数据包。 我了解到,公网中流动的所有公网IP都是公网IP。 那么当远程主机向我发送数据包时,目标地址应该是我的公网IP,也就是最后发送到公网上的路由器。 那么,这个路由器是如何将数据包转发到我的电脑的呢?
类似的抽象问题可以用具体的例子来分析。 比如我问你,当微信服务器有消息需要推送到你的微信时,微信服务器如何将消息推送到你的手机或者微信上呢?
正如你所说,微信服务器知道你的微信客户端的公网IP。 微信服务器只需设置消息消息的目的IP=微信客户端的公网IP即可。
问题是,微信服务器如何知道微信客户端的公网IP呢?
微信服务器摸不着头脑。 微信客户端主动告诉我。 如果微信客户端不主动告诉我,我怎么知道? 另外,由于微信安装在移动终端上,处于不同的移动网络,因此IP地址随时发生变化,对应的公网IP也会发生变化。 当微信客户端联网时,会主动告诉(登录)服务器自己的公网IP。
事实上,微信客户端并不知道自己的公网IP,但这并不重要。 只要微信客户端的数据包能够到达服务器,服务器就会获取客户端的公网IP。 因为在客户网关和运营商网关上都会进行一次或多次NAT操作,将微信IP转换为公网IP。
继续上面,服务器知道客户端的公网IP不是微信客户端的,而是网关的公网IP。 显然服务器的数据包会到达网关。 接下来如何操作网关其实很简单。 只需进行NAT操作的逆操作即可。
什么是反向NAT操作?
NAT操作是将微信私网IP转换为网关的公网IP。 那么反向NAT操作就是将消息的公网IP转换为微信的私网IP。 当然,如果有NAT操作,就会有反向NAT操作。 如果有两次NAT操作,就会有两次反向NAT操作。
为了使NAT反向操作更加容易,需要在NAT操作过程中动态生成NAT表。 然后就可以完成反向操作查表了。 当然,为了公网IP的利用,动态NAT表是有生命周期的。 一旦生命周期内没有流量刷新,就会被删除。 这将意味着微信服务器发送给客户端的消息无法到达客户端。 为了避免这种情况发生,只需让客户端定期发送即可。
如果你说的是,登录知乎网站时,知乎服务器是如何推送消息给客户端的呢?
其实原理和上面是一样的,这里不再赘述。 我之所以写这篇文章,是为了分析反向流量是如何流动的? 即当我们访问知乎服务器时,客户端的数据包是如何到达知乎服务器的呢? 通常知乎服务器也用私有IP吗?
域名解析为服务器的公网IP,数据包到达该公网IP对应的设备。 接下来设备如何将数据包移动到知乎服务器呢?
基于目的IP地址的NAT转换
在我们的数据包到达之前,NAT设备已经生成了一张公网IP和服务器私有IP之间的转换表。 然后就可以查表进行转换并将消息发送到相应的服务器。 通常需要手动配置。
基于负载均衡的调度
负载均衡设备根据服务器当前的负载状况选择其中一台服务器,建立TCP连接,将客户端的数据包通过TCP连接发送到服务器。 经服务器处理后,发送至负载均衡设备。 负载均衡设备从TCP连接中提取字节流并将其转发给客户端,从而完成双向通信。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。