PAT---Port Address Translation,即端口地址转换,属于NAT的一种,即将lan内的私网地址转换成合法的公有地址,即是将多个内部本地地址(inside local address)转换成一个内部全局地址(inside global address),以方便与Internet进行通信。

 今天不谈nat的优点,也不谈nat的缺点,只谈网关设备是如何进行地址转换,主要分为有4层头部的packet与没有4层头部packet进行转换。

网关设备进行PAT,如何识别多个内部本地地址访问外部网络?如何识别多个内部本地地址同时访问同一个外部设备?当外网的数据包到达网关时,他如何选择转发给内部那台主机呢?

先上拓扑:

 

 

 R2模拟为网关设备,配置如下:

R2有一条指向R1的默认路由:

 

R1模仿isp,R1上的环回口模拟其他公网设备:

pc1与pc2的配置:

pc1

pc2

看看PC1与PC2问下R1的loopback的结果

这次抓包从R2(gateway)的inside与outside口同时抓的,看进路由器与出路由器有那些不同。

一、有四层头部(tcp)的telnet:

1、pc2去telnet 1.1.1.1:(注意源ip+port)

 

   Gateway 的inside 接口:

  Gateway 的outside 接口:

 

网关设备show nat表:

总结:网关设备收到内部主机发来的数据包的时,在触发PAT的时候,是将source ip地址+source 端口(2元组)动态的生成一个转换表放在内存中(这个与端口映射,静态的指定端口不同,因为动态存在时间有限)。当接受到destination相同的ip+port来进行转换,来标识该转发的内部主机。

 

如果pc1与pc2同时telnet的结果如何:

pc1telnet1.1.1.1(inside)

pc1telnet1.1.1.1(outside)

pc2 telnet1.1.1.1(inside)

pc2 telnet1.1.1.1(outside)

网关会生存2个转换表,同一个端口同时只能用于建立一个TCP连接

路由器上面的port也许不能称之为端口,他或许只是一个标识作用,用来标识接收与转发内网主机与公网通信的数据包。当然这只是我的猜测而已。

有四层头部的,当然可以用port来标识,没有四层头部,靠谁来标识?不能ip头部吧,插那个字段?但是你ping一个外网,比如说51cto.com,还是可以回复内网主机的。

来看看网关是如何转换icmp报文的:

二、没有四层头部的ping(icmp):

  pc1与pc2同是ping 1.1.1.1.

pc1 ping 1.1.1.1(inside)

pc1 ping 1.1.1.1(outside)

pc2 ping 1.1.1.1(inside)

pc2 ping 1.1.1.1(outside)

在看看网关的nat表:

 

总结:

网关在转发icmp报文的时候,靠的是icmp 头部的标识符来确定一台主机。其实呢,icmp标识符是每个unix主机,ping这个程序的进程号(pid)而已。应该是每个主机产生这个进程号都是随机,不一样,所以可以拿来做标识吧

其实每一台cisco的路由器都相当于一台运行unix的设备。

windows主机的ping程序是经过修改的,这里不讨论。