掌桥专利:专业的专利平台
掌桥专利
首页

一种套接字组及基于套接字组的数据传输方法

文献发布时间:2024-04-18 20:02:18


一种套接字组及基于套接字组的数据传输方法

技术领域

本发明属于网络传输技术领域,尤其涉及一种套接字组及基于套接字组的数据传输方法。

背景技术

套接字是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。网络应用程序将要传输的数据写入它所在主机的Socket中,该Socket通过网络接口的传输介质将这段信息发送给另一台主机的Socket中,使这段信息能传送到其他程序中。因此,两个应用程序之间的数据传输要通过套接字来完成。

网络传输过程中多种因素会影响套接字的稳定性,例如网络连接不稳定、数据传输过程中出现错误等,所以仅仅使用单个套接字可能影响网络传输的可靠性。

发明内容

鉴于以上现有技术的不足,发明的目的在于提供一种套接字组及基于套接字组的数据传输方法。

本发明第一方面提供一种套接字组,包括多个套接字作为套接字组的传输网络链路用于传输,多个所述传输网络链路中任一传输网络链路连通,所述套接字组连通;

所述套接字组的类型包括广播组、备份组及平衡组;

所述广播组中的多个第一网络链路分别发送多个第一数据包,所述广播组的接收端顺序接收所述广播组中多个第一数据包并丢弃冗余的第一数据包;

所述备份组中包括多个第二网络链路,任一所述第二网络链路作为第二运行链路发送第二数据包,当所述第二运行链路故障时,选取所述第二运行链路外的其它第二网络链路作为第二备用链路,对所述第二数据包进行断点续传;

所述平衡组中包括多个第三网络链路,多个所述第三网络链路并行负担单个第三数据包进行发送,单个第三网络链路对单个所述第三数据包的负担量通过平衡算法计算获得,所述平衡算法包括轮询算法及最小飞行窗口检测算法。

进一步的,所述套接字组与套接字传输方式相同。

进一步的,所述备份组中,所述第二备用链路进行断点续传时,以所述第二运行链路最后接收到的ACK确认字符为断点。

进一步的,所述备份组以预设的超时时间,为所述备份组的发送端与所述备份组的接收端的响应时间阈值,所述响应时间阈值用以判定当前运行的第二运行链路是否故障。

进一步的,所述备份组中,所述第二备用链路对所述第二数据包进行断点续传时,所述第二备用链路与故障的第二运行链路同步运行,直至故障的第二运行链路至稳定状态。

进一步的,所述稳定状态包括:

故障的第二运行链路恢复正常,故障的第二运行链路彻底断开;

当故障的第二运行链路恢复正常时,当前进行断点续传的第二备用链路断开;

当故障的第二运行链路彻底断开时,当前进行断点续传的第二备用链路继续对第二数据包进行传输。

进一步的,单个所述套接字组通过SRTSOCKET类型值表示,所述SRTSOCKET类型值包括ID及SRTGROUP_MASK,所述ID为套接字组的字组ID,所述字组ID与套接字组内包括的传输网络链路对应的套接字ID相同,所述SRTGROUP_MASK表示所述字组ID位数。

本发明第二方面提供一种基于套接字组的数据传输方法,基于以上任一项所述一种套接字组实现,当广播组类型套接字组、备份组类型套接字组及平衡组类型套接字组中任一类型套接字组对数据包进行发送时,当前进行数据包发送的套接字组的接收端对所有传输网络链路发送的数据包进行接收,当当前接收到的数据包的序列号小于上一接收到的数据包的序列号时,丢弃序列号小的数据包。

进一步的,通过以上任一项所述一种套接字组进行数据传输时,监听方需要设置GROUP_CONNECT标志,所述GROUP_CONNECT标志用于允许套接字作为传输网络链路接受绑定连接。

进一步的,设置所述GROUP_CONNECT标志的监听方调用accept函数时,返回值为套接字组的字组ID。

本发明有益效果如下:

本发明提供一种套接字组及基于套接字组的数据传输方法,包括广播、备份以及平衡三种类型,广播组类型使用多个网络链路执行相同的传输,备份组类型当一个连接变得不稳定时,另一个连接立即被激活,通过当前活动连接发送数据包,平衡组类型使用多个网络链路执行相同的传输,但单个输入信号将发送的数据包分布在这些链路之间,以便一个链路可以利用另一个链路的带宽负担,套接字组方案可以弥补套接字稳定性受多种因素影响的缺点,提升套接字健壮性和稳定性。

附图说明

附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种套接字组中广播组类型结构示意图;

图2为本发明实施例提供的一种套接字组中备份组类型结构示意图;

图3为本发明实施例提供的一种套接字组中平衡组类型结构示意图。

具体实施方式

为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。应该理解,这些描述只是示例性的,并非用于限定本发明的范围。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明公开的概念。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的方法和系统的例子。

