ICMP为何会相应任何地址发回的包
本帖最后由 haierccc 于 2018-7-16 21:06 编辑本帖悬赏20币,只求解惑,谢谢。
我来细说一下这个实验。
我在学习NAT。典型的NAT环境如下图:
在典型的P2P的IPv4环境下,由于用户的内网使用了私网地址,且ISP路由器没有私网地址的路由,所以私网用户是无法上公网的。
但NAT就解决了这个问题。方法就是让3个私网地址192.168.1.x顶着“公网帽子”202.96.64.68上网。
好了,NAT的简单介绍结束。接下来,好奇的我就通过Cisco Packet Tracer 7.1搭建了一个环境,并利用CPT的单步跟踪功能,跟踪ICMP数据包的流转,希望能够在底层上更加深入地了解NAT。
同时,我心里还有个疑问:既然NAT解决的是“公网没有私网路由,造成私网无法与公网通信”这个问题,那么,如果有路由呢?在有路由,同时又开启了NAT的情况下,NAT是怎样工作的呢?
用CPT建立拓扑如下:
配好所有接口的IP之后,就成为了一个典型的路由网络,PC0是可以ping通WebServer的,而且也可以通过浏览器访问其上的网页,因为中间的NAT路由器是直连这2个网络,所以有路由表。见下图:
注意:虽然路由器的名字叫做NAT,但因为此时还没有配置NAT,所以仍然是个P2P的路由网络。
现在给路由器配置静态NAT,命令很简单,就3条:
NATr(config)#ip nat inside source static 192.168.1.1 192.168.2.254 //配置静态NAT
NAT(config)#int g0/0
NAT(config-if)#ip nat inside //指明内网接口
NAT(config-if)#int g0/1
NAT(config-if)#ip nat outside//指明外网接口
配置完毕。
OK!现在路由器就处于有2边网络的路由表,同时又配静态NAT的状态了。
我用PC0 ping WebServer,用CTP单步跟踪ICMP包的流转,注意其源地址、目标地址的变化,结果就是,看到了我不理解的,要到这里来请教的一幕。
ICMP包的流转过程:
1、192.168.2.1 ping 192.168.1.1
2、ICMP请求包从PC0出发,源地址是192.168.2.1,目标地址是192.168.1.1。
3、经过路由器NAT,再到达Webserver,源地址和目标地址都未发生变化。
4、WebServer收到请求包以后,发回ICMP响应包,源地址是192.168.1.1,目标地址是192.168.2.1
5、该包到达路由器NAT(入),再向PC0发出(出)的时候,源地址被改为192.168.2.254,目标地址仍然是192.168.2.1 :
6、PC0收到该响应包,显示出一条ping的回应信息:
这就是我不明白的地方。返回包的源地址被修改为NAT的外网接口192.168.254了,但在ICMP看,它根本就没有和该地址通信过(它发出的包,目标地址是192.168.1.1),怎么会认可192.168.2.254返回的ICMP回应包呢?
我怀疑这是CPT的BUG,于是用GNS3重建拓扑(用路由器模拟WebServer和PC0),再用Wireshark抓包,这是完全真实的环境了:
结果还是一样的,从NAT出来的数据包,源地址被改成NAT的外网口地址:
可见,这肯定不是BUG,而是实景。
注:当我no掉3条NAT语句,恢复到P2P路由环境时,返回给PC0的包源地址没有被修改,仍然是192.168.1.1
那么剩下的就是要解释这种现象了。我反复思考,似乎跟“ICMP是一种无状态协议”有关,但更详细的我也说不上了,到底怎样理解”无状态“呢?
其次,ICMP包可能不是靠”源地址-目标地址“来判断”接收到的包,是属于上次发送包的回应“这个过程的。而是靠ICMP包
里的”ID“字段,比如上次发送ICMP请求时的ID字段被置为1,那么返回的ICMP响应包的ICMP的ID字段的值也为1。
所以,我收到的ID=1,而我之前也曾经发送过ID=1的的包,所以我就显示出一行ping通的结果:
以上就是我的问题了。
192.168.2.254是网关,默认发向外网的数据包都转发给它处理,回包当然也是由它处理 {:6_268:} Rockyw 发表于 2018-7-16 22:38
192.168.2.254是网关,默认发向外网的数据包都转发给它处理,回包当然也是由它处理
是的,我也想通了,NAT设备是一堵墙,外网只能看到NAT设备。
所以外网进入的数据包的目标地址是NAT,内网发出的源地址也是NAT。 NAT是会产生 会话ID 来标识是回给哪台主机的 多做一个ping 测试,使用NAT时 ping 192.168.1.1 , 移掉NAT后,再 ping 192.168.1.1, 看看响应的时间是不是很接近?最好是一样的就更好解释了。
有NAT时,你看到的192.168.2.254就是PAT后的IP,对外网可见的就是PAT后的IP,真实的内网IP剖是不可见的。 thank you. 赞赞赞
页:
[1]