一种保证网络地址转换设备与外网互通的方法

阅读: 评论:0

著录项
  • CN200510135671.X
  • 20051231
  • CN1992675
  • 20070704
  • 中兴通讯股份有限公司
  • 洪先进
  • H04L12/56(2006.01)I
  • H04L12/56(2006.01)I

  • 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法律部
  • 中国,CN,广东(44)
  • 北京安信方达知识产权代理有限公司
  • 龙洪;霍育栋
摘要
一种保证网络地址转换设备与外网互通的方法,应用于NAT设备,该设备包括NAT模块和ICMP模块。NAT设备从内部接口收到ICMP报文后,如该报文需要进行PAT转换但没有映射条目,且NAT模块为其分配了本地地址和端口时,向ICMP模块发送申请预留消息,携带该端口的值;ICMP模块判断与该端口值相同的ICMP标识是否已使用,如果是,回复失败消息,否则预留该值的ICMP标识不再分配,回复成功消息;NAT模块如果收到失败消息,重新分配端口,再次申请预留;如果收到成功消息,在映射表中创建该ICMP报文的映射条目,进行正常的NAT转发。本发明可避免NAT设备生成的ICMP报文与转发ICMP报文产生端口冲突。
权利要求

1、一种保证网络地址转换设备与外网互通的方法,应用于网络地址转 换设备,该设备包括用于转发因特网控制消息协议ICMP报文的网络地址转 换NAT模块和用于收发和处理本地ICMP报文的ICMP模块,该方法包括 以下步骤:

(a)当NAT设备从内部接口收到ICMP报文,NAT模块判断该报文需 要进行端口地址转换PAT但没有相应映射条目,且为其分配了本地地址和 端口时,向ICMP模块发送申请预留消息,携带该端口的值;

(b)ICMP模块收到所述申请预留消息后,判断与该端口值相同的ICMP 标识是否已使用,如果是,回复失败消息,执行步骤(c);否则预留与该 端口值相同的ICMP标识不再分配,回复成功消息,执行步骤(d);

(c)NAT模块收到失败消息后,重新分配端口,再次向ICMP模块发 送申请预留消息,返回步骤(b);

(d)NAT模块收到成功消息后,在映射表中创建该ICMP报文的映射 条目,进行正常的NAT转发。

2、如权利要求1所述的方法,其特征在于,还包括以下释放预留的 ICMP标识的处理过程:

(h)NAT模块需要删除PAT映射条目时,如果该条目的协议类型是 ICMP协议且内部全局地址为本地地址,则提取该条目中分配的端口值,向 ICMP模块发送释放消息;

(i)ICMP模块收到该释放消息后,释放预留的与该端口值相同的ICMP 标识,向NAT模块回复释放成功消息;

(j)NAT模块收到释放成功消息后,直接删除该映射条目。

3、如权利要求1或2所述的方法,其特征在于,还包括以下对外部接 口收到的ICMP报文的处理过程:

(o)NAT设备从外部接口收到ICMP报文,如该报文需NAT转换, 由NAT模块查映射表中是否有该ICMP报文的映射条目,如果有,执行步 骤(p),如果没有,执行步骤(s);

步骤(p),NAT模块再判断该映射条目是否PAT映射条目,如果是, 执行步骤(q),否则按正常的NAT转发处理,结束;

步骤(q),判断该ICMP报文的类型是否响应报文,如果是,执行步 骤(r),否则,执行步骤(s);

步骤(r),进行NAT的转发处理,结束;

步骤(s),将该ICMP报文交给ICMP模块处理,结束。

5、如权利要求3所述的方法,其特征在于,所述步骤(h)和步骤(p) 中,NAT模块是通过映射条目的端口值判断该条目是否为PAT映射条目, 如端口值不为0,则该条目是PAT映射条目,否则不是PAT映射条目。

6、如权利要求3所述的方法,其特征在于,所述步骤(o)中,NAT 设备是通过以下方式判断收到的ICMP报文是否需进行NAT转换的:根据 该报文的目的地址查路由,如路由条目中的NAT标志被置位,则认为该 ICMP报文需进行NAT转换。

4、如权利要求1所述的方法,其特征在于,所述步骤(a)NAT模块 向ICMP模块发送申请预留消息后,记录分配的端口值并等待ICMP模块的 应答消息,如果等待超时,则向ICMP模块重发该申请预留消息。

说明书
技术领域

技术领域

本发明涉及网络通信领域,特别涉及通过网络地址转换进行网络互联的 方法。

背景技术

