远程主机发送数据包,路由器是怎么将数据包转发到我这台电脑上的?

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨车小胖谈网络

来源丨车小胖谈网络(ID:chexiaopangnetwork)

假设,一个远程主机向我发送数据包,我已经了解到,在公网流动的都是公网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表有一个生命周期,一旦生命周期内没有流量刷新,那么就会被删除。这将意味着微信服务器发送给客户端消息无法到达客户端。为了避免类似事情的发生,只要让客户端周期发送Keepalive。

如果你说的是,当登录知乎网站时,知乎的服务器是如何将消息推送到客户端的?

其实和上文原理是一样的,这里不再重复。之所以写这一点,是要分析一下反向的流量是如何流动的?即我们访问知乎服务器时,客户端的数据包是如何到达知乎服务器的?通常知乎的服务器也使用私有IP?

域名解析是服务器的公网IP,那么报文就到达公网IP对应的设备上。接下来该设备如何才能将数据包搬运到知乎服务器上?

基于目的IP地址的NAT转换

在我们数据包到达之前,NAT设备已经生成一个公网IP、服务器私有IP的转换表,那么查表即可转换,并将报文发给对应服务器。通常需要手工配置。

基于负载均衡的调度

负载均衡设备,根据服务器当前负载状态,选取其中某一台服务器,建立TCP连接,将来自客户端的数据包通过TCP连接发给服务器。服务器处理之后发给负载均衡设备。负载均衡设备从TCP连接提取字节流,将其转发给客户端,这样就完成了双向的通信。

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

bca1867ce1c7a650e040f78f6288efaf.png

点击👆卡片,关注后回复【面试题】即可获取

在看点这里98b20723639d4b6e3595dc626eb9ff42.gif好文分享给更多人↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值