设为首页收藏本站language 语言切换
查看: 1828|回复: 7
收起左侧

[求助] ICMP为何会相应任何地址发回的包

[复制链接]
发表于 2018-7-16 20:49:17 | 显示全部楼层 |阅读模式
20鸿鹄币
本帖最后由 haierccc 于 2018-7-16 21:06 编辑

本帖悬赏20币,只求解惑,谢谢。

我来细说一下这个实验。
我在学习NAT。典型的NAT环境如下图:
无标题.png
在典型的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建立拓扑如下:
无标题.png
配好所有接口的IP之后,就成为了一个典型的路由网络,PC0是可以ping通WebServer的,而且也可以通过浏览器访问其上的网页,因为中间的NAT路由器是直连这2个网络,所以有路由表。见下图:
无标题.png

注意:虽然路由器的名字叫做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 :
无标题.png
6、PC0收到该响应包,显示出一条ping的回应信息:
无标题.png

这就是我不明白的地方。返回包的源地址被修改为NAT的外网接口192.168.254了,但在ICMP看,它根本就没有和该地址通信过(它发出的包,目标地址是192.168.1.1),怎么会认可192.168.2.254返回的ICMP回应包呢?

我怀疑这是CPT的BUG,于是用GNS3重建拓扑(用路由器模拟WebServer和PC0),再用Wireshark抓包,这是完全真实的环境了:
无标题.png
结果还是一样的,从NAT出来的数据包,源地址被改成NAT的外网口地址:
无标题.png
可见,这肯定不是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是网关,默认发向外网的数据包都转发给它处理,回包当然也是由它处理
发表于 2018-7-16 20:49:18 | 显示全部楼层
192.168.2.254是网关,默认发向外网的数据包都转发给它处理,回包当然也是由它处理
沙发 2018-7-16 20:49:18 回复 收起回复
回复

使用道具 举报

 成长值: 36205
发表于 2018-7-16 23:13:57 | 显示全部楼层
板凳 2018-7-16 23:13:57 回复 收起回复
回复

使用道具 举报

 楼主| 发表于 2018-7-17 15:42:15 | 显示全部楼层
Rockyw 发表于 2018-7-16 22:38
192.168.2.254是网关,默认发向外网的数据包都转发给它处理,回包当然也是由它处理

是的,我也想通了,NAT设备是一堵墙,外网只能看到NAT设备。
所以外网进入的数据包的目标地址是NAT,内网发出的源地址也是NAT。
地板 2018-7-17 15:42:15 回复 收起回复
回复

使用道具 举报

发表于 2018-7-18 23:37:01 | 显示全部楼层
NAT是会产生   会话ID   来标识是回给哪台主机的
5# 2018-7-18 23:37:01 回复 收起回复
回复

使用道具 举报

发表于 2018-7-19 10:32:12 | 显示全部楼层
多做一个ping 测试,使用NAT时 ping 192.168.1.1 , 移掉NAT后,再 ping 192.168.1.1, 看看响应的时间是不是很接近?最好是一样的就更好解释了。
有NAT时,你看到的192.168.2.254就是PAT后的IP,对外网可见的就是PAT后的IP,真实的内网IP剖是不可见的。
6# 2018-7-19 10:32:12 回复 收起回复
回复

使用道具 举报

发表于 2018-7-22 23:20:06 | 显示全部楼层
thank you.
7# 2018-7-22 23:20:06 回复 收起回复
回复

使用道具 举报

发表于 2018-9-13 16:11:04 | 显示全部楼层
赞赞赞
8# 2018-9-13 16:11:04 回复 收起回复
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-6 19:04 , Processed in 0.073671 second(s), 15 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表