随着因特网的迅速发展,因特网网络地址日益面临被耗尽的危险。为了 使局域网中的多台主机能够通过有限的几个公网地址接入Internet,一种 NAT(Network Address Translation,即网络地址转换)技术应运而生。NAT 技术是一种地址转换技术,通常用于内部网络内具有私有IP地址的主机访 问外部网络时,将该主机的内部局部地址(Inside Local Address)转换为一 个外部唯一可识别的合法IP地址(Inside Global Address);同时,将外部 网络返回给内部网络主机的合法IP地址(Inside Global Address)映射回在 内部网络中该主机的私有IP地址(Inside Local Address),使得不同私有网 络可以使用相同的私有IP地址段,并能和外部网络进行正常通信,却不会 导致地址信息出现混乱。从而扩展了IP地址的应用范围,在一定程度上缓 解了当前IPv4地址空间不足的问题。

在NAT技术中有一种动态可重用NAT的技术,也叫做NAPT(Network Address Port Translation,即网络地址端口转换)或者PAT(Port Address Translation,即端口地址转换),该技术根据内部主机的IP地址加端口对(IP, Port)来进行NAT转换。由于每一个可分配的内部全局地址都有近64K个 端口可以用来做端口地址转换,所以如果在内部全局地址池里有N个地址 的话,就可以对内部网络实现N*64K个IP地址加端口对进行NAT转换, 大大地扩充了可进行NAT转换的内部网络主机数量。这种技术对于 TCP/UDP(传输控制协议/用户数据报协议)报文是非常合适有效的,但是 对于ICMP(因特网控制消息协议)报文,由于报文没有端口,似乎就无法 处理了。目前的解决方案是:利用ICMP Identifier(ICMP标识)(下面简 称ICMP ID)来代替报文的源端口,从而通过IP地址加ICMP ID来进行NAT 转换。

由于公网地址非常紧缺和宝贵,为了节约公网地址资源,还开发了一种 动态端口转换复用接口地址NPAT的技术,该技术将NAT设备的接口地址 配置在NAT地址池中,它通过端口区分的方式,不仅能使NAT设备可以和 外部网络进行正常通信,还能进行正常的PAT功能。

对于采用这种技术的NAT设备上,对于TCP/UDP的应用所使用的端口 一般都小于某个固定值A,因此只要在PAT转换中不分配A以下的端口值, 就可以保证NAT设备既可以和外部网络进行正常通信,同时也可以正常进 行PAT转换。但是,对于NAT设备生成的ICMP报文来说,其ICMP ID地 值为1~65535,不会小于某个固定值A。而在现有的NPAT技术实现中, 对于ICMP报文的PAT转换是利用ICMP ID代替端口进行转换的,即分配 的端口值与ICMP ID相同。因此,它存在着一个明显的缺陷,即一旦NAT 设备生成的ICMP报文中的ID与NAT映射条目中分配的端口相同时,就会 产生端口冲突,从而导致内部主机通过NPAT转换ping不通外部主机(或 网络),或者NAT设备ping不通外部主机(或网络)。

同样,当NAT设备在outside(外部)接口接收到目的地址为本地地址 的ICMP报文,并且报文中的identifier与ICMP映射条目中的端口值相同时, 也无法判定该报文是发送到本地设备的还是需要进行NAT转换送往内部主 机(或网络)的,从而导致外部主机ping不通NAT设备。

发明内容

本发明要解决的技术问题是提供一种保证网络地址转换设备与外网互 通的方法,能够避免NAT设备生成的ICMP报文与转发ICMP报文产生端 口冲突。

为了解决上述技术问题,本发明提供一种保证网络地址转换设备与外网 互通的方法,应用于网络地址转换设备,该设备包括用于转发因特网控制消 息协议ICMP报文的网络地址转换NAT模块和用于收发和处理本地ICMP 报文的ICMP模块,该方法包括以下步骤:

(a)当NAT设备从内部接口收到ICMP报文,NAT模块判断该报文需 要进行端口地址转换PAT但没有相应映射条目,且为其分配了本地地址和 端口时,向ICMP模块发送申请预留消息,携带该端口的值;

(b)ICMP模块收到所述申请预留消息后,判断与该端口值相同的ICMP 标识是否已使用,如果是,回复失败消息,执行步骤(c);否则预留与该 端口值相同的ICMP标识不再分配,回复成功消息,执行步骤(d);

(c)NAT模块收到失败消息后,重新分配端口,再次向ICMP模块发 送申请预留消息,返回步骤(b);

(d)NAT模块收到成功消息后,在映射表中创建该ICMP报文的映射 条目,进行正常的NAT转发。

