我们知道ICMP协议的功能主要是完成网络控制信息、状态信息的传输以及网络测量等功能。通常,ICMP的报文会与发送数据的源主机密切相关。例如,如果路由器丢弃数据报,那么,路由器将会给源主机发送一个ICMP报文。
当采用NAT之后,NAT必须维持内部主机的透明性,即外部网络认为只有NAT访问,而不知道实际上是内部主机对外部的访问。因此,NAT必须对ICMP进行特殊的处理。当ICMP报文从Internet到达时,NAT必须首先确定报文是否应该在本地处理,或者发送给一个内部主机。在转发给内部主机之前,NAT可能转换了ICMP报文。
以下为NAT转发ICMP报文的示例。如果内部主机使用PING测试Internet上目的主机的可达性,主机希望对发出的每个ICMP回送请求报文都能接收到一个ICMP回送应答。这时NAT必须把传入的应答转发给正确的主机。
以下为NAT转换ICMP报文的示例。考虑一个ICMP目的不可达报文,该报文中包含有造成错误的数据报的首部信息。由于NAT在发送原数据报前进行了地址转换,因此,原数据报的源地址不是内部主机的地址而是NAT的地址。因此,在将ICMP转发给内部主机前,必须打开ICMP报文,转换原数据报首部的地址为内部主机的地址,并重新计算原数据报的校验和、ICMP报文首部的校验和以及外层数据报首部的校验和。