为什么知道PC公网IP却Ping不通?解析网络连接问题
为什么我知道我的 PC 的公共 IP 地址却无法 ping 通?通过该网站获取的IP无法ping通。然后我在PC上开了一个UDP客户端进程,远程服务器也开了一个UDP服务器进程。客户端将数据包发送到远程并收到响应。远程显示请求的IP也是正确的。然后我在远程服务器上打开一个客户端进程并发送我的PC的IP,但仍然没有响应。这是为什么呢?我的电脑可以读取百度的网页,说明我的电脑IP有效,百度可以响应。为什么我反向请求时会卡住?请解释一下。
提问者提到的PC公网IP,假设是1.1.1.10,实际上并不是在PC上配置的,甚至不是在PC的网关上配置的(直接连接运营商的设备),而是配置在运营商的出口网关上(直接连接到互联网的设备)。因此出现了令人困惑的行为。
当尝试ping PC的公网IP时,根据路由0.0.0.0/0的最佳匹配指向本地网关。
由于本地网关没有配置该IP,因此最佳路由匹配0.0.0.0/0指向运营商。
https://img0.baidu.com/it/u=3862427489,4273697722&fm=253&fmt=JPEG&app=120&f=JPEG?w=500&h=665
经过路由搜索,运营商找到了公网IP和运营商出口网关发布的路由()。因此,ping 数据包一路到达网关出口。
网关搜索到路由后,最匹配的是一条指向的路由(-faced),于是将ping包的IP改为1.1.1.10(目的IP也是这个IP)并发送出去从这个界面。
对端设备找到路由后,很困惑,因为它发现收到的数据包需要以同样的方式返回,即返回到网关。但显然这会导致 ping 数据包出现环路。通常情况下,对端设备会丢弃该 ping 报文,因此主体无法 ping 通 IP 地址。
也许读者在上面的文章中发现了一个错误。由于网关上配置了1.1.1.10,因此路由表中应生成1.1.1.10/32的路由。它是最好的路由,所以网关应该直接将ping包发送到这个接口,然后你应该可以ping通1.1.1.10,对吗?
不,事实上,IP 地址 1.1.1.10 根本没有在任何接口(TCP/IP)上配置,因此不会生成路由 1.1.1.10/32。它只是一个虚拟IP,也许(总共32个1.1.1.1-1.1.1.32),通过NAT地址转换预定义为地址池。一旦某个地址从内网()到外网()并且满足NAT转换的条件,就会按照预定的算法将地址池取出来使用。一旦某个地址的端口资源用完,就会使用另一个IP地址。
为什么提问者可以在互联网上访问自己的网站?
https://img2.baidu.com/it/u=3444477779,3112268940&fm=253&fmt=JPEG&app=138&f=JPEG?w=500&h=667
这与在互联网上使用手机、IPAD或PC访问知乎网站没有什么不同。 - 在数据包的出方向上,沿途创建了N个NAT表,N=NAT的数量。
返回(-)方向时,检查NAT表N次,然后将返回结果发送给主体PC。
为什么主体无法从位于互联网上的网站(客户端)主动访问PC(服务器)?
因为收到的NAT表无法与NAT表匹配,所以NAT表只会从-方向动态生成,而现在是-方向,所以不会生成。想一想,源IP地址和目的IP地址都是公网IP地址,怎么办?网关会进一步分析这是否是自己的。虽然访问的IP地址1.1.1.10属于网关的地址池,但地址池是虚拟的,接口上没有配置,所以无法转发,因为最匹配的接口是入口。为了避免网络环路,所以网关会丢弃这个。
页:
[1]