进一步地,上述方法还可具有以下特点:还包括以下释放预留的ICMP 标识的处理过程:

(h)NAT模块需要删除PAT映射条目时,如果该条目的协议类型是 ICMP协议且内部全局地址为本地地址,则提取该条目中分配的端口值,向 ICMP模块发送释放消息;

(i)ICMP模块收到该释放消息后,释放预留的与该端口值相同的ICMP 标识,向NAT模块回复释放成功消息;

(j)NAT模块收到释放成功消息后,直接删除该映射条目。

进一步地,为了正确区分从外部接口接收的ICMP报文是需要进行NAT 转发还是由本地ICMP模块处理,本发明方法还包括以下对外部接口收到的 ICMP报文的处理过程:

(o)NAT设备从外部接口收到ICMP报文,如该报文需NAT转换, 由NAT模块查映射表中是否有该ICMP报文的映射条目,如果有,执行步 骤(p),如果没有,执行步骤(s);

步骤(p),NAT模块再判断该映射条目是否PAT映射条目,如果是, 执行步骤(q),否则按正常的NAT转发处理,结束;

步骤(q),判断该ICMP报文的类型是否响应报文,如果是,执行步 骤(r),否则,执行步骤(s);

步骤(r),进行NAT的转发处理,结束;

步骤(s),将该ICMP报文交给ICMP模块处理,结束;

进一步地,上述方法还可具有以下特点:所述步骤(a)NAT模块向ICMP 模块发送申请预留消息后,记录分配的端口值并等待ICMP模块的应答消 息,如果等待超时,则向ICMP模块重发该申请预留消息。

进一步地,上述方法还可具有以下特点:所述步骤(h)和步骤(p)中, NAT模块是通过映射条目的端口值判断该条目是否为PAT映射条目,如端 口值不为0,则该条目是PAT映射条目,否则不是PAT映射条目。

进一步地,上述方法还可具有以下特点:所述步骤(o)中,NAT设备 是通过以下方式判断收到的ICMP报文是否需进行NAT转换的:根据该报 文的目的地址查路由,如路由条目中的NAT标志被置位,则认为该ICMP 报文需进行NAT转换。

由上可知,本发明在原有的技术基础上增加了NAT模块与ICMP模块 之间的交互,使得NAT设备生成的ICMP报文的ID不会与PATICMP映射 条目中的端口冲突,保证NAT设备能够正确区分本地接收的ICMP报文, 使得NAT设备可以和外部网络在进行ping操作时可以互通。

附图说明

图1是NAT设备网络通信示意图;

图2是本发明实施例中NAT设备在Inside接口接收到ICMP报文后处 理的基本流程图;

图3是本发明实施例中NAT设备释放预留的ICMP ID的基本流程图;

图4是本发明实施例中ICMP模块收到ID申请预留消息的基本流程图;

图5是本发明实施例中NAT设备在outside接口接收到目的地址为本地 地址的ICMP报文后,NAT模块处理的基本流程图。

具体实施方式

下面结合附图和实施例对本发明做进一步地详细描述。

为了清楚说明,我们将NAT设备中进行端口地址转换的部分称为NAT 模块,将生成和处理ICMP报文的部分称为ICMP模块。

图2示出了本发明实施例中NAT设备在Inside(内部)接口方向接收 到内部主机发送的ICMP报文后的处理流程,当系统判定报文需要进行NAT 转换并需要新创建映射条目时,NAT模块进行如下步骤的处理:

步骤100,判断该ICMP报文需要进行的转换是否PAT转换,如果是, 进行步骤110;否则进行正常NAT转换流程,结束;

步骤110,提取ICMP报文中的源地址和ID号查NAT转换条目映射 表,如果查失败,即映射表中没有相应的映射条目,则进行步骤120,否 则直接进行NAT转换,结束;

步骤120,为该ICMP报文分配内部全局地址和端口;

步骤130,判断内部全局地址是否为本地地址,如果是,表示该ICMP 报文需要进行的转换是NPAT转换,进行步骤140,否则,表示该ICMP报 文需要进行的是普通的PAT转换,则进行正常NAT转换流程,结束;

步骤140,记录分配的端口值,并向ICMP模块发送ID申请预留消息, 该消息中包括分配的该端口值;

步骤150,等待ICMP模块的应答消息,如果等待超时,进行步骤160, 如果收到返回的响应消息,进行步骤170;

步骤160,向ICMP模块重发ID申请预留消息,返回步骤150;

步骤170,判断接收的消息类型,如果为申请预留成功消息,则进行步 骤180;如果是申请预留失败消息,表示ICMP模块中与分配端口相同的ID 已经被使用,则重新分配本地地址和端口,进行步骤130;

