最新消息:

ICMP报文如何通过NAT来地址转换

icmp admin 5104浏览 0评论
  • 设备A: 192.168.1.100
  • 设备B: 192.168.1.200
  • NAT设备: 192.168.1.1 123.123.123.123

如果A和B都想ping 114.114.114.114,
大家都知道ping是基于ICMP的,是没有端口的,那么这样是怎么来实现的呢???

没有端口,那就创造端口,首先ICMP的报文格式如下

在A发送ICMP报文的时候,会根据(Type+Code)的值生成源端口号,根据Identifier的值生成目的端口号,即发送到路由器的报文如下:

源报文:

源IP 源端口 目的IP 目的端口
192.168.1.100 (Type+Code) 114.114.114.114 Identifier

在路由器上进行SNAT,源IP更改后ICMP报文中的Identifier会改变,记作IDENTIFIER。这时候的报文如下:

源IP 源端口 目的IP 目的端口
123.123.123.123 IDENTIFIER 114.114.114.114 Identifier

Nat表

源IP 源端口 协议 目的IP 目的端口
192.168.1.100 (Type+Code) ICMP 123.123.123.123 IDENTIFIER

在web服务器C收到ICMP请求后,生成ICMP响应报文,响应报文中的(Type+Code)会作为源端口,IDENTIFIER作为目的端口

源报文

源IP 源端口 目的IP 目的端口
114.114.114.114 (Type+Code) 123.123.123.123 IDENTIFIER

报文到达路由器后,根据NAT表中,查询目的IP和目的端口为123.123.123.123和IDENTIFIER的信息。将目的IP和目的端口换为

192.168.1.100 和(Type+Code),这样报文就可以成功的到达A了。

所以ICMP报文的NAT大致是根据ICMP报文的字段,形成伪端口,然后根据TCP报文的流程来处理。

以上是个人查阅资料后总结,有不正确的,还请指出。

转载请注明:爱开源 » ICMP报文如何通过NAT来地址转换

您必须 登录 才能发表评论!