专利名称:使用igmp实现内网穿透的方法和内网穿透系统的制作方法
技术领域:
本发明涉及一种使用IGMP实现内网穿透的方法和内网穿透系统。
背景技术:
目前大部分用户上网都是通过路由器(router)拨号,用户的电脑(PC)在路由器 (router)后,电脑(PC)使用私网地址。如图1所示。当PC需要访问外部网络时,路由器将PC的ip(网络之间互连的协议)地址进行 NAPT(Network Address Port Translation)转换为公网的地址,并为此记录一个session, 记录了数据的源地址、源端口、目的地址和目的端口等信息。此后,当外部网络相应数据发回来时,路由器根据会话(session)记录进行匹配。匹配成功则将数据转发到内部相应的 PC上。这样的机制下,如果外部网络想主动访问内网的PC,会被路由器丢掉。因为此时路由器内部并没有相应的session记录,路由器内部防火墙一般会将这种没有记录的“不请自来”的数据包丢弃,保证内部网络的安全性。外部网络需要主动访问路由器后面的一台主机时,一般有两种方法解决。第一种方法是在路由器上手动添加端口映射规则,将外部来的某种指定的数据转到内网指定的PC。这种方法需要修改路由器,需要对路由器有一定的了解才能配置。第二种方法即通常说的“打洞”,是利用了路由器中的NAPT机制。使用这种“打洞” 的方法要求路由器使用的NAT是Cone NAT。如果路由器使用的NAT是Symmetric NAT,这种“打洞”方法就不管用了。
发明内容
为了克服上述的缺陷,本发明提供一种可用于Symmetric NAT路由器的使用IGMP 实现内网穿透的方法。为达到上述目的,一方面,本发明提供一种使用IGMP实现内网穿透的方法,所述方法令第一终端能够通过外部网络主动访问内网的第二终端,所述方法包括下述步骤所述第一终端发送请求至服务器,第一终端和服务器之间通过心跳机制长期保持此连接;所述第二终端发送IGMP报文,建组播域并归入该组;本地建立UDP套接字,并在一端口上监听;所述第二终端经过第二路由器发送消息至服务器,将组播域值和端口值发送至服务器,提出访问所述第一终端的请求;服务器将访问请求转发给第一终端;第一终端将数据通过UDP的方式发送至第二路由器,目的地址为所述组播域值, 目的端口为所述端口值;第二路由器将数据转发给第二终端。
另一方面,本发明提供一种内网穿透系统,至少包括依次连接的第一终端、服务器、第二路由器和第二终端,所述系统在使用上述方法后第二终端能够通过所述服务器主动访问第一终端。本发明使用IGMP实现内网穿透的方法中,IGMP使用组播地址传输,且IGMP不需要使用端口号,可以绕开Symmetric NAT转换端口号的问题。实现了对包括Symmetric NAT 路由器系统在内的多种系统的内网穿透,效果良好。本发明内网穿透系统通过网络实现一终端访问另一终端,使用IGMP实现了内网穿透。结构合理,使用方便,性能良好。
图1为现有PC上网的原理示意图。图2为Cone NAT的工作原理示意图。图3 “打洞”的工作原理示意图。图4图3所示“打洞”的步骤示意图。图5本发明使用IGMP实现内网穿透的方法的步骤示意图。
具体实施例方式下面结合说明书附图和实施例对本发明做详细描述。当客户端(例如PC)向互连网上一台服务器A发送请求时,路由器(router)为其分配一个session,并分配一个端口号。路由器记录下本次session的源IP、源端口、目的 IP和目的端口。如果此时客户端向另外一台服务器B发送一个同样的请求,路由器会为其再分配一个session。如果分配的端口号不变,此类型的NAT叫Cone NAT,如图2所示。如果路由器为其分配了另外一个端口,此类型的NAT叫Symmetric NAT。在Cone NAT路由器的情况下可以通过“打洞”来实现一个客户端通过外网主动访问另一个客户端。这种“打洞”操作需要一个具有固定互连网IP地址的主机作为服务器, 即作为连接建立的中转站。如图3和图4所示,“打洞”方法主要包括下述步骤l.PC A先发一个请求到服务器(server);经过router A转换后,源地址和端口改为50. 50. 50. 50:3000 ;server收到后将此信息保存下来,PC A和server之间通过心跳机制长期保持此连接,用来传输命令。2. PC B向服务器A发请求,查询router A对外开放的端口。3. server记录下PC B对外的IP地址和端口号40. 40. 40. 40 2000。同时向PC A 发送请求,要求PC A使用原来的socket向40. 40. 40. 40的2000端口发送请求。4. server 向 PC B 发送 PC A 的 IP 地址和端口 号 50. 50. 50. 50 3000。5. PC A向PC B发送请求,目的端口为2000。在router A中生成一个session,源 IP、源端口、目的 ip和目的端口分别为 50. 50. 50. 50:3000,40. 40. 40. 402000。对于Router B来讲,此数据报没有相应的session匹配,将其丢弃。6. PC B向PC A的3000端口发起数据请求。7. PC B的请求到达routerA后,routerA查找session,发现可以匹配,将数据转发到内网PC A上,这样一条数据链路就建立起来了。如果路由器使用的NAT是Symmetric NAT, “打洞”方法就不管用了,因为Router 做NAPT后端口是不固定的。虽然一般情况下是递增的,但仅仅是一般情况,不能保证100% 正确。这一特点令应用“打洞”方法易出现错误。本发明使用IGMP实现内网穿透的方法可以解决这一问题。IGMP使用组播地址传输。相比UDP,IGMP不需要使用端口号,可以绕开Symmetric NAT转换端口号的问题。其原理和UDP的打洞技术类似,只是借用了组播地址。该方法令第二终端能够通过外部网络主动访问内网的第一终端,无需满足端口固定的要求。该方法包括下述步骤第一终端发送请求至服务器,第一终端和服务器之间通过心跳机制期保持此连接;第二终端发送IGMP报文,建组播域并归入该组;本地建立UDP套接字,并在一端口上监听;第二终端经过第二路由器发送消息至服务器,将组播域值和端口值发送至服务器,提出访问第一终端的请求;服务器将访问请求转发给第一终端;第一终端将数据通过UDP的方式发送至第二路由器,目的地址为所述组播域值, 目的端口为所述端口值;第二路由器将数据转发给第二终端。通过上述步骤,本发明使用IGMP实现内网穿透的方法成功地实现了一终端通过外部网络主动访问内网的另一终端。而且不限于使用的为何种NAT,C0neNAT和Symmetric NAT均可。适用性更广,性能更好。优选实施例如图5所示,使用IGMP实现内网穿透的方法的步骤为1. PC A首先先发一个请求到服务器(server),PC A和server之间通过心跳机制长期保持此连接,用来传输命令。2. PC B 发送一个 IGMP report 报文,加入一个组:234. 5. 6. 7。3. PC B本地建立udp socket在12;34端口上监听,然后发送消息到server,通知 server自己加入组播域234. 5. 6. 7,并希望访问PCA的数据,自己使用1234端口接收。4. server将消息转发给PC A。5. PC A将数据通过UDP的方式发送,目的地址为234. 5. 6. 7,目的端口为12;34。如果PC B也在路由器后,当PC B发送IGMP r印ort报文时,路由器会建立一个规则允许目的IP为234. 5. 6. 7的包进入,并转发给PC B。这样PC B就可以接收到PC A的数据了。此方法中UDP端口可以随机产生,每次传完数据后释放端口,下次再请求数据时另外申请组播域和UDP端口,避免和公网上的其他组播服务冲突。本发明内网穿透系统至少包括依次连接的第一终端、服务器、第二路由器和第二终端,该系统在使用上述方法后第二终端能够通过所述服务器主动访问第一终端。上述使用IGMP实现内网穿透的方法可以令本发明内网穿透系统实现一终端通过外部网络主动访问内网的另一终端,解决了使用Symmetric NAT的系统无法主动访问的问
以上,仅为本发明的较佳实施例,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求所界定的保护范围为准。
权利要求
1.一种使用IGMP实现内网穿透的方法,所述方法令第一终端能够通过外部网络主动访问内网的第二终端,其特征在于,所述方法包括下述步骤所述第一终端发送请求至服务器,第一终端和服务器之间通过心跳机制保持此连接; 所述第二终端发送IGMP报文,建组播域并归入该组;本地建立UDP套接字,并在一端口上监听;所述第二终端经过第二路由器发送消息至服务器,将组播域值和端口值发送至服务器,提出访问所述第一终端的请求;服务器将访问请求转发给第一终端;第一终端将数据通过UDP的方式发送至第二路由器,目的地址为所述组播域值,目的端口为所述端口值;第二路由器将数据转发给第二终端。
2.—种内网穿透系统,至少包括依次连接的第一终端、服务器、第二路由器和第二终端,其特征在于所述系统在使用权1所述方法后第二终端能够通过所述服务器主动访问第一终端。
全文摘要
本发明公开一种使用IGMP实现内网穿透的方法,为解决使用SymmetricNAT的系统无法用一终端主动访问另一终端的缺陷而设计。该方法主要包括下述步骤第一终端发送请求至服务器,两者之间保持连接;第二终端发送IGMP报文,建组播域并归入该组,本地建立UDP套接字,并在一端口上监听;第二终端将组播域值和端口值发送至服务器,提出访问请求;服务器将访问请求转发给第一终端;第一终端将数据发送至第二路由器,由其转发给第二终端。本发明还公开了一种内网穿透系统,至少包括两个终端、一个路由器和一服务器。本发明方法适用于用一终端主动访问另一终端的各种系统,尤其是使用Symmetric NAT的系统。
文档编号H04L29/06GK102420774SQ201210002998
公开日2012年4月18日 申请日期2012年1月6日 优先权日2012年1月6日
发明者王金桂, 闫瑞轩 申请人:深圳市共进电子股份有限公司