一种多网卡UDP通信方法及系统技术方案

技术编号:38647399 阅读:6 留言:0更新日期:2023-09-02 22:38
本发明专利技术公开一种多网卡UDP通信方法及系统,涉及数据识别与处理技术领域,包括:通过在UDP服务启动后绑定任意地址,以对所有网卡进行数据监听;将本机IP地址保存在接收端口中指定的内存中;接收数据时,通过接收端口返回的带外数据,解析出接收数据的网卡的本机IP地址;通过发送端口发送数据时,将解析出的本机IP地址作为源IP地址进行数据发送。无需对每个网卡的每个IP地址进行遍历,也无需花费额外的代价进行监听,适用于修改或动态添加IP地址的情况。情况。情况。

【技术实现步骤摘要】
一种多网卡UDP通信方法及系统


[0001]本专利技术涉及数据识别与处理
,特别是涉及一种多网卡UDP通信方法及系统。

技术介绍

[0002]SIP协议支持UDP、TCP通信协议,且目前主流平台都支持UDP通信。目前的主流服务器一般都是双网卡,一个网卡对内网通信,一个网卡对接公网,且一个网卡下可能会配置多个IP地址。
[0003]为了支持多网卡下的UDP通信,目前主流方案是在UDP服务器启动时,调用操作系统(如Linux或Windows)API遍历本机所有网卡和所有配置的IP地址,然后对每个IP地址进行逐个监听。
[0004]但是,该种方法不适用于动态配置(或人工配置)的IP地址,或者需要额外花一些代价动态监听网络IP地址的变化,流程上比较复杂;而且有的网卡会设有权限,不允许被遍历,由此导致多网卡下的UDP通信存在问题。
[0005]再者,在发送数据时,如果绑定任意地址,并且没有指定发送地址,则操作系统会根据路由规则随意选择一个本地IP地址(网卡),而该IP地址不一定时接收数据的IP地址,就会导致接收数据的地址与发送数据的地址不一样,造成数据无法被成功接收。

技术实现思路

[0006]为了解决上述问题,本专利技术提出了一种多网卡UDP通信方法及系统,无需对每个网卡的每个IP地址进行遍历,也无需花费额外的代价进行监听,适用于修改或动态添加IP地址的情况。为了实现上述目的,本专利技术采用如下技术方案:第一方面,本专利技术提供一种多网卡UDP通信方法,包括:通过在UDP服务启动后绑定任意地址,以对所有网卡进行数据监听;将本机IP地址保存在接收端口中指定的内存中;接收数据时,通过接收端口返回的带外数据,解析出接收数据的网卡的本机IP地址;通过发送端口发送数据时,将解析出的本机IP地址作为源IP地址进行数据发送。
[0007]作为可选择的实施方式,UDP服务启动时,通过监听IPv4的0.0.0.0地址或IPv6的::0地址,以在内核绑定任意地址,从而对所有网卡进行数据监听。
[0008]作为可选择的实施方式,在接收端口中保存本机IP地址的过程中,通过调用系统接口setsocketopt,设置IP_PKTINFO或IPV6_RECVPKTINFO参数,以在接收端口中指定内存地址用于保存本机IP地址。
[0009]作为可选择的实施方式,根据接收端口返回的带外数据,解析出IP_PKTINFO和IPV6_PKTINFO的类型,从而得到接收数据的网卡的本机IP地址。
[0010]作为可选择的实施方式,在接收数据时,采用保存有本机IP地址的recvmsg端口替换recv端口。
[0011]作为可选择的实施方式,在发送数据时,采用sendmsg端口替换send端口。
[0012]作为可选择的实施方式,将解析出的本机IP地址作为源IP地址指定给sendmsg端口,以保证发送数据时的源IP地址与接收数据时的本机IP地址相同。
[0013]第二方面,本专利技术提供一种多网卡UDP通信系统,包括:地址绑定模块,被配置为通过在UDP服务启动后绑定任意地址,以对所有网卡进行数据监听;地址保存模块,被配置为将本机IP地址保存在接收端口中指定的内存中;地址解析模块,被配置为接收数据时,通过接收端口返回的带外数据,解析出接收数据的网卡的本机IP地址;地址指定模块,被配置为通过发送端口发送数据时,将解析出的本机IP地址作为源IP地址进行数据发送。
[0014]第三方面,本专利技术提供一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成第一方面所述的方法。
[0015]第四方面,本专利技术提供一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成第一方面所述的方法。
[0016]与现有技术相比,本专利技术的有益效果为:本专利技术创新性提出一种多网卡UDP通信方法及系统,在UDP服务启动时,通过监听0.0.0.0(IPv4)或::0(IPv6)地址,以在内核匹配绑定任意地址,从而实现对所有网卡的监听,无需对每个网卡的每个IP地址进行遍历,也无需花费额外的代价,同样也适用于修改或动态添加IP地址的情况,适用于多网卡、多网段场景下单个服务的UDP通信。
[0017]本专利技术创新性提出一种多网卡UDP通信方法及系统,在接收数据时,通过接收端口返回的带外数据,从而可以解析出本机IP地址,同样无需对所有IP地址进行遍历,就可以得知进行数据传输的IP地址;在发送数据时,将解析出的本机IP地址作为源IP地址指定给发送端口,避免操作系统内核调用路由表规则而动态选择网卡及源IP地址,避免所选择的源IP地址与接收数据的本机IP地址不同,解决由此导致的数据无法被接收的问题。
[0018]本专利技术附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本专利技术的实践了解到。
附图说明
[0019]构成本专利技术的一部分的说明书附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。
[0020]图1为本专利技术实施例1提供的多网卡UDP通信方法流程图。
具体实施方式
[0021]下面结合附图与实施例对本专利技术做进一步说明。
[0022]应该指出,以下详细说明都是示例性的,旨在对本专利技术提供进一步的说明。除非另
有指明,本文使用的所有技术和科学术语具有与本专利技术所属
的普通技术人员通常理解的相同含义。
[0023]需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本专利技术的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0024]在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。
[0025]实施例1如图1所示,本实施例提供一种多网卡UDP通信方法,包括:通过在UDP服务启动后绑定任意地址,以对所有网卡进行数据监听;将本机IP地址保存在接收端口中指定的内存中;接收数据时,通过接收端口返回的带外数据,解析出接收数据的网卡的本机IP地址;通过发送端口发送数据时,将解析出的本机IP地址作为源IP地址进行数据发送。
[0026]在本实施例中,UDP服务启动时,通过监听0.0.0.0(IPv4)或::0(IPv6)地址,以在内核匹配绑定任意地址,从而实现对所有网卡的监听,无需对每个网卡的每个IP地址进行遍历,也无需花费额外的代价,同样也适用于修改或动态添加IP的情况,且应用程序无需重启。
[0027]在本实施例中,将IP Header中的目的地址,也就是本本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种多网卡UDP通信方法,其特征在于,包括:通过在UDP服务启动后绑定任意地址,以对所有网卡进行数据监听;将本机IP地址保存在接收端口中指定的内存中;接收数据时,通过接收端口返回的带外数据,解析出接收数据的网卡的本机IP地址;通过发送端口发送数据时,将解析出的本机IP地址作为源IP地址进行数据发送。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...

【专利技术属性】
技术研发人员:孙素亮刘宏领田克强张磊徐珂王维令王洋张伟郭瑞安勇
申请(专利权)人:国网山东省电力公司菏泽供电公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1