斜体部分为读者提问
本地网络是上海移动(铁通),访问电信网络查看到的本机IP和PPPoE得到的公网IP不一致。电信看到的是一个其他省市的电信IP,而本机获得的公网IP是上海铁通的。通过tracert会看到经过了几跳使用私有IP段的路由器,尽管所有电信网站均无法Ping通但的确可以访问。(电信网络同样无法Ping通本机获得铁通公网IP)
运营商这样做有何利弊?为何访问国外网站则能正常显示本机IP,也能互相Ping通?
这个问题可以归纳为以下几个小问题。
Q1为何本机通过PPPoE拨号获得的公网IP,但是访问电信网络却显示的是不同的公网IP?
毫无疑问,主机PPPoE拨号获得的公网IP,是真实的公网IP,可以在Internet上自由自在地访问,这个从访问国外网站上的表现可以分析得出。
访问电信网路,使用了两种技术得其中得一种:
1 NAT技术
主机得公网IP,被移动NAT替换成与电信网络直连接口IP(或地址池中一个),这样最终在目的地服务器看来,是和电信网络直连接口IP通信,而不是和主机的公网IP通信。
NAT让电信服务器,以为是和NAT设备通信,自然流量会返回给NAT。这样就可以严格控制返回流量的流经路径。也许不同的网间链路其结算费用不一样,有便宜的,也有昂贵的,为了节省费用,自然会选择便宜的链路。
2透明代理技术
所谓透明代理,是用户没有配置过代理,用户感受不到代理的存在,用户的网页访问被重定向到移动网络的代理服务器,代理服务器再与目的服务器通信。
代理服务器,可以充当缓存服务器,缓存着海量静态资源,如图片、视频,一旦匹配到,直接返回给用户主机,避免再耗费大量的网间流量去电信网络去抓,这样可以节省网间结算费用。
Q2为何traceroute会出现6跳私有IP?
Traceroute报文进入了一个私有IP互联的网络,出现TTL=0时,自然使用私有IP作为源IP发ICMP出错消息。
有同学自然会问,为何这些私有IP没有转换成公网IP?
那是因为使用私有IP的互联接口,压根不会被用来访问互联网。如果用这些私有IP作为源IP,去访问互联网,肯定会NAT成公网IP。
而却可以使用私有IP做为源IP,去发送单向的ICMP Error Message。
Q3为何通过网页可以访问电信的网站,却不可以Ping通?
访问电信网站是基于TCP端口转发,而ping 没有端口,自然不会被代理转发。
NAT情况是,如果移动网络没有为Ping报文做动态NAT,自然无法Ping通。
Q4为何访问国外网站显示的IP ==本机PPPoE拨号获得的公网IP?
国内网间的流量使用了代理服务器或NAT,而访问国外的网站,没有使用这些技术,让用户IP与国外服务器直接通信。
Q5有何利弊?
NAT的存在,破坏了本来端到端通信,NAT如同一个中间人一样存在着,一旦出问题不利于排查问题。
代理服务器,使得本来端到端通信,演变成多个点对点通信的叠加,一旦出问题,端到端都无法Ping通,加大了排查的难度。
Q6从第12跳开始为何都请求超时了?
前11跳一直处于移动网络,自然没有问题。
从12跳开始,将要进入电信网络,由于移动网络没有给traceroute报文做动态NAT映射,或做基于端口的转发,所以traceroute报文全丢了。
领取专属 10元无门槛券
私享最新 技术干货