步骤180,在映射表中创建内部主机IP、ICMP ID号与分配的内部IP 地址、公用端口的PAT映射条目,然后进行正常的NAT转发。

图3示出了本发明实施例中NAT模块删除映射条目的处理流程,当 NAT模块在准备删除一条映射条目时,进行如下步骤:

步骤210,判断该映射条目是否为PAT映射条目且协议类型为ICMP类 型,如果是,进行步骤220;否则进行正常NAT删除操作,结束;

本实施例是根据映射条目中的端口值来判断是否为PAT映射条目的, PAT映射条目的端口值不为0,非PAT映射条目的端口值为0。

步骤220,判断该映射条目的内部全局地址是否为本地地址,如果是, 进行步骤230;否则进行正常的PAT条目删除操作,结束;

步骤230,提取该映射条目中的端口值并向ICMP模块发送ICMP ID释 放消息,该释放消息中包括该端口值;

步骤240,当收到ICMP模块发送的ICMP ID释放成功消息后,直接删 除该映射条目。

图4示出了本发明实施例中ICMP模块接收到来自NAT模块的消息后 的流程,包括如下步骤:

步骤310,判断接收的消息类型,如果是ICMP ID申请预留消息,进行 步骤320;如果为ICMP ID释放消息,进行步骤350;

步骤320,根据该申请预留消息中的端口值判断与该值相同的ICMP ID 是否已经被使用,如果是,进行步骤330;否则进行步骤340;

步骤330,向NAT模块发送申请预留失败消息,结束;

步骤340,预留该ICMP ID值,不再分配给ICMP报文,并向NAT模 块发送“申请预留成功”消息,结束;

步骤350,根据该释放消息中的端口值,到并释放值与该端口值相同 的ICMP ID,并向NAT模块发送“释放成功”消息。

在本实施例中,在现有的技术基础上增加了NAT模块与ICMP模块之 间的交互,在NPAT转换时,通知ICMP模块预留了值与NPAT转换中端口 值相同的ID,在NAT设备生成ICMP报文时,就不会使用该ID,由此, NAT设备生成的ICMP报文的ID就不会与PAT ICMP映射条目中的端口冲 突了。因而避免了端口冲突。不会出现内部主机通过NPAT转换ping不通 外部主机(或网络),或者NAT设备ping不通外部主机(或网络)的情况。

但是,对于外部主机ping NAT设备的情形,由于在外部主机ping NAT 设备时,ICMP报文中的ID是外部主机生成的,其ID值无法控制。因此, 在outside接口收到目的地址为本地地址的ICMP报文且报文中的ID与 ICMP映射条目中的端口值相同时,由于该端口值即可能是分配给内部主机 发送的ICMP,也是能是分配给ICMP模块发送的ICMP,所以,还是无法 判定该报文是发送到本地设备的还是需要进行NAT转换送往内部主机。

图5示出了本发明实施例当NAT设备从外部接口接收到ICMP报文后 的流程,包括如下步骤:

步骤410,判断接收到的ICMP报文是否需要进行NAT转换,如果是, 进行步骤420;否则进行普通的报文转发流程,结束;

在本实施例中,根据报文目的地址查路由,如果发现NAT标志被置位, 则表示路由条目是NAT转换生成的,需要进行NAT转换。

步骤420,将报文送到NAT模块;

步骤430,通过该ICMP报文的源IP地址和ICMP ID号来查映射表, 如果查到,进行步骤440,如果查不到,进行步骤460;

对于发送给NAT设备的应答报文,查映射表时肯定失败,因为NAT 设备发出的ICMP报文,报文的ID不会和NAT映射条目中的端口值相同, 这就是前面预留ICMP ID的目的,此时应交给ICMP模块处理。只有是发往 内部主机的应答,查映射表时才会成功。

步骤440,判断该ICMP报文需要进行的转换是否PAT转换,如查出的 映射条目中的端口值不为0,则为PAT转换,进行步骤450,否则,进行正 常NAT转发流程,结束;

步骤450,判断该ICMP报文类型是否为ICMP请求报文,如果是,进 行步骤460;否则,即为ICDMP响应报文,进行步骤470;

步骤460,将报文直接交给ICMP模块进行处理,结束;

步骤470,进行PAT的转发处理,结束。

由于目前对于动态NAT转换不支持从外部主机ping内部主机,因此对 于从外部接口收到的ICMP请求报文无需进行NAT处理,只需将它送到 ICMP模块进行相应的操作,或应答或丢弃。

本文发布于:2023-04-14 19:33:22,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/86399.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图