一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

QUIC数据传输方法、装置、客户端及服务端与流程

2022-11-13 22:06:29 来源:中国专利 TAG:

quic数据传输方法、装置、客户端及服务端
技术领域
1.本技术涉及终端领域,尤其涉及一种quic数据传输方法、装置、客户端及服务端。


背景技术:

2.快速用户数据报协议(udp,user datagram protocol)网络连接(quick udp internet connection,quic)是一种基于udp的低时延的互联网传输层协议。quic可以应用于网页或应用程序等需要进行数据传输的场景中。
3.quic协议可以对传输层进行多路复用,即在建立客户端与服务器之间的会话后,对于每个需要传输的元素,可以单独使用一个可靠数据流(stream)或不可靠数据流(flow)进行数据传输。
4.但是,传输不同的元素可能会使用不同的应用层协议。当存在多种应用层协议时,需要为每个应用层协议建立一个独立的会话,以传输对应的元素。而建立多个会话,会浪费网络带宽、浪费quic会话资源,降低quic会话建链的效率。


技术实现要素:

5.本技术实施例提供了一种quic数据传输方法、装置、客户端及服务端,可以改善当存在多种应用层协议时,需要为每个应用层协议建立一个独立的会话而导致的浪费网络带宽、浪费quic会话资源,降低quic会话建链效率的问题。
6.第一方面,本技术实施例提供了应用于客户端的quic数据传输方法,该方法包括:
7.客户端响应于第二数据请求与服务端之间进行数据传输时,确定第二数据请求所使用的第二应用层协议。当第二应用层协议为第一quic会话对应的应用层协议列表中的应用层协议时,在第一quic会话中建立第二数据流,第二数据流用于承载第二数据请求中请求传输的数据,第一quic会话为客户端响应第一数据请求时,与服务端建立的quic会话,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
8.在第一方面中,客户端可以是手机(mobile phone)、平板电脑(pad)、带收发功能的电脑、虚拟现实(virtual reality,vr)终端设备、增强现实(augmented reality,ar)终端设备、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程医疗(remote medical)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端、可穿戴设备、车载设备、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本、个人数字助理(personal digital assistant,pda)等电子设备。
9.第一方面提供的quic数据传输方法通过在客户端与服务端建立第一quic会话时,协商获得第一quic会话对应的应用层协议列表。当客户端响应第二数据请求与服务端之间进行数据传输时,若第二数据请求所使用的第二应用层协议是第一quic会话对应的应用层协议列表中的,则无需再创建quic会话,而是在第一quic会话下建立使用第二应用层协议
的第二数据流承载第二数据请求中请求传输的数据。由于无需建立多个quic会话,而是复用了第一quic会话,可以节省网络带宽,节省quic会话资源,同时降低数据传输延迟,提高建链效率。
10.一些实施方式中,在第一quic会话中与服务端建立第二数据流,包括:客户端响应第二数据请求生成第一类数据帧,第一类数据帧包括第二应用层协议、第二数据流的标识信息以及第二数据请求对应的数据信息,记录第二数据流的标识信息与第二应用层协议的对应关系。客户端向服务端发送第一类数据帧,指示服务端根据第一类数据帧中的第二应用层协议建立第二数据流。
11.一些实施方式中,在客户端向服务端发送第一类数据帧之后,还包括:客户端接收来自服务端的第一类数据帧。当客户端确定第一类数据帧中第二数据流的标识信息与第二应用层协议的对应关系,与客户端记录的第二数据流的标识信息与第二应用层协议的对应关系一致时,将第一类数据帧发送给第二应用层协议对应的处理模块进行处理。
12.在本实施方式中,通过将数据流的标识信息与应用层协议关联,实现了在不使用第一类数据帧时,也可以准确的获得第二类数据帧对应的应用层协议,使得该数据流后续使用第二类数据帧帧也可以在一个quic会话下传输不同应用层协议的数据流。
13.一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
14.在客户端向服务端发送第一类数据帧之后,还包括:客户端接收来自服务端的第二类数据帧。客户端根据第二类数据帧中第二数据流的标识信息以及第二数据流的标识信息与第二应用层协议的对应关系,将第二类数据帧发送给第二应用层协议对应的处理模块进行处理。
15.一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
16.客户端在第一quic会话中与服务端建立第二数据流,包括:客户端确定第二应用层协议为第一quic会话对应的应用层协议列表中的首个应用层协议。客户端响应第二数据请求生成第二类数据帧,记录第二数据流的标识信息与第二应用层协议的对应关系。客户端向服务端发送第二类数据帧,指示服务端响应第二类数据帧,根据第一quic会话对应的应用层协议列表中的首个应用层协议建立第二数据流。
17.在本实施方式中,约定通过第二类数据帧建立的数据流使用应用层协议列表中的首个应用层协议,使得当第二应用层协议为应用层协议列表中的首个应用层协议时,客户端可以通过第二类数据帧建立第二数据流,增加了quic数据传输方法应用场景。
18.一些实施方式中,quic数据传输方法还包括:当建立第一quic会话后,客户端记录第一quic会话的引用次数,引用次数为第一quic会话中数据流的数量。当第一quic会话中建立一个数据流时,将引用次数加一。当第一quic会话中的一个数据流关闭时,将引用次数减一。
19.一些实施方式中,quic数据传输方法还包括:当引用次数减为零,且经过预设的时长后引用次数未发生变化时,客户端将第一quic会话关闭。
20.在本实施方式中,通过记录第一quic会话中的数据流的数量,使得当第一quic会话中没有数据流,且预设时长内再无新建数据流时,可以关闭第一quic会话,节约网络资源
和quic会话资源。
21.一些实施方式中,在客户端响应于第二数据请求之前,该方法还包括:响应第一数据请求与服务端建立第一quic会话,并生成第一quic会话对应的应用层协议列表。在第一quic会话中建立第一数据流,第一数据流用于承载第一数据请求中请求传输的数据,第一数据请求使用第一应用层协议,第一应用层协议为第一quic会话对应的应用层协议列表中的应用层协议。
22.一些实施方式中,响应第一数据请求与服务端建立第一quic会话,并生成第一quic会话对应的应用层协议列表,包括:客户端响应第一数据请求,向服务端发送建立第一quic会话的会话握手请求。客户端接收来自服务端的握手报文,握手报文是服务端根据会话握手请求生成的,握手报文包括服务端支持的应用层协议。根据客户端支持的应用层协议和服务端支持的应用层协议,生成第一quic会话对应的应用层协议列表。客户端根据握手报文建立第一quic会话,并将第一quic会话对应的应用层协议列表和第一quic会话建立的确认报文通过第一quci会话发送给服务端。
23.一些实施方式中,quic数据传输方法还包括:客户端接收来自服务端的第一通知帧或第二通知帧,第一通知帧用于指示客户端向存储于客户端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议,第二通知帧用于指示客户端移除存储于客户端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。客户端根据接收到的第一通知帧或第二通知帧,更新应用层协议列表。
24.一些实施方式中,quic数据传输方法还包括:客户端响应应用层协议列表的更新指令,更新存储于客户端内的应用层协议列表。当更新指令指示向存储于客户端内的应用层协议列表中添加至少一个应用层协议时,生成第一通知帧,第一通知帧用于指示服务端向存储于服务端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议。当更新指令指示移除存储于客户端内的应用层协议列表中的至少一个应用层协议时,生成第二通知帧,第二通知帧用于指示服务端移除存储于服务端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。客户端将第一通知帧或第二通知帧发送给服务端。
25.一些实施方式中,quic数据传输方法还包括:当第二应用层协议不是第一quic会话对应的应用层协议列表中的应用层协议时,客户端生成应用层协议列表的更新指令,更新指令用于将第二应用层协议写入存储于客户端内第一quic会话对应的应用层协议列表。客户端响应更新指令,并生成第一通知帧。当客户端将第一通知帧通过第一quic会话发送给服务端后,在第一quic会话中与服务端建立第二数据流。
26.在本实施方式中,通过第一通知帧和第二通知帧,服务端和客户端还可以动态协商承载的应用层协议,当数据请求使用的应用层协议不在应用层协议列表中时,也可以建立数据流,增加了quic数据传输方法的应用场景。
27.第二方面,本技术实施例提供了应用于服务端的quic数据传输方法,该方法包括:
28.服务端响应于第二数据请求与客户端之间进行数据传输时,确定第二数据请求所使用的第二应用层协议。当第二应用层协议为第一quic会话对应的应用层协议列表中的应用层协议时,在第一quic会话中建立第二数据流,第二数据流用于承载第二数据请求中请求传输的数据,第一quic会话为客户端响应第一数据请求时,与服务端建立的quic会话,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
29.在第二方面中,服务端可以是为客户端服务的设备,服务端可以向客户端提供资源以及保存来自客户端的数据等。例如,服务端可以是服务器或网络设备,服务器可以是刀片服务器、机架式服务器、云服务器等,网络设备包括三层交换机、路由器、宽带网关、防火墙、负载均衡器等。
30.第二方面提供的quic数据传输方法通过在服务端与客户端建立第一quic会话时,协商获得第一quic会话的应用层协议列表。当服务端响应第二数据请求时,若第二数据请求所使用的第二应用层协议是应用层协议列表中的,则无需再创建quic会话,而是在第一quic会话下建立承载使用第二应用层协议的第二数据流。由于无需建立多个quic会话,而是复用了第一quic会话,可以节省网络带宽,节省quic会话资源,同时降低数据传输延迟,提高建链效率。
31.一些实施方式中,服务端在第一quic会话中与客户端建立第二数据流,包括:服务端响应第二数据请求生成第一类数据帧,第一类数据帧包括第二应用层协议、第二数据流的标识信息以及第二数据请求对应的数据信息,记录第二数据流的标识信息与第二应用层协议的对应关系。服务端向客户端发送第一类数据帧,指示客户端根据第一类数据帧中的第二应用层协议建立第二数据流。
32.一些实施方式中,在服务端向客户端发送第一类数据帧之后,还包括:服务端接收来自客户端的第一类数据帧。当服务端确定第一类数据帧中第二数据流的标识信息与第二应用层协议的对应关系,与服务端记录的第二数据流的标识信息与第二应用层协议的对应关系一致时,将第一类数据帧发送给第二应用层协议对应的处理模块进行处理。
33.一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
34.在服务端向客户端发送第一类数据帧之后,还包括:服务端接收来自客户端的第二类数据帧。服务端根据第二类数据帧中第二数据流的标识信息以及第二数据流的标识信息与第二应用层协议的对应关系,将第二类数据帧发送给第二应用层协议对应的处理模块进行处理。
35.一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
36.服务端在第一quic会话中与客户端建立第二数据流,包括:服务端确定第二应用层协议为第一quic会话对应的应用层协议列表中的首个应用层协议。服务端响应第二数据请求生成第二类数据帧,记录第二数据流的标识信息与第二应用层协议的对应关系。服务端向客户端发送第二类数据帧,指示客户端响应第二类数据帧,根据第一quic会话对应的应用层协议列表中的首个应用层协议建立第二数据流。
37.一些实施方式中,quic数据传输方法还包括:建立第一quic会话后,服务端记录第一quic会话的引用次数,引用次数为第一quic会话中数据流的数量。当第一quic会话中建立一个数据流时,将引用次数加一。当第一quic会话中的一个数据流关闭时,将引用次数减一。
38.一些实施方式中,quic数据传输方法还包括:当引用次数减为零,且经过预设的时长后引用次数未发生变化时,服务端将第一quic会话关闭。
39.一些实施方式中,在服务端响应于第二数据请求之前,该方法还包括:服务端与客
户端建立第一quic会话。服务端响应来自客户的第一数据请求,建立与客户端之间的第一数据流,第一数据流用于承载第一数据请求中请求传输的数据,第一数据请求使用第一应用层协议,第一应用层协议为第一quic会话对应的应用层协议列表中的应用层协议。
40.一些实施方式中,服务端与客户端建立第一quic会话,包括:接收来自客户端的会话握手请求,会话握手请求用于指示服务端与客户端之间建立第一quic会话。根据会话握手请求生成握手报文并发送给客户端,握手报文包括服务端支持的应用层协议。接收来自客户端的应用层协议列表和第一quic会话建立的确认报文。服务端根据确认报文确认建立第一quic会话。
41.一些实施方式中,quic数据传输方法还包括:服务端接收来自客户端的第一通知帧或第二通知帧,第一通知帧用于指示服务端向存储于服务端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议,第二通知帧用于指示服务端移除存储于服务端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。服务端根据接收到的第一通知帧或第二通知帧,更新应用层协议列表。
42.一些实施方式中,quic数据传输方法还包括:服务端响应应用层协议列表的更新指令,更新存储于服务端内的应用层协议列表。当更新指令指示向存储于服务端内的应用层协议列表中添加至少一个应用层协议时,生成第一通知帧,第一通知帧用于指示客户端向存储于客户端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议。当更新指令指示移除存储于服务端内的应用层协议列表中的至少一个应用层协议时,生成第二通知帧,第二通知帧用于指示客户端移除存储于客户端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。服务端将第一通知帧或第二通知帧发送给客户端。
43.一些实施方式中,quic数据传输方法还包括:当第二应用层协议不是第一quic会话对应的应用层协议列表中的应用层协议时,服务端生成应用层协议列表的更新指令,更新指令用于将第二应用层协议写入存储于服务端内第一quic会话对应的应用层协议列表。服务端响应更新指令,并生成第一通知帧。当服务端将第一通知帧通过第一quic会话发送给客户端后,在第一quic会话中与客户端建立第二数据流。
44.第三方面,本技术实施例提供了一种应用于客户端的quic数据传输装置,包括:
45.确定模块,用于响应于第二数据请求与服务端之间进行数据传输时,确定第二数据请求所使用的第二应用层协议。
46.建立模块,用于当第二应用层协议为第一quic会话对应的应用层协议列表中的应用层协议时,在第一quic会话中建立第二数据流,第二数据流用于承载第二数据请求中请求传输的数据,第一quic会话为客户端响应第一数据请求时,与服务端建立的quic会话,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
47.一些实施方式中,建立模块,具体用于响应第二数据请求生成第一类数据帧,第一类数据帧包括第二应用层协议、第二数据流的标识信息以及第二数据请求对应的数据信息,记录第二数据流的标识信息与第二应用层协议的对应关系。向服务端发送第一类数据帧,指示服务端根据第一类数据帧中的第二应用层协议建立第二数据流。
48.一些实施方式中,该装置还包括接收模块,用于接收来自服务端的第一类数据帧。该装置还包括处理模块,用于当确定第一类数据帧中第二数据流的标识信息与第二应用层协议的对应关系,与客户端记录的第二数据流的标识信息与第二应用层协议的对应关系一
致时,将第一类数据帧发送给第二应用层协议对应的处理模块进行处理。
49.一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
50.接收模块,还用于接收来自服务端的第二类数据帧。处理模块,还用于根据第二类数据帧中第二数据流的标识信息以及第二数据流的标识信息与第二应用层协议的对应关系,将第二类数据帧发送给第二应用层协议对应的处理模块进行处理。
51.一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
52.建立模块,具体用于确定第二应用层协议为第一quic会话对应的应用层协议列表中的首个应用层协议。客户端响应第二数据请求生成第二类数据帧,记录第二数据流的标识信息与第二应用层协议的对应关系。客户端向服务端发送第二类数据帧,指示服务端响应第二类数据帧,根据第一quic会话对应的应用层协议列表中的首个应用层协议建立第二数据流。
53.一些实施方式中,该装置还包括记录模块,用于当建立第一quic会话后,记录第一quic会话的引用次数,引用次数为第一quic会话中数据流的数量。当第一quic会话中建立一个数据流时,将引用次数加一。当第一quic会话中的一个数据流关闭时,将引用次数减一。
54.一些实施方式中,记录模块,还用于当引用次数减为零,且经过预设的时长后引用次数未发生变化时,将第一quic会话关闭。
55.一些实施方式中,建立模块,还用于响应第一数据请求与服务端建立第一quic会话,并生成第一quic会话对应的应用层协议列表。在第一quic会话中建立第一数据流,第一数据流用于承载第一数据请求中请求传输的数据,第一数据请求使用第一应用层协议,第一应用层协议为第一quic会话对应的应用层协议列表中的应用层协议。
56.一些实施方式中,建立模块,具体用于响应第一数据请求,向服务端发送建立第一quic会话的会话握手请求。客户端接收来自服务端的握手报文,握手报文是服务端根据会话握手请求生成的,握手报文包括服务端支持的应用层协议。根据客户端支持的应用层协议和服务端支持的应用层协议,生成第一quic会话对应的应用层协议列表。客户端根据握手报文建立第一quic会话,并将第一quic会话对应的应用层协议列表和第一quic会话建立的确认报文通过第一quci会话发送给服务端。
57.一些实施方式中,接收模块,还用于接收来自服务端的第一通知帧或第二通知帧,第一通知帧用于指示客户端向存储于客户端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议,第二通知帧用于指示客户端移除存储于客户端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。该装置还包括更新模块,用于根据接收到的第一通知帧或第二通知帧,更新应用层协议列表。
58.一些实施方式中,更新模块,还用于响应应用层协议列表的更新指令,更新存储于客户端内的应用层协议列表。当更新指令指示向存储于客户端内的应用层协议列表中添加至少一个应用层协议时,生成第一通知帧,第一通知帧用于指示服务端向存储于服务端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议。当更新指令指示移除存储于客户端内的应用层协议列表中的至少一个应用层协议时,生成第二通知帧,第二通知
帧用于指示服务端移除存储于服务端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。将第一通知帧或第二通知帧发送给服务端。
59.一些实施方式中,更新模块,还用于当第二应用层协议不是第一quic会话对应的应用层协议列表中的应用层协议时,生成应用层协议列表的更新指令,更新指令用于将第二应用层协议写入存储于客户端内第一quic会话对应的应用层协议列表。响应更新指令,并生成第一通知帧。建立模块,还用于当客户端将第一通知帧通过第一quic会话发送给服务端后,在第一quic会话中与服务端建立第二数据流。
60.第四方面,本技术实施例提供了一种应用于服务端的quic数据传输装置,包括:
61.确定模块,用于响应于第二数据请求与客户端之间进行数据传输时,确定第二数据请求所使用的第二应用层协议。
62.建立模块,用于当第二应用层协议为第一quic会话对应的应用层协议列表中的应用层协议时,在第一quic会话中建立第二数据流,第二数据流用于承载第二数据请求中请求传输的数据,第一quic会话为客户端响应第一数据请求时,与服务端建立的quic会话,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
63.一些实施方式中,建立模块,具体用于响应第二数据请求生成第一类数据帧,第一类数据帧包括第二应用层协议、第二数据流的标识信息以及第二数据请求对应的数据信息,记录第二数据流的标识信息与第二应用层协议的对应关系。服务端向客户端发送第一类数据帧,指示客户端根据第一类数据帧中的第二应用层协议建立第二数据流。
64.一些实施方式中,该装置还包括接收模块,用于接收来自客户端的第一类数据帧。该装置还包括处理模块,用于当确定第一类数据帧中第二数据流的标识信息与第二应用层协议的对应关系,与服务端记录的第二数据流的标识信息与第二应用层协议的对应关系一致时,将第一类数据帧发送给第二应用层协议对应的处理模块进行处理。
65.一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
66.接收模块,还用于接收来自客户端的第二类数据帧。处理模块,还用于根据第二类数据帧中第二数据流的标识信息以及第二数据流的标识信息与第二应用层协议的对应关系,将第二类数据帧发送给第二应用层协议对应的处理模块进行处理。
67.一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
68.建立模块,具体用于确定第二应用层协议为第一quic会话对应的应用层协议列表中的首个应用层协议。服务端响应第二数据请求生成第二类数据帧,记录第二数据流的标识信息与第二应用层协议的对应关系。服务端向客户端发送第二类数据帧,指示客户端响应第二类数据帧,根据第一quic会话对应的应用层协议列表中的首个应用层协议建立第二数据流。
69.一些实施方式中,该装置还包括记录模块,用于建立第一quic会话后,记录第一quic会话的引用次数,引用次数为第一quic会话中数据流的数量。当第一quic会话中建立一个数据流时,将引用次数加一。当第一quic会话中的一个数据流关闭时,将引用次数减一。
70.一些实施方式中,记录模块,还用于当引用次数减为零,且经过预设的时长后引用
次数未发生变化时,将第一quic会话关闭。
71.一些实施方式中,建立模块,还用于服务端与客户端建立第一quic会话。服务端响应来自客户的第一数据请求,建立与客户端之间的第一数据流,第一数据流用于承载第一数据请求中请求传输的数据,第一数据请求使用第一应用层协议,第一应用层协议为第一quic会话对应的应用层协议列表中的应用层协议。
72.一些实施方式中,建立模块,具体用于接收来自客户端的会话握手请求,会话握手请求用于指示服务端与客户端之间建立第一quic会话。根据会话握手请求生成握手报文并发送给客户端,握手报文包括服务端支持的应用层协议。接收来自客户端的应用层协议列表和第一quic会话建立的确认报文。服务端根据确认报文确认建立第一quic会话。
73.一些实施方式中,接收模块,还用于接收来自客户端的第一通知帧或第二通知帧,第一通知帧用于指示服务端向存储于服务端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议,第二通知帧用于指示服务端移除存储于服务端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。该装置还包括更新模块,用于根据接收到的第一通知帧或第二通知帧,更新应用层协议列表。
74.一些实施方式中,更新模块,还用于响应应用层协议列表的更新指令,更新存储于服务端内的应用层协议列表。当更新指令指示向存储于服务端内的应用层协议列表中添加至少一个应用层协议时,生成第一通知帧,第一通知帧用于指示客户端向存储于客户端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议。当更新指令指示移除存储于服务端内的应用层协议列表中的至少一个应用层协议时,生成第二通知帧,第二通知帧用于指示客户端移除存储于客户端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。服务端将第一通知帧或第二通知帧发送给客户端。
75.一些实施方式中,更新模块,还用于当第二应用层协议不是第一quic会话对应的应用层协议列表中的应用层协议时,服务端生成应用层协议列表的更新指令,更新指令用于将第二应用层协议写入存储于服务端内第一quic会话对应的应用层协议列表。服务端响应更新指令,并生成第一通知帧。建立模块,还用于当服务端将第一通知帧通过第一quic会话发送给客户端后,在第一quic会话中与客户端建立第二数据流。
76.第五方面,本技术实施例提供了一种quic客户端,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现第一方面提供的方法。
77.第六方面,本技术实施例提供了一种quic服务端,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现第二方面提供方法。
78.第七方面,本技术实施例提供了一种数据传输系统,包括至少一个第五方面提供的quic客户端和至少一个第六方面提供的quic服务端,quic客户端和quic服务端通过网络通信连接,数据传输系统中的quic客户端和quic服务端可通过第一方面和第二方面提供的quic数据传输方法进行数据传输。
79.第八方面,本技术实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现第一方面提供的方法。
80.第九方面,本技术实施例提供了一种计算机可读存储介质,计算机可读存储介质
存储有计算机程序,其特征在于,计算机程序被处理器执行时实现第二方面提供的方法。
81.第十方面,本技术实施例提供了一种计算机程序产品,当计算机程序产品在客户端上运行时,使得客户端执行上述第一方面提供的方法。
82.第十一方面,本技术实施例提供了一种计算机程序产品,当计算机程序产品在服务端上运行时,使得服务端执行上述第二方面提供的方法。
83.第十二方面,本技术实施例提供了一种芯片系统,芯片系统包括存储器和处理器,处理器执行存储器中存储的计算机程序,以实现第一方面提供的方法。
84.第十三方面,本技术实施例提供了一种芯片系统,芯片系统包括存储器和处理器,处理器执行存储器中存储的计算机程序,以实现第二方面提供的方法。
85.第十四方面,本技术实施例提供了一种芯片系统,芯片系统包括处理器,处理器与第八方面提供的计算机可读存储介质耦合,处理器执行计算机可读存储介质中存储的计算机程序,以实现第一方面提供的方法。
86.第十五方面,本技术实施例提供了一种芯片系统,芯片系统包括处理器,处理器与第九方面提供的计算机可读存储介质耦合,处理器执行计算机可读存储介质中存储的计算机程序,以实现第一方面提供的方法。
87.可以理解的是,上述第二方面至第十五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
88.图1为一种quic数据传输的应用场景;
89.图2为本技术实施例提供的一种客户端的结构示意图;
90.图3为本技术实施例提供的一种客户端的软件结构示意图;
91.图4为本技术实施例提供的一种quic数据传输方法的示意性流程图;
92.图5为本技术实施例提供的另一种quic数据传输方法的示意性流程图;
93.图6为本技术实施例提供的另一种quic数据传输方法的示意性流程图;
94.图7为本技术实施例提供的另一种quic数据传输方法的示意性流程图;
95.图8为本技术实施例提供的一种使用本技术提供的数据传输方法时的数据流向图;
96.图9为本技术实施例提供的一种quic数据传输装置的结构框图;
97.图10为本技术实施例提供的另一种quic数据传输装置的结构框图;
98.图11为本技术实施例提供的另一种quic数据传输装置的结构框图;
99.图12为本技术实施例提供的另一种quic数据传输装置的结构框图;
100.图13为本技术实施例提供的一种quic数据传输装置的结构框图;
101.图14为本技术实施例提供的另一种quic数据传输装置的结构框图;
102.图15为本技术实施例提供的另一种quic数据传输装置的结构框图;
103.图16为本技术实施例提供的另一种quic数据传输装置的结构框图;
104.图17为本技术实施例提供的一种quic客户端的结构示意图;
105.图18为本技术实施例提供的一种quic服务端的结构示意图。
具体实施方式
106.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术的描述。
107.应当理解,在本技术说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
108.如在本技术说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到”或“响应于检测到”。
109.另外,在本技术说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
110.在本技术说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
111.图1示出了一种quic数据传输的应用场景。
112.参考图1,该场景中包括客户端11、服务端12,客户端11和服务端12之前通过网络进行数据传输。
113.网络可以是有线网络或者无线网络,作为示例,无线网络可以包括全球移动通讯系统(global system for mobile communications,gsm),通用分组无线服务(general packet radio service,gprs),码分多址接入(code division multiple access,cdma),宽带码分多址(wideband code division multiple access,wcdma),时分码分多址(time-division code division multiple access,td-scdma),长期演进(long term evolution,lte),新空口(new radio,nr),bt,gnss,wlan,nfc,fm,和/或ir技术等。gnss可以包括全球卫星定位系统(global positioning system,gps),全球导航卫星系统(global navigation satellite system,glonass),北斗卫星导航系统(beidou navigation satellite system,bds),准天顶卫星系统(quasi-zenith satellite system,qzss)和/或星基增强系统(satellite based augmentation systems,sbas)。而有线网络则可以包括局域网(local area network,lan)、广域网(wide area network,wan)等。
114.客户端11和服务端12之间进行数据交换时,可以使用quic协议。quic是基于udp的一种传输层协议,可以替代传输控制协议(transmission control protocol,tcp),以改善队头阻塞等问题。quic协议对承载其上的协议报文实现了传输层的多路复用。例如,客户端11运行有浏览器程序,浏览器程序浏览的网页中包括多个元素,如文本、图像以及视频等。客户端11可以与服务端12之间建立quic会话,每个quic会话下可建立多个数据流,每个数据流用于传输一个元素请求的数据。在一个quic会话下,多个数据流可以同时传输多个元
素请求的数据。
115.现有技术中,每个quic会话只能支持一个应用层协议,对于采用不同应用层协议的元素,需要建立多个quic会话进行传输。
116.例如,文本、图像等元素可以使用超文本传输协议(hypertext transfer protocol,http)3.0进行传输,而直播视频元素则可以通过实时传输协议(real-time transport protocol,rtp)或实时传输控制协议(real-time transport control protocol,rtcp)进行传输。这个情况下,为了同时传输采用了不同应用层协议的元素,客户端11与服务端12之间需要为每个应用层协议建立一个quic会话,用于传输采用了对应应用层协议的元素。例如,客户端11与服务端12之间可以一个quic会话用于传输采用http 3.0协议的元素,再建立另一个quic会话,用于传输采用rtp/rtcp协议的元素。
117.但是,客户端11与服务端12之间每次建立quic会话时都需要进行握手,建立多个quic会话则需要进行多次握手,进而导致数据传输延迟增加,建链效率低。
118.对此,本身请提供了一种quic数据传输方法,该方法应用于客户端时,包括:
119.客户端响应于第二数据请求与服务端之间进行数据传输时,确定第二数据请求所使用的第二应用层协议。当第二应用层协议为第一quic会话对应的应用层协议列表中的应用层协议时,在第一quic会话中建立第二数据流,第二数据流用于承载第二数据请求中请求传输的数据,第一quic会话为客户端响应第一数据请求时,与服务端建立的quic会话,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
120.该方法应用于服务端时,包括:
121.服务端响应于第二数据请求与客户端之间进行数据传输时,确定第二数据请求所使用的第二应用层协议。当第二应用层协议为第一quic会话对应的应用层协议列表中的应用层协议时,在第一quic会话中建立第二数据流,第二数据流用于承载第二数据请求中请求传输的数据,第一quic会话为客户端响应第一数据请求时,与服务端建立的quic会话,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
122.本技术中提供的quic数据传输方法通过在客户端与服务端建立第一quic会话时,协商获得第一quic会话对应的应用层协议列表。当客户端或服务端响应第二数据请求与服务端之间进行数据传输时,若第二数据请求所使用的第二应用层协议是第一quic会话对应的应用层协议列表中的,则无需再创建quic会话,而是在第一quic会话下建立使用第二应用层协议的第二数据流承载第二数据请求中请求传输的数据。由于无需建立多个quic会话,而是复用了第一quic会话,可以节省网络带宽,节省quic会话资源,同时降低数据传输延迟,提高建链效率。
123.本技术实施例提供的数据传输方法的客户端可以是手机(mobile phone)、平板电脑(pad)、带收发功能的电脑、虚拟现实(virtual reality,vr)终端设备、增强现实(augmented reality,ar)终端设备、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程医疗(remote medical)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端、可穿戴设备、车载设备、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本、个人数字助理(personal digital assistant,pda),本技术实施例对客户端的具体类型不作任何限
制。
124.服务端则可以是为客户端服务的设备,服务端可以向客户端提供资源以及保存来自客户端的数据等。例如,服务端可以是服务器或网络设备,服务器可以是刀片服务器、机架式服务器、云服务器等,网络设备包括三层交换机、路由器、宽带网关、防火墙、负载均衡器等,本技术实施例对服务端的具体类型不作任何限制。
125.图2示出了一种客户端的结构示意图,客户端为电子设备200。电子设备200可以包括处理器210,外部存储器接口220,内部存储器221,通用串行总线(universal serial bus,usb)接口230,充电管理模块240,电源管理模块241,电池242,天线1,天线2,移动通信模块250,无线通信模块260,音频模块270,扬声器270a,受话器270b,麦克风270c,耳机接口270d,传感器模块280,按键290,马达291,指示器292,摄像头293,显示屏294,以及用户标识模块(subscriber identification module,sim)卡接口295等。其中传感器模块280可以包括压力传感器280a,陀螺仪传感器280b,气压传感器280c,磁传感器280d,加速度传感器280e,距离传感器280f,接近光传感器280g,指纹传感器280h,温度传感器280j,触摸传感器280k,环境光传感器280l,骨传导传感器280m等。
126.可以理解的是,本技术实施例示意的结构并不构成对电子设备200的具体限定。在本技术另一些实施例中,电子设备200可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
127.作为举例,当电子设备200为手机或平板电脑时,可以包括图示中的全部部件,也可以仅包括图示中的部分部件。
128.处理器210可以包括一个或多个处理单元,例如:处理器210可以包括应用处理器(application processor,ap),调制解调处理器,图形处理器(graphics processing unit,gpu),图像信号处理器(image signal processor,isp),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,dsp),基带处理器,和/或神经网络处理器(neural-network processing unit,npu)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
129.其中,控制器可以是电子设备200的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
130.处理器210中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器210中的存储器为高速缓冲存储器。该存储器可以保存处理器210刚用过或循环使用的指令或数据。如果处理器210需要再次使用该指令或数据,可从存储器中直接调用。避免了重复存取,减少了处理器210的等待时间,因而提高了系统的效率。
131.在一些实施例中,处理器210可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,i2c)接口,集成电路内置音频(inter-integrated circuit sound,i2s)接口,脉冲编码调制(pulse code modulation,pcm)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,uart)接口,移动产业处理器接口(mobile industry processor interface,mipi),通用输入输出(general-purpose input/output,gpio)接口,用户标识模块(subscriber identity module,sim)接口,和/或通用串行总线(universal serial bus,usb)接口等。
132.i2c接口是一种双向同步串行总线,包括一根串行数据线(serial data line,sda)和一根串行时钟线(derail clock line,scl)。在一些实施例中,处理器210可以包含多组i2c总线。处理器210可以通过不同的i2c总线接口分别耦合触摸传感器280k,充电器,闪光灯,摄像头293等。例如:处理器210可以通过i2c接口耦合触摸传感器280k,使处理器210与触摸传感器280k通过i2c总线接口通信,实现电子设备200的触摸功能。
133.i2s接口可以用于音频通信。在一些实施例中,处理器210可以包含多组i2s总线。处理器210可以通过i2s总线与音频模块270耦合,实现处理器210与音频模块270之间的通信。在一些实施例中,音频模块270可以通过i2s接口向无线通信模块260传递音频信号。
134.pcm接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块270与无线通信模块260可以通过pcm总线接口耦合。
135.在一些实施例中,音频模块270也可以通过pcm接口向无线通信模块260传递音频信号。i2s接口和pcm接口都可以用于音频通信。
136.uart接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。
137.在一些实施例中,uart接口通常被用于连接处理器210与无线通信模块260。例如:处理器210通过uart接口与无线通信模块260中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块270可以通过uart接口向无线通信模块260传递音频信号,实现通过蓝牙耳机播放音乐的功能。
138.mipi接口可以被用于连接处理器210与显示屏294,摄像头293等外围器件。mipi接口包括摄像头串行接口(camera serial interface,csi),显示屏串行接口(display serial interface,dsi)等。在一些实施例中,处理器210和摄像头293通过csi接口通信,实现电子设备200的拍摄功能。处理器210和显示屏294通过dsi接口通信,实现电子设备200的显示功能。
139.gpio接口可以通过软件配置。gpio接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,gpio接口可以用于连接处理器210与摄像头293,显示屏294,无线通信模块260,音频模块270,传感器模块280等。gpio接口还可以被配置为i2c接口,i2s接口,uart接口,mipi接口等。
140.usb接口230是符合usb标准规范的接口,具体可以是mini usb接口,micro usb接口,usb type c接口等。usb接口230可以用于连接充电器为电子设备200充电,也可以用于电子设备200与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如ar设备等。
141.可以理解的是,本技术实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备200的结构限定。在本技术另一些实施例中,电子设备200也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
142.充电管理模块240用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块240可以通过usb接口230接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块240可以通过电子设备200的无线充电线圈接收无线充电输入。充电管理模块240为电池242充电的同时,还可以通过电源管理模块241为电子设备供电。
access,wcdma),时分码分多址(time-division code division multiple access,td-scdma),长期演进(long term evolution,lte),bt,gnss,wlan,nfc,fm,和/或ir技术等。gnss可以包括全球卫星定位系统(global positioning system,gps),全球导航卫星系统(global navigation satellite system,glonass),北斗卫星导航系统(beidou navigation satellite system,bds),准天顶卫星系统(quasi-zenith satellite system,qzss)和/或星基增强系统(satellite based augmentation systems,sbas)。
152.电子设备200通过gpu,显示屏294,以及应用处理器等实现显示功能。gpu为图像处理的微处理器,连接显示屏294和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。处理器210可包括一个或多个gpu,其执行程序指令以生成或改变显示信息。
153.显示屏294用于显示图像,视频等。例如本技术实施例中的教学视频和用户动作画面视频,显示屏294包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,lcd),有机发光二极管(organic light-emitting diode,oled),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode的,amoled),柔性发光二极管(flex light-emitting diode,fled),miniled,microled,micro-oled,量子点发光二极管(quantum dot light emitting diodes,qled)等。在一些实施例中,电子设备200可以包括1个或n个显示屏294,n为大于1的正整数。
154.电子设备200可以通过isp,摄像头293,视频编解码器,gpu,显示屏294以及应用处理器等实现拍摄功能。
155.isp用于处理摄像头293反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将电信号传递给isp处理,转化为肉眼可见的图像。isp还可以对图像的噪点,亮度,肤色进行算法优化。isp还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,isp可以设置在摄像头293中。
156.摄像头293用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。镜头的焦段可以用于表示摄像头的取景范围,镜头的焦段越小,表示镜头的取景范围越大。感光元件可以是电荷耦合器件(charge coupled device,ccd)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,cmos)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给isp转换成数字图像信号。isp将数字图像信号输出到dsp加工处理。dsp将数字图像信号转换成标准的rgb,yuv等格式的图像信号。
157.在本技术中,电子设备200可以包括2个或2个以上焦段的摄像头293。
158.数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备200在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
159.视频编解码器用于对数字视频压缩或解压缩。电子设备200可以支持一种或多种视频编解码器。这样,电子设备200可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,mpeg)1,mpeg2,mpeg3,mpeg4等。
160.npu为神经网络(neural-network,nn)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过npu可以实现电子设备200的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
161.在本技术实施例中,npu或其他处理器可以用于对电子设备200存储的视频中的图像进行分析处理等操作。
162.外部存储器接口220可以用于连接外部存储卡,例如micro sd卡,实现扩展电子设备200的存储能力。外部存储卡通过外部存储器接口220与处理器210通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
163.内部存储器221可以用于存储计算机可执行程序代码,可执行程序代码包括指令。处理器210通过运行存储在内部存储器221的指令,从而执行电子设备200的各种功能应用以及数据处理。内部存储器221可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)。存储数据区可存储电子设备200使用过程中所创建的数据(比如音频数据,电话本等)。
164.此外,内部存储器221可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,ufs)等。
165.电子设备200可以通过音频模块270,扬声器270a,受话器270b,麦克风270c,耳机接口270d,以及应用处理器等实现音频功能。
166.音频模块270用于将数字音频信号转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块270还可以用于对音频信号编码和解码。在一些实施例中,音频模块270可以设置于处理器210中,或将音频模块270的部分功能模块设置于处理器210中。
167.扬声器270a,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备200可以通过扬声器270a收听音乐,或收听免提通话,例如扬声器可以播放本技术实施例提供的比对分析结果。
168.受话器270b,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备200接听电话或语音信息时,可以通过将受话器270b靠近人耳接听语音。
169.麦克风270c,也称“话筒”,“传声器”,用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风270c发声,将声音信号输入到麦克风270c。电子设备200可以设置至少一个麦克风270c。在另一些实施例中,电子设备200可以设置两个麦克风270c,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,电子设备200还可以设置三个,四个或更多麦克风270c,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。
170.耳机接口270d用于连接有线耳机。耳机接口270d可以是usb接口230,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,omtp)标准接口,美国蜂窝电信工业协会(cellular telecommunications industry association of the usa,ctia)标准接口。
171.压力传感器280a用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器280a可以设置于显示屏294。压力传感器280a的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器280a,电极之间的电容改变。电子设备200根据电容的变化确定压力的强度。当有触摸操作作用于显示屏294,电子设备200根据压
力传感器280a检测触摸操作强度。电子设备200也可以根据压力传感器280a的检测信号计算触摸的位置。
172.在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当有触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。
173.陀螺仪传感器280b可以用于确定电子设备200的运动姿态。在一些实施例中,可以通过陀螺仪传感器280b确定电子设备200围绕三个轴(即,x,y和z轴)的角速度。陀螺仪传感器280b可以用于拍摄防抖。示例性的,当按下快门,陀螺仪传感器280b检测电子设备200抖动的角度,根据角度计算出镜头模组需要补偿的距离,让镜头通过反向运动抵消电子设备200的抖动,实现防抖。陀螺仪传感器280b还可以用于导航,体感游戏场景。
174.气压传感器280c用于测量气压。在一些实施例中,电子设备200通过气压传感器280c测得的气压值计算海拔高度,辅助定位和导航。
175.磁传感器280d包括霍尔传感器。电子设备200可以利用磁传感器280d检测翻盖皮套的开合。在一些实施例中,当电子设备200是翻盖机时,电子设备200可以根据磁传感器280d检测翻盖的开合。进而根据检测到的皮套的开合状态或翻盖的开合状态,设置翻盖自动解锁等特性。
176.加速度传感器280e可检测电子设备200在各个方向上(一般为三轴)加速度的大小。当电子设备200静止时可检测出重力的大小及方向。还可以用于识别电子设备姿态,应用于横竖屏切换,计步器等应用。
177.距离传感器280f,用于测量距离。电子设备200可以通过红外或激光测量距离。在一些实施例中,拍摄场景,电子设备200可以利用距离传感器280f测距以实现快速对焦。
178.接近光传感器280g可以包括例如发光二极管(led)和光检测器,例如光电二极管。发光二极管可以是红外发光二极管。电子设备200通过发光二极管向外发射红外光。电子设备200使用光电二极管检测来自附近物体的红外反射光。当检测到充分的反射光时,可以确定电子设备200附近有物体。当检测到不充分的反射光时,电子设备200可以确定电子设备200附近没有物体。电子设备200可以利用接近光传感器280g检测用户手持电子设备200贴近耳朵通话,以便自动熄灭屏幕达到省电的目的。接近光传感器280g也可用于皮套模式,口袋模式自动解锁与锁屏。
179.环境光传感器280l用于感知环境光亮度。电子设备200可以根据感知的环境光亮度自适应调节显示屏294亮度。环境光传感器280l也可用于拍照时自动调节白平衡。环境光传感器280l还可以与接近光传感器280g配合,检测电子设备200是否在口袋里,以防误触。
180.指纹传感器280h用于采集指纹。电子设备200可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
181.温度传感器280j用于检测温度。在一些实施例中,电子设备200利用温度传感器280j检测的温度,执行温度处理策略。例如,当温度传感器280j上报的温度超过阈值,电子设备200执行降低位于温度传感器280j附近的处理器的性能,以便降低功耗实施热保护。在另一些实施例中,当温度低于另一阈值时,电子设备200对电池242加热,以避免低温导致电子设备200异常关机。在其他一些实施例中,当温度低于又一阈值时,电子设备200对电池
242的输出电压执行升压,以避免低温导致的异常关机。
182.触摸传感器280k,也称“触控面板”。触摸传感器280k可以设置于显示屏294,由触摸传感器280k与显示屏294组成触摸屏,也称“触控屏”。触摸传感器280k用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏294提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器280k也可以设置于电子设备200的表面,与显示屏294所处的位置不同。
183.骨传导传感器280m可以获取振动信号。在一些实施例中,骨传导传感器280m可以获取人体声部振动骨块的振动信号。骨传导传感器280m也可以接触人体脉搏,接收血压跳动信号。
184.在一些实施例中,骨传导传感器280m也可以设置于耳机中,结合成骨传导耳机。音频模块270可以基于骨传导传感器280m获取的声部振动骨块的振动信号,解析出语音信号,实现语音功能。应用处理器可以基于骨传导传感器280m获取的血压跳动信号解析心率信息,实现心率检测功能。
185.按键290包括开机键,音量键等。按键290可以是机械按键。也可以是触摸式按键。电子设备200可以接收按键输入,产生与电子设备200的用户设置以及功能控制有关的键信号输入。
186.马达291可以产生振动提示。马达291可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏294不同区域的触摸操作,马达291也可对应不同的振动反馈效果。不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。
187.指示器292可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。
188.sim卡接口295用于连接sim卡。sim卡可以通过插入sim卡接口295,或从sim卡接口295拔出,实现和电子设备200的接触和分离。电子设备200可以支持1个或n个sim卡接口,n为大于1的正整数。sim卡接口295可以支持nano sim卡,micro sim卡,sim卡等。同一个sim卡接口295可以同时插入多张卡。多张卡的类型可以相同,也可以不同。sim卡接口295也可以兼容不同类型的sim卡。sim卡接口295也可以兼容外部存储卡。电子设备200通过sim卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,电子设备200采用esim,即:嵌入式sim卡。esim卡可以嵌在电子设备200中,不能和电子设备200分离。
189.图3是本技术实施例的客户端的软件结构示意图。客户端中的操作系统可以是安卓(android)系统,微软窗口系统(windows),苹果移动操作系统(ios)或者鸿蒙系统(harmony os)等。在此,以客户端的操作系统为鸿蒙系统为例进行说明。
190.在一些实施例中,可将鸿蒙系统分为四层,包括内核层、系统服务层、框架层以及应用层,层与层之间通过软件接口通信。
191.如图3所示,内核层包括内核抽象层(kernel abstract layer,kal)和驱动子系统。kal下包括多个内核,如linux系统的内核linux kernel、轻量级物联网系统内核liteos等。驱动子系统则可以包括硬件驱动框架(hardware driver foundation,hdf)。硬件驱动框架能够提供统一外设访问能力和驱动开发、管理框架。多内核的内核层可以根据系统的
需求选择相应的内核进行处理。
192.系统服务层是鸿蒙系统的核心能力集合,系统服务层通过框架层对应用程序提供服务。该层可包括:
193.系统基本能力子系统集:为分布式应用在鸿蒙系统多设备上的运行、调度、迁移等操作提供了基础能力。可包括分布式软总线、分布式数据管理、分布式任务调度、方舟多语言运行时、公共基础库、多模输入、图形、安全、人工智能(artificial intelligence,ai)、用户程序框架等子系统。其中,方舟多语言运行时提供了c或c 或javascript(js)多语言运行时和基础的系统类库,也可以为使用方舟编译器静态化的java程序(即应用程序或框架层中使用java语言开发的部分)提供运行时。
194.基础软件服务子系统集:为鸿蒙系统提供公共的、通用的软件服务。可包括事件通知、电话、多媒体、面向x设计(design for x,dfx)、msdp&dv等子系统。
195.增强软件服务子系统集:为鸿蒙系统提供针对不同设备的、差异化的能力增强型软件服务。可包括智慧屏专有业务、穿戴专有业务、物联网(internet of things,iot)专有业务子系统组成。
196.硬件服务子系统集:为鸿蒙系统提供硬件服务。可包括位置服务、生物特征识别、穿戴专有硬件服务、iot专有硬件服务等子系统。
197.框架层为鸿蒙系统应用开发提供了java、c、c 、js等多语言的用户程序框架和能力(ability)框架,两种用户界面(user interface,ui)框架(包括适用于java语言的java ui框架、适用于js语言的js ui框架),以及各种软硬件服务对外开放的多语言框架应用程序接口(application programming interface,api)。根据系统的组件化裁剪程度,鸿蒙系统设备支持的api也会有所不同。
198.应用层包括系统应用和第三方非系统应用。系统应用可包括桌面、控制栏、设置、电话等电子设备默认安装的应用程序。扩展应用可以是由电子设备的制造商开发设计的、非必要的应用,如电子设备管家、换机迁移、便签、天气等应用程序。而第三方非系统应用则可以是由其他厂商开发,但是可以在鸿蒙系统中运行应用程序,如游戏、导航、社交或购物等应用程序。
199.鸿蒙系统的应用由一个或多个元程序(feature ability,fa)或元服务(particle ability,pa)组成。其中,fa有ui界面,提供与用户交互的能力。而pa无ui界面,提供后台运行任务的能力以及统一的数据访问抽象。pa主要为fa提供支持,例如作为后台服务提供计算能力,或作为数据仓库提供数据访问能力。基于fa或pa开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。
200.多个运行鸿蒙系统的电子设备之间可以通过分布式软总线、分布式设备虚拟化、分布式数据管理和分布式任务调度实现硬件互助和资源共享。
201.图4示出了本技术提供的quic数据传输方法的示意性流程图,作为示例而非限定,该方法可以应用于上述客户端和服务端中。
202.s301、获取客户端支持的应用层协议。
203.一些实施方式中,客户端可以通过查询协议栈(protocolstack)中记录的应用层协议,获取客户端支持的应用层协议。协议栈中的应用层协议可以通过静态配置或者通过应用层协议(application layer protocol,alp)应用启动注册的方式进行记录。应用层协
议定义运行在不同端系统上的应用程序进程如何相互传递报文。应用层协议是基于应用层(application layer)实现的,而应用层是开放式系统互连(open systems interconnection reference,osi)模型中的第七层,由多个特定应用服务元素(specific application service element,sase)和一个或多个公用应用服务元素(computer application service element,case)组成。每个sase可以提供特定的应用服务,例如文件运输访问和管理(file transfer access method,ftam)、电子文电处理(message handing system,mhs)、虚拟终端协议(virtual terminal protocol,vap)等。而case则可以提供一组公用的应用服务,例如联系控制服务元素(association control service element,acse)、可靠运输服务元素(reliable transfer service element,rtse)和远程操作服务元素(remote operations service element,rose)等。
204.常见的应用层协议包括http、rtp/rtcp、域名系统(domain name system,dns)、文件传输协议(file transfer protocol,ftp)、简单邮件传输协议(simple mail transfer protocol,smtp)、简单网络管理协议(simple network management protocol,snmp)、远程登录协议(telnet)、路由信息协议(routing information protocol,rip)和网络文件系统(network file system,nfs)等。
205.其中,静态配置是指在客户端中部署quic时,通过配置指令在quic的协议栈中写入客户端能够支持的应用层协议。
206.而alp应用启动注册则是当客户端中的一个应用支持quic作为其传输层协议时,主动向本地的quic协议栈模块注册自身使用的协议类型,quic协议栈模块根据应用的协议注册信息,记录对应的协议类型。
207.s302、获取服务端支持的应用层协议。
208.一些实施方式中,参照s301中的示例,服务端也可以通过查询协议栈中记录的应用层协议,获取服务端支持的应用层协议。其获取的方式与s301中相同,在此不做赘述。
209.s303、客户端响应第一数据请求,向服务端发起握手,请求建立第一quic会话。
210.一些实施方式中,第一数据请求可以来自客户端中的应用程序。作为示例,客户端响应用户操作,开启购物应用时,第一数据请求可以是客户端向购物应用对应的服务端发送的用于获取购物应用启动界面中数据的数据请求。第一数据请求所使用的应用端协议可根据第一数据请求所获取数据的类型确定。例如,对于文本、图片数据,可以使用http3.0,对于视频直播数据,则可以使用rtp/rtcp。
211.一些实施方式中,在客户端响应第一数据请求之前,可以先创建quic的每个应用层协议对应的套接字(socket)连接,当客户端响应第一数据请求时,可以根据第一数据请求使用的应用层协议对应的socket连接,向服务端发起握手,请求建立第一quic会话。
212.当通过socket连接与服务端握手时,可以使用0-往返时间(round-trip time,rtt)握手或1-rtt握手。例如,当使用1-rtt握手时,客户端向服务端发送的握手请求可以是初始(initial)数据包,initial数据包包含一个长报头(类型值为0x0)、数据包长度和包号字段,可携带客户端和服务器发送的首个crypto帧进行密钥交换,并携带客户端和服务器的之间双向的确认字符(acknowledge character,ack)。
213.作为示例,initial数据包的包号为0,包内携带clienthello的crypto帧,crypto帧(type=0x06)用于传输加密握手消息。可以使用initial[0]:crypto[ch]来表示。
[0214]
s304、服务端响应握手请求,返回握手报文,握手报文包括服务端支持的应用层协议。
[0215]
一些实施方式中,参考s303,当服务端接收到initial[0]:crypto[ch]后,根据copyto帧生成服务端的initial数据包、握手(handshake)数据包和0.5-rtt数据包,并将这些数据包合并为一个握手报文,发送给客户端。
[0216]
其中,服务端的initial数据包结构与服务端的一致,作为示例,服务端的initial数据包的包号为0,其中包括serverhello的copyto帧,以及initial[0]:crypto[ch]的ack。可以用initial[0]:crypto[sh]ack[0]表示。
[0217]
handshake数据包包含一个长报头(类型值为0x2)、数据包长度和包号字段,用于携带来自服务器和客户端的加密握手消息和ack。其中,加密握手消息中包括了应用层协议协商(application layer protocol negotiation,alpn)字段,服务端支持的应用层协议可以记录在alpn字段中。记录时,可以通过互联网工程任务组(the internet engineering task force,ietf)规定的“alpn协议身份标识号(identity document,id)”注册表中,每个应用层协议对应的字符串进行记录。例如,通过“http3.0对应的alpn协议id为h3”,dns对应的alpn协议id为“doq”,rtp/rtcp对应的alpn协议id为“qrt”等。
[0218]
作为示例,handshake数据包的包号为0,包内携带crypto帧。可以使用handshake[0]:crypto[ee,cert,cv,fin]来表示。其中,ee是扩展元素(extend element,ee),ee中可以携带附加通告的参数,例如,alpn可通过ee携带,并在ee中进行通告。
[0219]
cert指的是证书(certificate,cert),cv指的是校验码,fin则是结束标志。其中,cert和cv可以用于quic会话建立时的验证。
[0220]
0.5-rtt数据包指的是仅从服务端发送给客户端的1-rtt数据包,由于是从第0.5个rtt周期开始发送的,所以称之为0.5-rtt数据吧。0.5-rtt数据包包括可靠数据流(stream)帧,stream帧可以隐式创建数据流并携带流数据。隐式创建数据流指的是当客户端或服务端创建stream帧时,若stream帧中指示的流id不存在,则创建一个使用该流id数据流,并通过该数据流发送stream帧。可以使用1-rtt[0]:stream[1,
“…”
]来表示。
[0221]
s305、客户端根据客户端支持的应用层协议和服务端支持的应用层协议,生成第一quic会话对应的应用层协议列表。
[0222]
一些实施方式中,客户端在接收到服务端发送的握手报文后,获取handshake数据包中服务端支持的应用层协议。然后,客户端确定服务端与客户端同时支持的应用层协议,并将这些应用层协议记录,生成应用层协议列表。例如,若客户端支持的应用层协议包括http3.0、rtp/rtcp、dnd,服务端支持的应用层协议包括http3.0、rtp/rtcp、ftp,则应用层协议列表包括http3.0和rtp/rtcp。
[0223]
s306、客户端与服务端之间建立第一quic会话,客户端发送第一quic会话对应的应用层协议列表给服务端。
[0224]
一些实施方式中,客户端根据握手报文的每个数据包中的数据,生成对应的数据包。
[0225]
例如,根据initial[0]:crypto[sh]ack[0],可以生成initial[1]:ack[0]。即包号为1的initial数据包,其中包括接收到initial数据包的ack。
[0226]
根据handshake[0]:crypto[ee,cert,cv,fin],客户端可以生成handshake[0]:
crypto[fin],ack[0]。
[0227]
其中,客户端可以根据handshake[0]中crypto内的ee字段,获取得到服务端支持应用层协议。然后,根据本端支持的应用层协议和服务端支持的应用层协议,生成第一quic会话对应的应用层协议列表,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
[0228]
需要说明的是,生成的第一quic会话对应的应用层协议列表可以记录在客户端和服务端的协议栈中。记录第一quic会话对应的应用层列表可以通过在协议栈中建立第一应用层列表,并将第一quic会话与第一应用层列表关联实现。例如,第一quic会话与第一应用层列表为“h3”和“qrt”时,可以记录为第一quic会话对应第一应用层列表,第一应用层列表中记录“h3”和“qrt”。
[0229]
或者,记录第一quic会话对应的应用层列表还可以通过将第一quic会话与应用层协议进行关联实现。例如,协议栈中记录有“h3”、“qrt”、“doq”等应用层协议,当第一quic会话与第一应用层列表为“h3”和“qrt”时,可以将第一quic会话与“h3”和“qrt”关联。
[0230]
在一种可能的实现方式中,第一quic会话对应的应用层协议列表可以基于包括客户端和服务端同时支持的至少两种应用层协议。例如,当客户端长时间未使用dns时,客户端和服务端同时支持“h3”、“qrt”和“doq”,生成的第一quic会话对应的应用层列表可以仅包括“h3”和“qrt”。
[0231]
在这种实现方式中,将客户端和服务端同时支持但是使用频率低的应用层协议忽略,仅将常用的应用层协议记录在第一quic会话对应的应用层协议列表中。可以减少服务端记录应用层协议列表的存储负载,节省资源。
[0232]
作为示例,客户端可以生成handshake[0]的ack,并将第一quic会话对应的应用层协议列表写入handshake加密握手消息中的alpn字段,得到handshake[0]:crypto[fin],ack[0]。
[0233]
然后,客户端还可以根据1-rtt[0]:stream[1,
“…”
],生成1-rtt[0]:stream[0,"..."],ack[0],其中包括了stream帧和stream[0,
“…”
]的ack。
[0234]
最后,客户端将多个对应生成的数据包作为一个报文,发送给服务端。服务端在接收到报文后,根据报文中的数据包,生成handshake[1]:ack[0]和1-rtt[1]:handshake_done,stream[3,"..."],ack[0],确认完成握手,并向客户端返回握手完成的ack,第一quic会话建立完成。
[0235]
第一quic会话建立后,其中包括第一数据流,第一数据流用于承载第一数据请求对应的数据。其中,数据流包括可靠数据流(stream)或不可靠数据流(flow),数据流具体采用哪种形式,需根据数据流承载的数据类型确定,例如,直播视频的数据需要保证可靠性,则可以使用stream的形式传输。而在部分场景中,dns数据无需保证可靠性,可以通过flow的形式传输。
[0236]
以stream为例,第一数据流是客户端发起的单向或双向的数据流。每个数据流对应一个固定的流id,流id是一个62比特位的数,即十进制的0~2
62-1。流id的最低位(0x1)标识该流的发起者,客户端发起流的流id为偶数(比特位设置为0),服务端发起流的流id为奇数(比特位设置为1)。流id的第二个低位(0x2)用于区分双向数据流(比特位设置为0)和单向数据流(比特位设置为1)。每种流对应有流id空间,用于记录对应的流id,每种类型的流
空间均从最小值开始记录流id(即第三个低位从0开始计数),每种类型的连续流都是以数字递增的流id创建。例如,客户端发起的双向数据流从0x0(前三个低位均为0)开始记录流id,服务端发起的双向数据流从0x1开始记录流id(第一个低位1为1,第二和第三个低位为0),客户端发起的单向数据流从0x2(第一和第三个低位为0,第二个低位为1)开始记录流id,服务端发起的单向数据流从0x3(第一和第二个低位为1,第三个低位为0)开始记录流id。
[0237]
在本实施例中,第一数据流如果是客户端发起的单向数据流,则其流id为0x2,第一数据流如果是客户端发起的双向数据流,则其流id为0x0。
[0238]
一些实施方式中,客户端发起与服务端之间的stream时,向服务端发送的首帧可以是alp_stream帧,并通过alp_stream帧实现隐式创建stream并携带stream的数据。在本实施方式中,alp_stream帧为第一类数据帧,stream帧为第二类数据帧。
[0239]
alp_stream帧与stream帧相比,增加了alp字段。alp字段用于承载alp域,alp域是一个结构体,用于指示alp_stream帧对应的应用层协议。
[0240]
作为示例,alp字段可以为:
[0241][0242]
其中,alp length标识alp域字段的长度。alp next protocol(

)为应用层协议标识字符串,其中记录了应用层协议对应的alpn协议id。
[0243]
作为示例,alp_stream帧的格式可以为:
[0244][0245]
alp_stream帧类型字段可以由互联网数字分配机构(internet assigned numbers authority,iana)进行分配。作为示例,可以采用0b00???xxx的形式,例如,上例中示出的0x20到0x27的一组值。
[0246]
使用alp_stream帧创建stream时,stream使用的应用层协议是alp域中声明的协议,并且该alp域中声明的协议必须是quic会话alpn协商支持的协议(即第一quic会话对应的应用层协议列表中的应用层协议),否则创建stream失败,生成stream_alp_error。丢弃该alp_stream帧或通知关闭该stream,清除对应stream id和应用层协议的关联信息。
[0247]
stream创建后,客户端和服务端将该stream的stream id与该stream对应的应用层协议关联。由于alp_stream帧和stream帧共享stream id空间,相同stream id的alp_
stream帧和stream帧都是同一个stream下的帧数据。所以,该stream后续报文可以不使用alp_stream帧,只用stream帧承载,当客户端或服务端接收到的stream帧时,可根据stream帧中的streamid将stream帧发送给对应应用层协议的协议应用或模块进一步解析处理。
[0248]
在本实施例中,通过将stream id与应用层协议关联,实现了在不使用alp_stream帧时,也可以准确的获得stream帧对应的应用层协议,使得该stream后续使用stream帧也可以在一个quic会话下传输不同应用层协议的数据流。
[0249]
作为示例,假设通过alp_stream帧创建的streamid为0x2,alp域中记录的字符串为“h3”,则说明streamid为0x2的stream承载的应用层协议为http3.0。当后续接收到流id为0x2的stream帧时,将该stream帧发送给http3.0对应的协议应用或模块进一步解析处理。
[0250]
如果该stream后续报文使用alp_stream帧承载,其alp域中声明的协议必须和stream创建时标识的应用层协议一致。如果不一致,客户端或服务端可以生成用于指示应用层协议错误的“stream_alp_error”错误,并在日志中记录stream_alp_error。
[0251]
需要说明的是,stream_alp_error可以被抑制,例如,在预设时长内出现的多次stream_alp_error可以仅记录5次,抑制stream_alp_error错误的方式本技术不做限制。
[0252]
还有一些实施方式中,也可以使用stream帧创建stream。
[0253]
当使用stream帧创建stream时,默认stream承载的应用是quic会话创建时,alpn协商中的首个应用层协议,即应用层协议列表中的第一个应用层协议。
[0254]
作为示例,若应用层协议列表中应用层协议的顺序为“h3”、“qrt”。当通过stream帧创建了stream id为0x3的stream,则该stream承载的应用层协议为“h3”,当后续接收到streamid为0x3的stream帧时,将该stream帧发送给http3.0对应的协议应用或模块进一步解析处理。
[0255]
alp_stream帧类型的低三个比特决定了帧中存在的字段。
[0256]
alp_stream帧类型中的off位(0x04),用于表示是否存在offset域。offset域用于指示alp_stream帧的偏移量。当off位设置为1时,offset字段(alp_stream帧中的[offset(i)])出现。当off位设置为0时,offset字段不存在。当offset字段不存在时,流数据以0的偏移量开始(即alp_stream帧包含流的第一个字节,或不包含数据的流的结尾)。
[0257]
alp_stream帧类型中的len位(0x02),用于表示是否存在length字段。length字段用于指示alp_stream帧中stream data(..)的长度。当len位设置为1时,length字段(alp_stream帧中的[length(i)])出现。当len位设置为0时,length字段不存在。当length字段不存在时,stream data字段扩展到报文尾部。
[0258]
alp_stream帧类型中的fin位(0x01)用于表示该alp_stream帧标识码流结束。stream的最终大小是偏移量和此帧的长度之和。
[0259]
另外一些实施方式中,客户端发起与服务端之间的flow时,向服务端发送的首帧可以是alp_datagram帧,并通过alp_datagram帧实现隐式创建flow并携带flow的数据。在本实施方式中,alp_datagram帧为第一类数据帧,datagram帧为第二类数据帧。
[0260]
alp_datagram帧与datagram帧相比,增加了alp字段。alp字段与alp_stream帧中的相同。
[0261]
作为示例,alp_datagram帧的格式可以为:
[0262][0263]
alp_datagram帧类型字段可以由iana进行分配。作为示例,可以采用0b00?????x的形式,例如,上例中示出的0x40到0x41的一组值。
[0264]
使用alp_datagram帧创建flow时,flow使用的应用层协议是alp域中声明的协议,并且该alp域中声明的协议必须是quic会话alpn协商支持的协议(即应用层协议列表中的应用层协议),否则创建flow失败,生成datagram_alp_error。丢弃该alp_datagram帧或通知关闭该flow。
[0265]
在一些可能的实现方式中,根据quic的协议标准,datagram帧可能不包含flow id,相应的,alp_datagram帧也不包括flow id,在这个情况下,通过该flow传输后续数据时,需要使用alp_datagram帧,以保证能够准确获取传输的数据所使用的应用层协议。每个flow下的报文使用相同类型的帧承载,即同一个flow的报文都由alp_datagram帧承载或都由datagram帧承载。
[0266]
在另一些可能的实现方式中,datagram帧可以包含flow id。这个情况下,flow创建后,客户端和服务端可以将该flow的flow id与该flow对应的应用层协议关联。由于alp_datagram帧和datagram帧共享flow id空间,可以确定使用了相同flow id的alp_datagram帧和datagram帧都是同一个flow下的帧数据。所以,该flow后续报文可以不使用alp_datagram帧,只用datagram帧承载,当客户端或服务端接收到的datagram帧时,可根据datagram帧中的flowid将datagram帧发送给对应应用层协议的协议应用或模块进一步解析处理。
[0267]
在这种实现方式中,通过将flow id与应用层协议关联,实现了在不使用alp_datagram帧时,也可以准确的获得datagram帧对应的应用层协议,使得使用datagram帧也可以在一个quic会话下传输不同应用层协议的数据流。
[0268]
作为示例,假设通过alp_datagram帧创建的flowid为0x2,alp域中记录的字符串为“h3”,则说明flowid为0x2的flow承载的应用层协议为http3.0。当后续接收到流id为0x2的datagram帧时,将该datagram帧发送给http3.0对应的协议应用或模块进一步解析处理。
[0269]
如果该flow后续报文使用alp_datagram帧承载,其alp域中声明的协议必须和flow创建时标识的应用层协议一致。如果不一致,客户端或服务端可以生成用于指示应用层协议错误的“datagram_alp_error”错误,并在日志中记录datagram_alp_error。
[0270]
需要说明的是,datagram_alp_error可以被抑制,例如,在预设时长内出现的多次datagram_alp_error可以仅记录5次,抑制datagram_alp_error错误的方式本技术不做限制。
[0271]
还有一些实施方式中,也可以使用datagram帧创建flow。
[0272]
当使用datagram帧创建flow时,默认flow承载的应用是quic会话创建时,alpn协商中的首个应用层协议,即应用层协议列表中的第一个应用层协议。
[0273]
作为示例,若应用层协议列表中应用层协议的顺序为“h3”、“qrt”。当通过datagram帧创建了flow id为0x3的datagram,则该datagram承载的应用层协议为“h3”,当后续接收到flowid为0x3的datagram帧时,将该datagram帧发送给http3.0对应的协议应用或模块进一步解析处理。
[0274]
alp_datagram帧类型的最低比特决定了帧中存在的字段。alp_datagram帧类型中的len位(0x01),用于表示是否存在length字段。length字段用于指示alp_datagram帧中datagram data(..)的长度。当len位设置为1时,length字段(alp_datagram帧中的[length(i)])出现。当len位设置为0时,length字段不存在。当length字段不存在时,datagram data字段扩展到报文尾部。
[0275]
还有一些实施例中,在quic会话建立后,服务端和客户端还可以动态协商承载的应用层协议。
[0276]
在一种可能实施方式中,可以创建新的扩展帧实现动态协商承载的应用层协议。如创建用于通知客户端或服务端向存储于本地的应用层协议列表中添加至少一个应用层协议的第一通知帧。
[0277]
或者,创建用于通知客户端或服务端向存储于本地的应用层协议列表中添加至少一个应用层协议的第二通知帧。
[0278]
在本实施方式中,第一通知帧可以是new_alpn帧,例如,可以在向客户端本地的quic协议栈中的应用层协议列表中添加至少一个应用层协议后,通过向服务端发送new_alpn帧,通知服务端本端支持的应用层协议增加了。
[0279]
第二通知帧可以是remove_alpn帧,例如,在移除客户端本地的quic协议栈中的应用层协议列表中的至少一个应用层协议后,通过向服务端发送remove_alpn帧,通知服务端本端支持的应用层协议减少了。
[0280]
需要说明的是,客户端和服务端还记录了本端能够支持的应用层协议。
[0281]
在一些实施方式中,当向应用层协议列表中添加至少一个应用层协议时,若添加的至少一个应用层协议是本端尚未支持的应用层协议,则还可以将该应用层协议记录为本端能够支持的应用层协议。当移除应用层协议列表中至少一个应用层协议时,还可以将该应用层协议从本端能够支持的应用层协议中移除。
[0282]
作为示例,new_alpn帧的格式可以为:
[0283][0284]
其中,new_alpn帧的类型字段可以由iana进行分配,在示例中以“待定(tobedone,tbd)1”表示。
[0285]
new_alpn帧中可以包括两个字段,即[length(i)]字段和[alp list(i)]字段,[length(i)]字段用于表示new_alpn帧的长度,而[alp list(i)]中则记录了至少一个添加
至应用层协议列表中的应用层协议。[alp list(i)]中记录应用层协议可以通过记录应用层协议对应的alpn协议id实现。
[0286]
而remove_alpn帧的格式可以为:
[0287][0288]
其中,remove_alpn帧的类型字段可以由iana进行分配,在示例中以“tbd2”表示。
[0289]
remove_alpn帧中可以包括两个字段,即[length(i)]字段和[alp list(i)]字段,[length(i)]字段用于表示remove_alpn帧的长度,而[alp list(i)]中则记录了至少一个从应用层协议列表中移除的应用层协议。[alp list(i)]中记录应用层协议可以通过记录应用层协议对应的alpn协议id实现。
[0290]
需要说明的是,当quic协议两端通过remove_alpn帧移除应用层协议时,如果接收端发现还有对应的stream或flow存在,应主动撤销对应的stream或flow。后续收到对应stream id的stream帧或alp_sream帧,或者,收到对应flow id的datagram帧或alp_datagram帧,则应丢弃对应的帧,并生成对应的错误码,该错误码也可以抑制生成的频次。在本实施例中,抑制生成频次的方式可以参考抑制stream_alp_error或抑制datagram_alp_error生成频次的方式。
[0291]
需要说明的是,new_alpn或remove_alpn帧一般由quic的服务端通告给客户端的,但是也允许quic的客户端通知给服务端,本技术对此不作限制。
[0292]
在另一些实施方式中,还可以使用其他的扩展帧实现,例如,通过扩展帧记录stream id或flow id与应用层协议(未记录在应用层协议列表中的应用层协议)的对应关系。当接收方收到该扩展帧后,记录该对应关系。当再次接收到该stream id或flow id的stream或datagram帧时,根据记录的对应关系将该数据帧发送给对应的协议应用或模块进一步解析处理。
[0293]
s307、客户端响应第二数据请求,获取第二数据请求使用的第二应用层协议。
[0294]
一些实施方式中,第二数据请求可以是客户端响应用户操作生成的,第二数据请求与第一数据请求目的端的网际互连协议(internet protocol,ip)地址相同。第二应用层协议可以与第一应用层协议相同,也可以不同,在此不做限制。
[0295]
例如,参考s303,当客户端接收到用户的操作指令,指示在购物应用中打开视频直播时,购物应用响应用户的操作指令,生成第二数据请求,向服务端请求直播视频资源。直播视频资源可以使用rtp协议进行传输,即第二应用层协议可以是rtp协议。
[0296]
s308、客户端确定第二数据请求使用的第二应用层协议是否在第一quic会话对应的应用层协议列表中,若第二应用层协议在第一quic会话对应的应用层协议列表中,则执行s310,否则执行s309。
[0297]
s309、客户端建立与服务端之间的第二quic会话。
[0298]
一些实施方式中,参考s307中的示例,若rtp协议不在第一quic会话对应的应用层协议列表中,则第二数据请求无法复用第一quic会话,需要重新握手建立第二quic会话,以
承载第二数据请求对应的rtp协议数据。
[0299]
s310、客户端在第一quic会话中建立第二数据流。
[0300]
一些实施方式中,参考s307中的示例,若rtp协议在第一quic会话对应的应用层协议列表中,则第二数据请求可以复用第一quic会话,客户端生成并向服务端发送alp_stream帧。alp_stream帧指示客户端与服务端之间生成一个新的stream(即第二数据流),该stream的stream id与rtp协议关联,当服务端或客户端接收到该stream id的stream帧时,将接收到的stream帧发送给rtp对应的协议应用或模块进一步解析处理。
[0301]
还有一些实施方式中,可以在协议栈中每个quic会话中数据流的数量,并在quic会话下生成或销毁数据流时,记录数据流数量的变化。当quic会话中数据流的数量为0,且经过预设的时长后quic会话中再无新增的数据流时,可以将quic会话断开,不再保持链接。
[0302]
作为示例,参考s303和s307中的示例,当第一quic会话建立后,建立了第一数据流,则第一quic会话中数据流的数量为1。当在第一quic会话下建立第二数据流时,将第一quic会话中数据流的数量加1,即第一quic会话中数据流的数量为2。
[0303]
当第一数据流中的数据传输完毕(接收到的stream帧中的fin位为1)后,可以将第一数据流销毁,第一quic会话中的数据流数量变为1。当第二数据流中的数据也完成了传输,销毁第二数据流后,第一quic会话中的数据流数量变为0。若第一quic会话中的数据流数量为0保持超过60秒,则可以将第一quic会话断开。
[0304]
图5示出了本技术提供的另一种quic数据传输方法的示意性流程图,在图5示出的流程中,当第二应用层协议不在应用层协议列表中时,可以将第二应用层协议添加至应用层协议列表,然后再复用第一quic会话传输第二数据请求对应的数据。
[0305]
参考图5,由于本实施例中数据传输方法的s301至s307与上述实施例一致,在此不做赘述。所以从s308开始,对本实施例中的方法进行说明。
[0306]
s308、客户端确定第二数据请求使用的第二应用层协议是否在第一quic会话对应的应用层协议列表中,若第二应用层协议在第一quic会话对应的应用层协议列表中,则执行s310,否则执行s311。
[0307]
s310、客户端在第一quic会话中建立第二数据流。
[0308]
在本实施例中,s310与上述实施例一致,在此不做赘述。
[0309]
s311、客户端将第二应用层协议添加至第一quic会话对应的应用层协议列表中。
[0310]
在本实施例中,当第二应用层协议不在第一quic会话对应的应用层协议列表中时,不建立客户端建立与服务端之间的第二quic会话,而是将第二应用层协议添加至存储在客户端本地的第一quic会话对应的应用层协议列表中。例如,若当前客户端本地的应用层协议列表中包括“h3”和“qrt”,第二应用层协议为dns,则可以将“doq”写入客户端本地的应用层协议列表,更新后客户端本地的应用层协议列表中包括“h3”、“qrt”和“doq”。
[0311]
s312、客户端发送第一quic会话对应的应用层协议列表更新指令给服务端后,执行s310。
[0312]
s313、服务端根据第一quic会话对应的应用层协议列表更新指令,将第二应用层协议添加至第一quic会话对应的应用层协议列表中。
[0313]
一些实施方式中,客户端更新完本地的第一quic会话对应的应用层协议列表后,可以向服务端发送s306中示出的new_apln帧,该帧中的[alp list(i)]字段包括第二应用
层协议。参考s311的示例,该帧中的[alp list(i)]字段可以包括“doq”。
[0314]
服务端在接收到new_apln帧后,将“doq”写入存储在服务端本地的第一quic会话对应的应用层协议列表中,更新后服务端本地的第一quic会话对应的应用层协议列表中包括“h3”、“qrt”和“doq”。
[0315]
需要说明的是,虽然本技术的附图中显示,s311、s312和s313为连续步骤。但是,s311、s312和s313可以分别部署执行。例如,s311可以在s307之后执行,s312需要在s311之后执行,但与s311之间可以插入其余的步骤。类似的,s313需要在s312之后执行,但与s313之间可以插入其余的步骤。
[0316]
作为示例,quic数据传输方法的步骤顺序可以是:s301、s302、s303、s304、s305、s306、s307、s311、s312、s308、s313、s310。或者,quic数据传输方法的步骤顺序还可以是:s301、s302、s303、s304、s305、s306、s307、s311、s308、s312、s313、s310,在此不做限制。
[0317]
这个情况下,客户端和服务端均可通过动态协商承载的应用层协议,使得客户端和服务端均支持第二应用层协议,客户端再执行s310,即可在第一quic会话中建立第二数据流,用于传输第二数据请求对应的数据。
[0318]
在本实施例中,当第二应用层协议不在第一quic会话对应的应用层协议列表中时,客户端也可以复用第一quic会话传输第二数据请求对应的数据,增加了数据传输方法的应用场景,进一步的降低数据传输延迟,提高建链效率。
[0319]
图6示出了本技术提供的另一种quic数据传输方法的示意性流程图,在图6示出的流程中,第二数据请求是服务端发起的。
[0320]
参考图6,该方法包括:
[0321]
s401、获取客户端支持的应用层协议。
[0322]
s402、获取服务端支持的应用层协议。
[0323]
s403、客户端响应第一数据请求,向服务端发起握手,请求建立第一quic会话。
[0324]
s404、服务端响应会话建立请求,返回握手请求,握手请求包括服务端支持的应用层协议。
[0325]
s405、客户端根据客户端支持的应用层协议和服务端支持的应用层协议,生成第一quic会话对应的应用层协议列表。
[0326]
s406、客户端与服务端之间建立第一quic会话,客户端发送第一quic会话对应的应用层协议列表给服务端。
[0327]
在本实施例中,s401至s406与s301至s306的实现方式一致,在此不做赘述。
[0328]
s407、服务端响应第二数据请求,获取第二数据请求使用的第二应用层协议。
[0329]
一些实施方式中,第二数据请求可以是服务端基于应用的需求向客户端发起的。例如,服务端向客户端动态推送广播或单播通知或消息(例如直播视频场景)时,服务端会向客户端发起第二数据请求。
[0330]
例如,参考s303,当服务端基于应用的需求,需要向客户端推送直播视频时,服务端可以生成第二数据请求,向客户端请求传输直播视频资源。由于直播视频资源可以使用rtp协议进行传输,即第二应用层协议可以是rtp协议。
[0331]
s408、服务端确定第二数据请求使用的第二应用层协议是否在第一quic会话对应的应用层协议列表中,若第二应用层协议在第一quic会话对应的应用层协议列表中,则执
行s410,否则执行s409。
[0332]
s409、服务端建立与客户端之间的第二quic会话。
[0333]
一些实施方式中,参考s407中的示例,若rtp协议不在第一quic会话对应的应用层协议列表中,则第二数据请求无法复用第一quic会话,需要与客户端重新握手建立第二quic会话,以承载第二数据请求对应的rtp协议数据。
[0334]
s410、服务端在第一quic会话中建立第二数据流。
[0335]
一些实施方式中,参考s407中的示例,若rtp协议在第一quic会话对应的应用层协议列表中,则第二数据请求可以复用第一quic会话,服务端生成并向客户端发送alp_stream帧。alp_stream帧指示服务端与客户端之间生成一个新的stream(即第二数据流),该stream的stream id与rtp协议关联,当服务端或客户端接收到该stream id的stream帧时,将接收到的stream帧发送给rtp对应的协议应用或模块进一步解析处理。
[0336]
还有一些实施方式中,可以记录在协议栈中每个quic会话中数据流的数量,并在quic会话下生成或销毁数据流时,记录数据流数量的变化。当quic会话中数据流的数量为0,且经过预设的时长后quic会话中再无新增的数据流时,可以将quic会话断开,不再保持链接。具体的实现方式可以参照s310中的示例,在此不做赘述。
[0337]
图7示出了本技术提供的另一种数据传输方法的示意性流程图。在图7示出的流程中,示出了服务端发起第二数据请求,第二应用层协议不在应用层协议列表中时,将第二应用层协议添加至应用层协议列表,然后再复用第一quic会话传输第二数据请求对应的数据的步骤。
[0338]
参考图7,由于本实施例中数据传输方法的s401至s407与上述实施例一致,在此不做赘述。所以从s408开始,对本实施例中的方法进行说明。
[0339]
s408、服务端确定第二数据请求使用的第二应用层协议是否在第一quic会话对应的应用层协议列表中,若第二应用层协议在第一quic会话对应的应用层协议列表中,则执行s310,否则执行s311。
[0340]
s410、服务端端在第一quic会话中建立第二数据流。
[0341]
在本实施例中,s410与上述实施例一致,在此不做赘述。
[0342]
s411、服务端将第二应用层协议添加至第一quic会话对应的应用层协议列表中。
[0343]
在本实施例中,当第二应用层协议不在第一quic会话对应的应用层协议列表中时,不建立服务端建立与客户端之间的第二quic会话,而是将第二应用层协议添加至存储在服务端本地的第一quic会话对应的应用层协议列表中。例如,若当前服务端本地的应用层协议列表中包括“h3”和“qrt”,第二应用层协议为dns,则可以将“doq”写入服务端本地的应用层协议列表,更新后服务端本地的应用层协议列表中包括“h3”、“qrt”和“doq”。
[0344]
s412、客户端发送应用层协议列表更新指令给服务端后,执行s410。
[0345]
s413、服务端根据应用层协议列表更新指令,将第二应用层协议添加至应用层协议列表中。
[0346]
一些实施方式中,服务端更新完本地的第一quic会话对应的应用层协议列表后,可以向客户端发送s306中示出的new_apln帧,该帧中的[alp list(i)]字段包括第二应用层协议。参考s311的示例,该帧中的[alp list(i)]字段可以包括“doq”。
[0347]
客户端在接收到new_apln帧后,将“doq”写入存储在客户端本地的第一quic会话
对应的应用层协议列表中,更新后客户端本地的应用层协议列表中包括“h3”、“qrt”和“doq”。
[0348]
需要说明的是,虽然本技术的附图中显示,s411、s412和s413为连续步骤。但是,s411、s412和s413可以分别部署执行。例如,s411可以在s407之后执行,s412需要在s411之后执行,但与s411之间可以插入其余的步骤。类似的,s413需要在s412之后执行,但与s413之间可以插入其余的步骤。
[0349]
作为示例,quic数据传输方法的步骤顺序可以是:s401、s402、s403、s404、s405、s406、s407、s411、s412、s408、s413、s410。或者,quic数据传输方法的步骤顺序还可以是:s401、s402、s403、s404、s405、s406、s407、s411、s408、s412、s413、s410,在此不做限制。
[0350]
这个情况下,服务端和客户端均可通过动态协商承载的应用层协议,使得客户端和服务端均支持第二应用层协议,服务端再执行s410,即可在第一quic会话中建立第二数据流,用于传输第二数据请求对应的数据。
[0351]
这个情况下,服务端和客户端均可支持第二应用层协议,服务端再执行s410,即可在第一quic会话中建立第二数据流,用于传输第二数据请求对应的数据。
[0352]
在本实施例中,当第二应用层协议不在第一quic会话对应的应用层协议列表中时,服务端也可以复用第一quic会话传输第二数据请求对应的数据,增加了数据传输方法的应用场景,进一步的降低数据传输延迟,提高建链效率。
[0353]
图8示出了一种使用本技术提供的数据传输方法时的数据流向图,在此根据图8示出的场景,对数据传输方法的应用进行说明。
[0354]
在图8示出的场景中,以http3.0会话请求和rtp会话请求复用quic会话为例进行说明。其中,客户端通过无线网络与英特网连接,服务端通过以太网与英特网连接,进而实现客户端与服务端的通信连接。
[0355]
当quic服务端开启应用程序(application,app)1的服务时,触发启动quic服务端监听,并获取服务端支持的应用层协议,在本场景中,服务端支持http3.0和rtp。
[0356]
当quic客户端上接收到用户操作,指示quic客户端启动app1,并使用http3.0访问quic服务端上的全球广域网(world wide web,web)服务,浏览网页。app1对应的模块创建http 3.0的套接字(socket)应用程序接口(application programming interface,api)。该socket api通过客户端本地的协议栈触发quic协议模块向quic服务端发起创建quic会话,开始握手协商,在握手过程中,双方也相互通告支持的应用层协议,确定了应用层协议列表,在本场景中,应用层协议列表指示quic会话支持http3.0和rtp。握手成功后生成quic会话(session)51。
[0357]
quic客户端和quic服务端继续在quic会话51的基础上完成http 3.0的协议会话http 3.0数据流52的握手(即创建用于承载http3.0数据的stream)。
[0358]
服务端可以将http 3.0会话建链的首个http 3.0的settings帧(settings帧用于传输影响客户端和服务端之间通信方式的http3.0配置参数)封装到申请stream id为4的alp_stream帧的stream data字段中,该alp_stream帧中alp域内的协议字符串为“h3”。quic服务端收到该alp_stream帧后,创建stream id为4的stream,并缓存该stream的stream id与http 3.0对应关系。服务端将从该alp_stream帧中解析出来的http 3.0的settings帧发送给服务端http 3.0协议模块处理。
[0359]
quic服务端后续收到stream id为4的stream帧时,根据stream id与http 3.0对应关系,将解析后得到的负载数据发送给服务端的http 3.0协议模块处理。实现quic客户端和quic服务端基于quic会话51完成http 3.0数据流52的握手和后续的资源访问。
[0360]
当quic客户端接收到用户指令,指示app1开启视频直播,app1对应的模块创建rtp的socket接口,该socket api检查发现quic客户端有支持rtp协议的quic会话51存在,quic会话51可以承载rtp协议会话的rtp数据流53。
[0361]
所以,客户端不再触发新的quic会话握手,而是直接复用quic会话51,基于quic会话51进行rtp数据流53的握手(即创建用于承载rtp或rtcp数据的stream)。
[0362]
服务端可以将首个rtp或rtcp报文封装到申请的stream id为8的alp_stream帧的stream data字段中,该alp_stream帧中alp域内的协议字符串为“qrt”,quic服务器收到该alp_stream帧后,创建stream id为8的stream,并缓存该stream的stream id与rtp的对应关系。
[0363]
然后,服务端将从该alp_stream帧中解析出来的rtp或rtcp的会话握手报文发送给服务端的rtp/rtcp协议模块处理。
[0364]
quic服务端后续收到stream id为8的stream帧时,根据stream id与rtp的对应关系,将解析后得到的负载数据发送给quic服务端的rtp/rtcp协议模块处理。实现quic客户端和quic服务端基于quic会话51完成rtp/rtcp的握手和后续的资源访问。
[0365]
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
[0366]
对应于上文实施例提供的应用于客户端的quic数据传输方法,图9示出了本技术实施例提供的quic数据传输装置的结构框图,为了便于说明,仅示出了与本技术实施例相关的部分。
[0367]
参照图9,该装置应用于客户端,包括:
[0368]
确定模块61,用于响应于第二数据请求与服务端之间进行数据传输时,确定第二数据请求所使用的第二应用层协议。
[0369]
建立模块62,用于当第二应用层协议为第一quic会话对应的应用层协议列表中的应用层协议时,在第一quic会话中建立第二数据流,第二数据流用于承载第二数据请求中请求传输的数据,第一quic会话为客户端响应第一数据请求时,与服务端建立的quic会话,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
[0370]
一些实施方式中,建立模块62,具体用于响应第二数据请求生成第一类数据帧,第一类数据帧包括第二应用层协议、第二数据流的标识信息以及第二数据请求对应的数据信息,记录第二数据流的标识信息与第二应用层协议的对应关系。向服务端发送第一类数据帧,指示服务端根据第一类数据帧中的第二应用层协议建立第二数据流。
[0371]
图10示出了本技术实施例提供的另一种quic数据传输装置的结构框图。
[0372]
一些实施方式中,参考图10,该装置还包括接收模63,用于接收来自服务端的第一类数据帧。该装置还包括处理模块64,用于当确定第一类数据帧中第二数据流的标识信息与第二应用层协议的对应关系,与客户端记录的第二数据流的标识信息与第二应用层协议的对应关系一致时,将第一类数据帧发送给第二应用层协议对应的处理模块进行处理。
[0373]
一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
[0374]
接收模块63,还用于接收来自服务端的第二类数据帧。处理模块64,还用于根据第二类数据帧中第二数据流的标识信息以及第二数据流的标识信息与第二应用层协议的对应关系,将第二类数据帧发送给第二应用层协议对应的处理模块进行处理。
[0375]
一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
[0376]
建立模块62,具体用于确定第二应用层协议为第一quic会话对应的应用层协议列表中的首个应用层协议。客户端响应第二数据请求生成第二类数据帧,记录第二数据流的标识信息与第二应用层协议的对应关系。客户端向服务端发送第二类数据帧,指示服务端响应第二类数据帧,根据第一quic会话对应的应用层协议列表中的首个应用层协议建立第二数据流。
[0377]
图11示出了本技术实施例提供的另一种quic数据传输装置的结构框图。
[0378]
一些实施方式中,参考图11,该装置还包括记录模65,用于当建立第一quic会话后,记录第一quic会话的引用次数,引用次数为第一quic会话中数据流的数量。当第一quic会话中建立一个数据流时,将引用次数加一。当第一quic会话中的一个数据流关闭时,将引用次数减一。
[0379]
一些实施方式中,记录模块65,还用于当引用次数减为零,且经过预设的时长后引用次数未发生变化时,将第一quic会话关闭。
[0380]
一些实施方式中,建立模块62,还用于响应第一数据请求与服务端建立第一quic会话,并生成第一quic会话对应的应用层协议列表。在第一quic会话中建立第一数据流,第一数据流用于承载第一数据请求中请求传输的数据,第一数据请求使用第一应用层协议,第一应用层协议为第一quic会话对应的应用层协议列表中的应用层协议。
[0381]
一些实施方式中,建立模块62,具体用于响应第一数据请求,向服务端发送建立第一quic会话的会话握手请求。客户端接收来自服务端的握手报文,握手报文是服务端根据会话握手请求生成的,握手报文包括服务端支持的应用层协议。根据客户端支持的应用层协议和服务端支持的应用层协议,生成第一quic会话对应的应用层协议列表。客户端根据握手报文建立第一quic会话,并将第一quic会话对应的应用层协议列表和第一quic会话建立的确认报文通过第一quci会话发送给服务端。
[0382]
图12示出了本技术实施例提供的另一种quic数据传输装置的结构框图。
[0383]
一些实施方式中,接收模块63,还用于接收来自服务端的第一通知帧或第二通知帧,第一通知帧用于指示客户端向存储于客户端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议,第二通知帧用于指示客户端移除存储于客户端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。参考图12,该装置还包括更新模块66,用于根据接收到的第一通知帧或第二通知帧,更新应用层协议列表。
[0384]
一些实施方式中,更新模块66,还用于响应应用层协议列表的更新指令,更新存储于客户端内的应用层协议列表。当更新指令指示向存储于客户端内的应用层协议列表中添加至少一个应用层协议时,生成第一通知帧,第一通知帧用于指示服务端向存储于服务端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议。当更新指令指示移除
存储于客户端内的应用层协议列表中的至少一个应用层协议时,生成第二通知帧,第二通知帧用于指示服务端移除存储于服务端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。将第一通知帧或第二通知帧发送给服务端。
[0385]
一些实施方式中,更新模块66,还用于当第二应用层协议不是第一quic会话对应的应用层协议列表中的应用层协议时,生成应用层协议列表的更新指令,更新指令用于将第二应用层协议写入存储于客户端内的第一quic会话对应的应用层协议列表。响应更新指令,并生成第一通知帧。建立模块62,还用于当客户端将第一通知帧通过第一quic会话发送给服务端后,在第一quic会话中与服务端建立第二数据流。
[0386]
对应于上文实施例提供的应用于服务端的quic数据传输方法,图13示出了本技术实施例提供的quic数据传输装置的结构框图,为了便于说明,仅示出了与本技术实施例相关的部分。
[0387]
参照图13,该装置应用于服务端,包括:
[0388]
确定模块71,用于响应于第二数据请求与客户端之间进行数据传输时,确定第二数据请求所使用的第二应用层协议。
[0389]
建立模块72,用于当第二应用层协议为第一quic会话对应的应用层协议列表中的应用层协议时,在第一quic会话中建立第二数据流,第二数据流用于承载第二数据请求中请求传输的数据,第一quic会话为客户端响应第一数据请求时,与服务端建立的quic会话,第一quic会话对应的应用层协议列表包括客户端和服务端同时支持的应用层协议。
[0390]
一些实施方式中,建立模块72,具体用于响应第二数据请求生成第一类数据帧,第一类数据帧包括第二应用层协议、第二数据流的标识信息以及第二数据请求对应的数据信息,记录第二数据流的标识信息与第二应用层协议的对应关系。服务端向客户端发送第一类数据帧,指示客户端根据第一类数据帧中的第二应用层协议建立第二数据流。
[0391]
图14示出了本技术实施例提供的另一种quic数据传输装置的结构框图。
[0392]
一些实施方式中,参考图14,该装置还包括接收模73,用于接收来自客户端的第一类数据帧。该装置还包括处理模块74,用于当确定第一类数据帧中第二数据流的标识信息与第二应用层协议的对应关系,与服务端记录的第二数据流的标识信息与第二应用层协议的对应关系一致时,将第一类数据帧发送给第二应用层协议对应的处理模块进行处理。
[0393]
一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
[0394]
接收模块73,还用于接收来自客户端的第二类数据帧。处理模块74,还用于根据第二类数据帧中第二数据流的标识信息以及第二数据流的标识信息与第二应用层协议的对应关系,将第二类数据帧发送给第二应用层协议对应的处理模块进行处理。
[0395]
一些实施方式中,第二类数据帧包括第二数据流的标识信息以及第二数据请求对应的数据信息。
[0396]
建立模块72,具体用于确定第二应用层协议为第一quic会话对应的应用层协议列表中的首个应用层协议。服务端响应第二数据请求生成第二类数据帧,记录第二数据流的标识信息与第二应用层协议的对应关系。服务端向客户端发送第二类数据帧,指示客户端响应第二类数据帧,根据第一quic会话对应的应用层协议列表中的首个应用层协议建立第二数据流。
[0397]
图15示出了本技术实施例提供的另一种quic数据传输装置的结构框图。
[0398]
一些实施方式中,该装置还包括记录模块75,用于建立第一quic会话后,记录第一quic会话的引用次数,引用次数为第一quic会话中数据流的数量。当第一quic会话中建立一个数据流时,将引用次数加一。当第一quic会话中的一个数据流关闭时,将引用次数减一。
[0399]
一些实施方式中,记录模块75,还用于当引用次数减为零,且经过预设的时长后引用次数未发生变化时,将第一quic会话关闭。
[0400]
一些实施方式中,建立模块72,还用于服务端与客户端建立第一quic会话。服务端响应来自客户的第一数据请求,建立与客户端之间的第一数据流,第一数据流用于承载第一数据请求中请求传输的数据,第一数据请求使用第一应用层协议,第一应用层协议为第一quic会话对应的应用层协议列表中的应用层协议。
[0401]
一些实施方式中,建立模块72,具体用于接收来自客户端的会话握手请求,会话握手请求用于指示服务端与客户端之间建立第一quic会话。根据会话握手请求生成握手报文并发送给客户端,握手报文包括服务端支持的应用层协议。接收来自客户端的应用层协议列表和第一quic会话建立的确认报文。服务端根据确认报文确认建立第一quic会话。
[0402]
图16示出了本技术实施例提供的另一种quic数据传输装置的结构框图。
[0403]
一些实施方式中,接收模块73,还用于接收来自客户端的第一通知帧或第二通知帧,第一通知帧用于指示服务端向存储于服务端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议,第二通知帧用于指示服务端移除存储于服务端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。参考图16,该装置还包括更新模块76,用于根据接收到的第一通知帧或第二通知帧,更新应用层协议列表。
[0404]
一些实施方式中,更新模块76,还用于响应应用层协议列表的更新指令,更新存储于服务端内的应用层协议列表。当更新指令指示向存储于服务端内的应用层协议列表中添加至少一个应用层协议时,生成第一通知帧,第一通知帧用于指示客户端向存储于客户端内第一quic会话对应的应用层协议列表中添加至少一个应用层协议。当更新指令指示移除存储于服务端内的应用层协议列表中的至少一个应用层协议时,生成第二通知帧,第二通知帧用于指示客户端移除存储于客户端内第一quic会话对应的应用层协议列表中的至少一个应用层协议。服务端将第一通知帧或第二通知帧发送给客户端。
[0405]
一些实施方式中,更新模块76,还用于当第二应用层协议不是第一quic会话对应的应用层协议列表中的应用层协议时,服务端生成应用层协议列表的更新指令,更新指令用于将第二应用层协议写入存储于服务端内第一quic会话对应的应用层协议列表。服务端响应更新指令,并生成第一通知帧。建立模块72,还用于当服务端将第一通知帧通过第一quic会话发送给客户端后,在第一quic会话中与客户端建立第二数据流。
[0406]
需要说明的是,上述模块之间的信息交互、执行过程等内容,由于与本技术方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
[0407]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上
programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0415]
存储器902在一些实施例中可以是quic服务端900的内部存储单元,例如quic服务端900的硬盘或内存。存储器902在另一些实施例中也可以是quic服务端900的外部存储设备,例如quic服务端900上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,存储器902还可以既包括quic服务端900的内部存储单元也包括外部存储设备。存储器902用于存储操作系统、应用程序、引导装载程序(bootloader)、数据以及其他程序等,例如计算机程序的程序代码等。存储器902还可以用于暂时地存储已经输出或者将要输出的数据。
[0416]
本技术实施例还提供了一种数据传输系统,包括至少一个第五方面提供的quic客户端和至少一个第六方面提供的quic服务端,quic客户端和quic服务端通过网络通信连接。数据传输系统中的quic客户端和quic服务端可通过本技术提供的quic数据传输方法进行数据传输。
[0417]
本技术实施例还提供了一种计算机可读存储介质,本技术实施例提供了一种计算机程序产品,当计算机程序产品在客户端上运行时,使得客户端执行上述应用于客户端的quic数据传输方法。
[0418]
本技术实施例还提供了一种计算机可读存储介质,本技术实施例提供了一种计算机程序产品,当计算机程序产品在服务端上运行时,使得服务端执行上述应用于服务端的quic数据传输方法。
[0419]
本技术实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时实现可实现上述应用于客户端的quic数据传输方法中的步骤。
[0420]
本技术实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时实现可实现上述应用于服务端的quic数据传输方法中的步骤。
[0421]
本技术实施例提供了一种芯片系统,芯片系统包括存储器和处理器,处理器执行存储器中存储的计算机程序,以实现上述应用于客户端的quic数据传输方法中的步骤。
[0422]
本技术实施例提供了一种芯片系统,芯片系统包括存储器和处理器,处理器执行存储器中存储的计算机程序,以实现上述应用于服务端的quic数据传输方法中的步骤。
[0423]
本技术实施例提供了一种芯片系统,芯片系统包括处理器,处理器与计算机可读存储介质耦合,处理器执行计算机可读存储介质中存储的计算机程序,以实现上述应用于客户端的quic数据传输方法中的步骤。
[0424]
本技术实施例提供了一种芯片系统,芯片系统包括处理器,处理器与计算机可读存储介质耦合,处理器执行计算机可读存储介质中存储的计算机程序,以实现上述应用于服务端的quic数据传输方法中的步骤。
[0425]
本技术提供的quic数据传输方法如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可
以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质至少可以包括:能够将计算机程序代码携带到电子设备的任何实体或装置、记录介质、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质。例如u盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
[0426]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
[0427]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0428]
在本技术所提供的实施例中,应该理解到,所揭露的方法、装置、客户端和服务端,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
[0429]
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0430]
最后应说明的是:以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何在本技术揭露的技术范围内的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献