Nat 对 tcp , udp , icmp 报文的处理

来源:互联网 发布:大米线上销售数据 编辑:程序博客网 时间:2024/04/30 10:44

Nattcpudpicmp报文的处理

 

ICMP

   ICMP 没有端口号,在icmp报文中有一个序列号(identifier),这个是所发出的ICMP报文顺序的唯一标识。靠这个序列号,每一个请求包和它所对应的回应包的序列号是一样的,这个值代表唯一主机,同一台主机发出的所有的ICMP报文,它的identifier值都是一样的,不同主机的值不一样。

ICMP经过NAT后,nat首先在IP层改动了源IP,及相应的校验码。在ICMP中,将identifier及相应的序列号更改,更改后的idenfifier仍然标识唯一主机,序列号仍然是一对一的关系,最后ICMP的校验码也更改了。

如上图,假设10.1.1.2发送的原icmp请求包的identifier0x0300, 经过nat后,源IP改为200.1.1.1identifier 改为0x0301。这里 identifier0x0300 identifier 0x0301相对应。当router0 收到dentifier 0x0301 icmp回应包的时候,它就将回应包发给10.1.1.2

 

TCPUDP

TCPUDP都有端口号,经过NAT后,NAT改变了TCPUDP的源地址,源端口及相应的校验码。如上图:10.1.1.0是私网,访问公网200.1.2.0。在router0 上做NAT

数据包发送过程:

10.1.1.2想访问200.1.2.1时。在router0上,nat先将10.1.1.2映射为200.1.1.1200。然后数据包将使用转换后的200.1.1.1200 为原源IP和端口号,将数据包发送到200.1..2.1.

  路由过程:10.1.1.2200----->200.1.1.1:200------>200.1.2.1:100

数据包返回过程:

 router1收到数据包以后,如果要返回数据包,router1 将数据包发往200.1.1.1,端口号为200.  router0收到返回数据包的时候,它将检查端口号,端口号为200,对应的私网IP10.1.1.2,于是router0 将数据包发送给主机10.1.1.2.

   路由过程:200.1.2.1100------>200.1.1.1:200----->10.1.1.2:200

 

 

问题:内网发packet到外网的时候,负责nat的路由器记下了这个报文的端口之类的信息,那这个记录什么时候删除?

 

TCPnat删除记录有一个timeout值,这个值可以设置,一次tcp建立到结束的过程的时间比这个timeout值小,如果在timeout值到之前,有新的相同关系的tcp连接建立的的话,记录就不删除,如果在timeout值到了都没有新tcp建立的话,记录就删除。

 

UDP: 当存在udp session的时候。nat不会每次udp session为分配新端口号。natudp连接分配了端口号之后,在一次udp会话结束后,如果已经不存在udp会话,等达到timeout值之后,nat将删除记录的报文信息。如果存在一个udp会话,记录就不会删除。

 

ICMP:因为icmp的请求包或者回应包等都是使用相同的identifier 标识唯一的主机,当主机收到icmp回应包之后,在达到timeout值时,如果不存在icmp回应包和请求包的话,nat将删除报文记录

 

原创粉丝点击