本发明提出了一种套接字组及基于套接字组的数据传输方法,提供的套接字组是一个与套接字平行的单独实体,并且在组上执行的操作将使用在底层套接字上执行适当操作来实现。套接字组包括广播、备份以及平衡三种类型,组中创建多条链路进行数据传输,提高网络传输的健壮性与可靠性。

下面结合图1至图3描述本发明的实施例。

本发明第一方面提供一种套接字组,包括多个套接字作为套接字组的传输网络链路用于传输,多个所述传输网络链路中任一传输网络链路连通,所述套接字组连通;

其中,所述套接字组与套接字传输方式相同。

其中,单个所述套接字组通过SRTSOCKET类型值表示,所述SRTSOCKET类型值包括ID及SRTGROUP_MASK,所述ID为套接字组的字组ID,所述字组ID与套接字组内包括的传输网络链路对应的套接字ID相同,所述SRTGROUP_MASK表示所述字组ID位数。

所述套接字组的类型包括广播组、备份组及平衡组;

所述广播组中的多个第一网络链路分别发送多个第一数据包,所述广播组的接收端顺序接收所述广播组中多个第一数据包并丢弃冗余的第一数据包;

进一步的,如图1所示,其中的多个packet为第一网络链路,前后输入输出的GroupID为传输的数据包,广播组是最简单的套接字组类型,数据包将同时通过组中的所有连接发送,接收端将按顺序整理数据包并丢弃多余的数据包,但是这种方法始终利用了组中所有链接的全部容量,而每次只能通过一个链接传输有效数据,在这种情况下,每个连接都会带来100%的额外开销。

所述备份组中包括多个第二网络链路,任一所述第二网络链路作为第二运行链路发送第二数据包,当所述第二运行链路故障时,选取所述第二运行链路外的其它第二网络链路作为第二备用链路,对所述第二数据包进行断点续传;

进一步的,如图2所示,其中的packet为第二运行链路,其余未标示的为第二网络链路,前后输入输出的GroupID为传输的数据包,正常情况下备份组中只有一条链接用于传输,当某个连接出现故障时,该连接将被视为不稳定。备份组有一个可配置的超时时间是从接收端发送回发送端的连续响应之间的最大时间。如果超过了这个时间,那么连接将被认为是不稳定的,也可能是链接已经断开。

其中,所述第二备用链路进行断点续传时,以所述第二运行链路最后接收到的ACK确认字符为断点。

其中,所述备份组以预设的超时时间,为所述备份组的发送端与所述备份组的接收端的响应时间阈值,所述响应时间阈值用以判定当前运行的第二运行链路是否故障。

其中,所述备份组中,所述第二备用链路对所述第二数据包进行断点续传时,所述第二备用链路与故障的第二运行链路同步运行,直至故障的第二运行链路至稳定状态。

其中,所述稳定状态包括:

故障的第二运行链路恢复正常,故障的第二运行链路彻底断开;

当故障的第二运行链路恢复正常时,当前进行断点续传的第二备用链路断开;

当故障的第二运行链路彻底断开时,当前进行断点续传的第二备用链路继续对第二数据包进行传输。

进一步的,当一个连接变得不稳定时,另一个连接立即被激活,并首先将自上次收到ACK以来的一直保存在发送器缓冲区中的所有数据包发送出去。从那时起,有两条连接处于活动状态,直到问题最终解决,要么不稳定的连接恢复正常,要么断开。状态维护始终遵循以下规则:

如果有多条稳定链路,选择传输性能更优的一条并关闭其他链路,关闭意味着该链路不再活动,不再发送有效数据包,但连接仍然保持良好状态,以便在必要时接管数据传输;

不稳定的链路无论如何也要继续使用,即使这意味着在短时间内进行并行发送,这种状态应该持续到确定链路是否断开为止,要么是链路自己断开,要么一直保持不稳定。

与广播组类型相比,备份组允许在实现链路冗余的同时具有很小的额外开销,因为它将额外的链路利用率保持在最低水平。然而,它也带来了一些缺点:

延迟代价;备份组中链路的延迟必须至少是超时的两倍,甚至在高比特率情况下需要更高,否则所有未确认的数据包可能无法按时完成发送。延迟时间必须能够补偿通常的丢失重传时间和重新发送所有未确认数据包所需的时间,如果不满足这个时间要求,备份连接优势将不明显;

带宽代价;备份组激活另一个连接时,必须重新发送所有尚未确认的数据包,这是连接突然断开时采取的最小风险措施,因此,链路切换意味着在短时间内发送大量数据包,如果带宽限制太强,会影响这些数据包的发送。

所述平衡组中包括多个第三网络链路,多个所述第三网络链路并行负担单个第三数据包进行发送,单个第三网络链路对单个所述第三数据包的负担量通过平衡算法计算获得,所述平衡算法包括轮询算法及最小飞行窗口检测算法。

