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

Nat tcp udp icmp 报文的处理

 

ICMP

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

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

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

 

TCP UDP

TCP UDP 都有端口号,经过 NAT 后, NAT 改变了 TCP UDP 的源地址,源端口及相应的校验码。如上图: 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.1 200 。然后数据包将使用转换后的 200.1.1.1 200 为原源 IP 和端口号,将数据包发送到 200.1..2.1.

  路由过程: 10.1.1 .2 200----->200.1.1.1:200------>200.1.2.1:100

数据包返回过程:

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

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

 

 

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

 

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

 

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

 

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值