本发明涉及数据识别与处理,特别是涉及一种多网卡udp通信方法及系统。
背景技术:
1、sip协议支持udp、tcp通信协议,且目前主流平台都支持udp通信。目前的主流服务器一般都是双网卡,一个网卡对内网通信,一个网卡对接公网,且一个网卡下可能会配置多个ip地址。
2、为了支持多网卡下的udp通信,目前主流方案是在udp服务器启动时,调用操作系统(如linux或windows)api遍历本机所有网卡和所有配置的ip地址,然后对每个ip地址进行逐个监听。
3、但是,该种方法不适用于动态配置(或人工配置)的ip地址,或者需要额外花一些代价动态监听网络ip地址的变化,流程上比较复杂;而且有的网卡会设有权限,不允许被遍历,由此导致多网卡下的udp通信存在问题。
4、再者,在发送数据时,如果绑定任意地址,并且没有指定发送地址,则操作系统会根据路由规则随意选择一个本地ip地址(网卡),而该ip地址不一定时接收数据的ip地址,就会导致接收数据的地址与发送数据的地址不一样,造成数据无法被成功接收。
技术实现思路
1、为了解决上述问题,本发明提出了一种多网卡udp通信方法及系统,无需对每个网卡的每个ip地址进行遍历,也无需花费额外的代价进行监听,适用于修改或动态添加ip地址的情况。
2、为了实现上述目的,本发明采用如下技术方案:
3、第一方面,本发明提供一种多网卡udp通信方法,包括:
4、通过在udp服务启动后绑定任意地址,以对所有网卡进行数据监听;
5、将本机ip地址保存在接收端口中指定的内存中;
6、接收数据时,通过接收端口返回的带外数据,解析出接收数据的网卡的本机ip地址;
7、通过发送端口发送数据时,将解析出的本机ip地址作为源ip地址进行数据发送。
8、作为可选择的实施方式,udp服务启动时,通过监听ipv4的0.0.0.0地址或ipv6的::0地址,以在内核绑定任意地址,从而对所有网卡进行数据监听。
9、作为可选择的实施方式,在接收端口中保存本机ip地址的过程中,通过调用系统接口setsocketopt,设置ip_pktinfo或ipv6_recvpktinfo参数,以在接收端口中指定内存地址用于保存本机ip地址。
10、作为可选择的实施方式,根据接收端口返回的带外数据,解析出ip_pktinfo和ipv6_pktinfo的类型,从而得到接收数据的网卡的本机ip地址。
11、作为可选择的实施方式,在接收数据时,采用保存有本机ip地址的recvmsg端口替换recv端口。
12、作为可选择的实施方式,在发送数据时,采用sendmsg端口替换send端口。
13、作为可选择的实施方式,将解析出的本机ip地址作为源ip地址指定给sendmsg端口,以保证发送数据时的源ip地址与接收数据时的本机ip地址相同。
14、第二方面,本发明提供一种多网卡udp通信系统,包括:
15、地址绑定模块,被配置为通过在udp服务启动后绑定任意地址,以对所有网卡进行数据监听;
16、地址保存模块,被配置为将本机ip地址保存在接收端口中指定的内存中;
17、地址解析模块,被配置为接收数据时,通过接收端口返回的带外数据,解析出接收数据的网卡的本机ip地址;
18、地址指定模块,被配置为通过发送端口发送数据时,将解析出的本机ip地址作为源ip地址进行数据发送。
19、第三方面,本发明提供一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成第一方面所述的方法。
20、第四方面,本发明提供一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成第一方面所述的方法。
21、与现有技术相比,本发明的有益效果为:
22、本发明创新性提出一种多网卡udp通信方法及系统,在udp服务启动时,通过监听0.0.0.0(ipv4)或::0(ipv6)地址,以在内核匹配绑定任意地址,从而实现对所有网卡的监听,无需对每个网卡的每个ip地址进行遍历,也无需花费额外的代价,同样也适用于修改或动态添加ip地址的情况,适用于多网卡、多网段场景下单个服务的udp通信。
23、本发明创新性提出一种多网卡udp通信方法及系统,在接收数据时,通过接收端口返回的带外数据,从而可以解析出本机ip地址,同样无需对所有ip地址进行遍历,就可以得知进行数据传输的ip地址;在发送数据时,将解析出的本机ip地址作为源ip地址指定给发送端口,避免操作系统内核调用路由表规则而动态选择网卡及源ip地址,避免所选择的源ip地址与接收数据的本机ip地址不同,解决由此导致的数据无法被接收的问题。
24、本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
1.一种多网卡udp通信方法,其特征在于,包括:
2.如权利要求1所述的一种多网卡udp通信方法,其特征在于,udp服务启动时,通过监听ipv4的0.0.0.0地址或ipv6的::0地址,以在内核绑定任意地址,从而对所有网卡进行数据监听。
3.如权利要求1所述的一种多网卡udp通信方法,其特征在于,在接收端口中保存本机ip地址的过程中,通过调用系统接口setsocketopt,设置ip_pktinfo或ipv6_recvpktinfo参数,以在接收端口中指定内存地址用于保存本机ip地址。
4.如权利要求3所述的一种多网卡udp通信方法,其特征在于,根据接收端口返回的带外数据,解析出ip_pktinfo和ipv6_pktinfo的类型,从而得到接收数据的网卡的本机ip地址。
5.如权利要求1所述的一种多网卡udp通信方法,其特征在于,在接收数据时,采用保存有带外数据的recvmsg端口替换recv端口。
6.如权利要求1所述的一种多网卡udp通信方法,其特征在于,在发送数据时,采用sendmsg端口替换send端口。
7.如权利要求6所述的一种多网卡udp通信方法,其特征在于,将解析出的本机ip地址作为源ip地址指定给sendmsg端口,以保证发送数据时的源ip地址与接收数据时的本机ip地址相同。
8.一种多网卡udp通信系统,其特征在于,包括:
9.一种电子设备,其特征在于,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,用于存储计算机指令,所述计算机指令被处理器执行时,完成权利要求1-7任一项所述的方法。