进一步的,如图3所示,其中的packet1至packet6为第三网络链路,前后输入输出的GroupID为传输的数据包,平衡组使用多个网络链路执行相同的传输,但单个输入信号将发送的数据包分布在这些链路之间,以便一个链路可以利用另一个链路的带宽负担。需要注意的是,这个组不是直接用作保护,它通常旨在处理某个链路无法承受信号比特率的情况。为了利用保护,机制应快速检测到链路已断开,以便在断开的链路上丢失的数据包可以在其他链路上重新发送。

一般采用以下两种算法进行平衡:

轮询算法。这是一种简单的轮询算法,下一个被选中发送下一条数据包的链路是到目前为止使用最旧的链路。

最小飞行窗口检测。这种算法对最小飞行窗口进行周期性测量,以此确定在某个链路上发送数据包的“成本”。

本发明第二方面提供一种基于套接字组的数据传输方法,基于以上任一项所述一种套接字组实现,当广播组类型套接字组、备份组类型套接字组及平衡组类型套接字组中任一类型套接字组对数据包进行发送时,当前进行数据包发送的套接字组的接收端对所有传输网络链路发送的数据包进行接收,当当前接收到的数据包的序列号小于上一接收到的数据包的序列号时,丢弃序列号小的数据包。

进一步的,套接字组具有与套接字相同的类型ID,为了支持组,添加SRTSOCKET类型为int32_t,并设置适当的位来定义该ID表示组,称为SRTGROUP_MASK,可以通过ID&SRTGROUP_MASK来确定SRTSOCKET类型的值表示单个套接字或者组。

进一步的,套接字组与单个套接字操作相同,根据所使用的组类型使用适当的方式。例如,当发送有效载荷时:对于广播组,通过所有套接字发送;对于备份组,通过所有当前活动链接发送;对于平衡组,通过当前选择的链接发送。

读取操作将在所有链接上进行,并根据序列号来确定有效载荷的顺序,如果在任何链接上接收到下一个数据包比链接上的数据包更旧,该数据包将被丢弃。组之间的读取差异在于:对于广播和备份组,序列号是同步的,并用于对数据包进行排序;对于负载均衡组,数据包编号用于对数据包进行排序,也就是序列号不同步。

其中,通过以上任一项所述一种套接字组进行数据传输时,监听方需要设置GROUP_CONNECT标志,所述GROUP_CONNECT标志用于允许套接字作为传输网络链路接受绑定连接。

其中,设置所述GROUP_CONNECT标志的监听方调用accept函数时,返回值为套接字组的字组ID。

使用套接字组创建连接时,监听方需要设置GROUPCONNECT标志,此标志允许套接字接受绑定连接,如果没有设置此标志时,尝试绑定的连接将被拒绝,设置了此标志的监听方调用accept函数时,返回的是套接字组ID。

监听方accept仅在连接建立时返回一次套接字组ID,一旦组中有一个已经连接的套接字时,就不会再报告新的连接,当创建连接时握手请求中附带的组已经存在,该连接将添加到现有的组内,否则将创建一个新的组。

调用方创建连接时需要创建一个组而不是套接字,应用程序将套接字添加到组中,并在断开连接时关闭组,例如,要以广播组类型创建套接字组,可以执行以下操作:

grpid=create_group(GTYPE_BROADCAST);

该函数返回一个SRTSOCKET值,与套接字操作一样正常使用,在组内建立连接,只需执行以下操作:

sockid=connect_group(grpid,address...);

返回为此连接创建的套接字的ID,应用程序只在需要时获得此套接字,不应尝试对该套接字执行任何操作,包括关闭套接字。

如果在组内创建第二个链接,只需再次调用connect_group,并提供最终指向相同端点的地址。与套接字不同,组可以多次连接,每次调用此函数都会在此组内创建新连接,connect_group类似于在多个端点上循环调用connect,但是当使用阻塞模式时,循环调用connect是不合适的,因为这将在第一次连接尝试时阻塞,并且不会尝试下一个连接,直到先前的连接成功或连接最终失败,connect_group将尝试同时连接到所有给定的端口,并阻塞直到实现组连接状态,在非阻塞模式下,它将像在循环中运行connect一样表现相同。套接字组组内维护多少条连接,连接列表是常量还是可以动态修改的,以及异常连接是否能够恢复,取决于应用程序。

本发明提供的一种套接字组及基于套接字组的数据传输方法,包括广播、备份以及平衡三种类型,广播组类型使用多个网络链路执行相同的传输,备份组类型当一个连接变得不稳定时,另一个连接立即被激活,通过当前活动连接发送数据包,平衡组类型使用多个网络链路执行相同的传输,但单个输入信号将发送的数据包分布在这些链路之间,以便一个链路可以利用另一个链路的带宽负担,套接字组方案可以弥补套接字稳定性受多种因素影响的缺点,提升套接字健壮性和稳定性。

最后应说明的是,以上实施例仅用以说明本发明实施例的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

相关技术
  • 一种支持多种网络接口的套接字组件及方法
  • 一种支持多种网络接口的套接字组件及方法
技术分类

06120116581524