CN109922057A - 基于帧序的udp数据重组方法 - Google Patents
基于帧序的udp数据重组方法 Download PDFInfo
- Publication number
- CN109922057A CN109922057A CN201910144422.9A CN201910144422A CN109922057A CN 109922057 A CN109922057 A CN 109922057A CN 201910144422 A CN201910144422 A CN 201910144422A CN 109922057 A CN109922057 A CN 109922057A
- Authority
- CN
- China
- Prior art keywords
- data
- index
- frame
- airkiss
- seq
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
本发明提供了一种基于帧序的UDP数据重组方法,基于互联网UDP协议数据帧发送的有序性,以及airkiss配网协议数据发送的重复性,在数据发送端重复发送UDP数据,在数据接收端基于发送帧的序号,将接收的数据匹配到数据发送时的位置,进行数据重组,实现数据完整、连续的接收。本发明的有益效果是:有效的规避了airkiss的UDP数据包丢失率高的问题,数倍提高了airkiss智能配网的成功率,缩短了airkiss智能配网的时间。
Description
技术领域
本发明涉及UDP数据重组方法,尤其涉及一种基于帧序的UDP数据重组方法。
背景技术
近些年,随着智能家居、物联网的日渐普及,如何让这些不带输入功能的智能设备接入互联网,一直是业内讨论的热点。TI公司最早提出了smartConfig智能配网算法,引入以Length字段进行编码,来传递AP(无线访问接入点)的SSID(服务集标识)和PWD(密码)信息。微信完善了这种智能配网算法,并将其称之为airkiss技术,目前微信airkiss技术逐渐在市场上占据主导地位。
微信Airkiss配网基本流程如下:
1.wifi智能设备以station混杂模式运行;
2.手机微信客户端通过Airkiss发送路由器的ssid和psw密码;
3.wifi设备通过抓包获取到ssid和psw密码,然后连接到路由器。
airkiss数据流程图如图1所示,智能终端内置的WIFI芯片处于混杂模式,通过抓取数据包,再丢给airkiss程序处理,由于网络环境的复杂性,可能同时存在许多个WIFI路由器或路由设备,导致收到非常多的无效数据。此外,airkiss客户端发送的是无连接的UDP,数据经常会丢失。这些因素叠加,导致收到的airkiss中的丢包率达到了30%-40%,在WIFI环境差的时候,丢包率甚至达到了50%。
airkiss的协议规定:
1.连续收到4个正确的guide code,锁定此WIFI频道,等待接收magic code。
2.连续收到4个正确的magic code,得到总长度和ssid校验和。
3.连续收到4个正确的prefix code,得到密码(psw)长度和psw的校验和。
4.多次接收6个正确的psw和ssid和数据(含1个数据字段的index和4个数据字节),接收次数等于总长度/4。
从协议规定可以计算出,如果以30%的丢包率,连续收到4个正确字节的概率是0.7*0.7*0.7*0.7=0.24,连续收到6个正确字节的概率是0.7*0.7*0.7*0.7*0.7*0.7=0.11。从统计学上来说,需要连发5次才能收到4个连续正确的字节,需要连发10次才能收到6个连续正确的字节。当丢包率达到50%时,已经很难正确接收psw和ssid的数据了。
事实上也正是如此,在未采用基于帧序的UDP数据重组算法之前,收到psw和ssid数据,十几次才会有一次成功。即使成功,也需要很长的配网时间。
因此,如果提高airkiss的配网成功率是本领域技术人员所亟待解决的技术问题。
发明内容
为了解决现有技术中的问题,本发明提供了一种基于帧序的UDP数据重组方法。
本发明提供了一种基于帧序的UDP数据重组方法,基于互联网UDP协议数据帧发送的有序性,以及airkiss配网协议数据发送的重复性,在数据发送端重复发送UDP(用户数据报协议)数据,在数据接收端基于发送帧的序号,将接收的数据匹配到数据发送时的位置,进行数据重组,实现数据完整、连续的接收。
作为本发明的进一步改进,通过累积填充数据字节的方式进行数据重组。
作为本发明的进一步改进,包括以下步骤:
(1)airkiss_recv接收客户端发送过来的数据,在接收到guide code后,调用airkiss_filter过滤数据,只接收和guide code帧相同mac地址的帧,包括发送端mac地址,发送路由器mac地址,接收端mac地址;
(2)对数据有效性进行判断,分多次接收数据,如果第1、2以及3-6中的任一个数据一共3个数据满足协议规定,则是一次有效的数据;
(3)第2个字节index代表了seq数据组的序号0-need_seq,将这次收到的数据放置到seq_data[index]中,seq_data[index]共6个字节,第1个字节代表了这一数据组的crc校验和,第2个字节index,第3-6个字节是数据,待4个数据全部收全后进行校验;
(4)依次查看其后的4个数据位,先将数据所处的帧序号frame_id和index的frame_id相减,如果范围是1-4之内,就是有效的数据,放置到对应的seq_data[index][id]中;
(5)将index所在的数据组,进行crc检验,并判断index数据组是否全部收集,seq_data[index]所有的数据不为0表明数据已全部收集;
(6)如果index数据组的数据未全部收集,或者crc校验未通过,继续到第(1)步接收数据;
(7)如果index数据组的数据已经全部收集,并且crc校验通过,代表index数据组接收成功;
(8)查看是否0-need_seq,一共need_seq的数据是否全部接收成功;
(9)如果还有一些数据组没有收全数据,继续到第(1)步接收数据;
(10)0-need_seq所有的数据全部OK,存入ssid和psw数组,写入到wpa_supplicant.conf文件,并调用脚本连接网络。
本发明的有益效果是:有效的规避了airkiss的UDP数据包丢失率高的问题,数倍提高了airkiss智能配网的成功率,缩短了airkiss智能配网的时间。
附图说明
图1是现有技术中的airkiss数据流程图。
图2是本发明一种基于帧序的UDP数据重组方法的ssid和psw数据字段定义结构图。
图3是本发明一种基于帧序的UDP数据重组方法的airkiss协作基本框图。
图4是本发明一种基于帧序的UDP数据重组方法的airkiss数据处理和状态图。
图5是本发明一种基于帧序的UDP数据重组方法的流程图。
具体实施方式
下面结合附图说明及具体实施方式对本发明作进一步说明。
如图2至图5所示,一种基于帧序的UDP数据重组方法,基于互联网UDP协议数据帧发送的有序性,以及airkiss配网协议数据发送的重复性,在数据发送端重复发送UDP数据,在数据接收端基于发送帧的序号,将接收的数据匹配到数据发送时的位置,进行数据重组,实现数据完整、连续的接收。
本发明提供的一种基于帧序的UDP数据重组方法,基于互联网UDP协议数据帧发送的有序性,以及airkiss配网协议数据发送的重复性,在数据接收端基于发送帧的序号,将接收的数据匹配到数据发送时的位置进行重组,有效的规避了airkiss的UDP数据包丢失率高的问题,数倍提高了airkiss智能配网的成功率,缩短了airkiss智能配网的时间。因此,本方法对于airkiss智能配网的推广和应用有较大价值。同时,本方法也对无连接的UDP数据发送提供了一种参考:可以通过重复发送UDP数据,在接收端基于帧序进行数据重组来接收数据,可以实现一种虚拟连接的效果。
在airkiss程序内,打印出收到的airkiss数据,数据片段如下:
451,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 80 64]
438,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 90 64]//丢64a0
204,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 b0 64]//丢64c0
383,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 d0 64]//丢64e0
387,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 f0 64]
318,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 00 65]//丢6510
389,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 20 65]//丢6530,6540
386,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 50 65]
204,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 60 65]
206,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 70 65]//丢6580,6590,65a0
454,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 b0 65]
243,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 c0 65]
207,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 d0 65]
451,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 e0 65]//丢65f0
222,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 00 66]
204,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 10 66]//丢6620,6630
385,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 40 66]
387,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 50 66]
318,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 60 66]//丢6670
389,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 80 66]
382,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 90 66]//丢66a0
386,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4b0 66]
206,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 d0 66]
从收到的数据中,可以看到最后两个字节是按序号递增的,这是airkiss客户端程序发出的数据,是数据帧的Identification(身份标识),以后简称ID。
以上共收到23帧数据,丢失14帧数据,丢包率为14/(14+32)=30%。丢失的数据是没法补回来的,但由于airkiss的数据是重复发送的,丢失的数据在后续会重发补回来,只是帧的ID发生了变化。这是算法的基本思想,这里存在一个问题,哪些数据是前面丢失的呢?这就需要给每个数据一个位置,举一个实例:现在需要接收psw的数据"1357",依据airkiss协议,密码数据需要收到连续的6个字节,分别代表:
[crc][index][data1][data2][data3][data4]
具体含义如下:
如图2所示,第1,2个字节有特殊的含义,尤其是第2个字节代表了这4个字节的数据在整个数据中的Index。基于帧序的UDP数据重组算法只要求第1,2接收正确,再加上一个数据位正确。而原来的airkiss协议要求连续6位数据全部正确,新算法通过累积填充数据字节的方式,大大提高了数据的有效性。
将第1,2个字节填入[crc][index],其后的数据通过数据帧ID和[index]的ID相减,如果差值在4的范围内,则认为是一个有效数据,并填入对应的数据位置。当所有4个数据位置完全填入后,验算crc,完成数据接收。
还是以打印的airkiss数据为例:
222,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 00 66]
204,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 10 66]//丢6620,6630
385,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 40 66]
387,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 50 66]
318,[08 42 00 00 ff ff ff ff ff ff b0 e2 35 06 59 98 00 0a f5 86 6dd4 60 66]//丢6670
这里第1,2个字节为222和204,有效数据为[crc]=0x12,[index]=0,数据385的ID是6640,与[index]的ID相差3,所以这是data3,同理,387是data4,318已经不是有效数据。
这一次数据位置填充结果为[crc:12][index:0][data1][data2][data3:35][data4:37]。
如果后续再能获取到data1和data2,数据就算获取完整,做crc验证OK。
基于帧序的UDP数据重组算法主要用在图4的第4步process_sequence中,对于AP的ssid和psw数据的接收。
如图5所示,一种基于帧序的UDP数据重组方法,处理流程具体如下:
(1)airkiss_recv接收客户端发送过来的数据,在接收到guide code后,Lockchannel(参考图4airkiss数据处理和状态图中的序号1和2),此后会调用airkiss_filter过滤数据,只接收和guide code帧相同mac地址的帧(发送端mac地址,发送路由器mac地址,接收端mac地址)。
(2)对数据有效性进行判断,原算法要求连续6个字节满足sequence的数据规则(参考图2:ssid和psw数据字段定义),希望一次性接收完四个数据字节,并进行crc校验,在复杂网络环境中成功率很低。
新算法分多次去接收这四个数据字节,只需要第1、2以及3-6中的任一个数据一共3个数据满足协议规定,就认为是一次有效的数据。
(3)第2个字节index代表了seq数据组的序号(0-need_seq)。这次收到的数据将放置到seq_data[index]中。seq_data[index]共6个字节,第1个字节代表了这一数据组的crc校验和,第2个字节index,第3-6个字节是数据,待4个数据全部收全后进行校验。
(4)依次查看其后的4个数据位,先将数据所处的帧序号frame_id和index的frame_id相减,如果范围是1-4之内,就是有效的数据,放置到对应的seq_data[index][id]中。(发送端发送数据时是连续发送的,所以frame_id是连续的)。
(5)将index所在的数据组,进行crc检验,并判断index数据组是否全部收集。(seq_data[index]所有的数据不为0表明数据已全部收集)。
(6)如果index数据组的数据未全部收集,或者crc校验未通过。继续到第(1)步接收数据。
(7)如果index数据组的数据已经全部收集,并且crc校验通过,代表index数据组OK。
(8)查看是否0-need_seq,一共need_seq的数据是否全部OK。
(9)还有一些数据组没有收全数据,继续到第(1)步接收数据。
(10)0-need_seq所有的数据全部OK,存入ssid和psw数组,写入到wpa_supplicant.conf文件,并调用脚本连接网络。
本发明提供的一种基于帧序的UDP数据重组方法可用于guide code、magic code、prefix code数据的接收,具体如下:
1、guide code的接收:
原算法:收到连续的4个字节
data[3]-data[2]=1,data[2]-data[1]=1,data[1]-data[0]=1
基于帧序的UDP数据重组方法:
情形1:只收到数据1、2、4,数据3漏收了
data[1]-data[0]=1,data[2]-data[1]=2,
id[1]-id[0]=1,id[2]-id[1]=2;
在这里,虽然漏掉了数据3,但通过引入frame_id参数,并且data[2]的frame id和data[1]的frame id相差2,我们明确知道漏掉了数据3。通过数据1、2、4就可以知道这里存在连续的4个字节,满足guide code的协议要求。
情形2:只收到数据1、3、4,数据2漏收了
data[1]-data[0]=2,data[2]-data[1]=1,
id[1]-id[0]=2,id[2]-id[1]=1;
同理,通过引入frame_id参数,我们明确知道漏掉了数据2。通过数据1、3、4就可以知道这里存在连续的4个字节,满足guide code的协议要求。
在原算法中,需要连续接收4个数据,一次收全。改进的算法增加了帧序frame id的参数,只需要接收到3个相关数据就可以了,大大增加了成功率。
2、magic code的接收:
原算法:收到连续的4个字节
(data[0]&0x01f0)==0x0000//第5-9位为0x0
(data[1]&0x01f0)==0x0010//第5-9位为0x1
(data[2]&0x01f0)==0x0020//第5-9位为0x2
(data[3]&0x01f0)==0x0030//第5-9位为0x3
基于帧序的UDP数据重组方法:
情形1:
(data[0]&0x01f0)==0x0000//第5-9位为0x0
(data[1]&0x01f0)==0x0010//第5-9位为0x1
(data[2]&0x01f0)==0x0020//第5-9位为0x2
id[1]-id[0]=1,id[2]-id[1]=1
情形1接收到3个有效magic数据0、1、2,
magic_data[0]=data[0],magic_data[1]=data[1],magic_data[2]=data[2]
情形2:
(data[0]&0x01f0)==0x0000//第5-9位为0x0
(data[1]&0x01f0)==0x0010//第5-9位为0x1
(data[2]&0x01f0)==0x0030//第5-9位为0x3
id[1]-id[0]=1,id[2]-id[1]=2
情形2接收到3个有效magic数据0、1、3,
magic_data[0]=data[0],magic_data[1]=data[1],magic_data[3]=data[2]
情形3:
(data[0]&0x01f0)==0x0000//第5-9位为0x0
(data[1]&0x01f0)==0x0020//第5-9位为0x2
(data[2]&0x01f0)==0x0030//第5-9位为0x3
id[1]-id[0]=2,id[2]-id[1]=1
情形3接收到3个有效magic数据0、2、3,
magic_data[0]=data[0],magic_data[2]=data[1],magic_data[3]=data[2]
情形4:
(data[0]&0x01f0)==0x0010//第5-9位为0x1
(data[1]&0x01f0)==0x0020//第5-9位为0x2
(data[2]&0x01f0)==0x0030//第5-9位为0x3
id[1]-id[0]=1,id[2]-id[1]=1
情形4接收到3个有效magic数据1、2、3,
magic_data[1]=data[0],magic_data[2]=data[1],magic_data[3]=data[2]
当通过多轮接收,magic_data[0-4]收据接收完整后,做crc验证,确认是否收到连续4个maigc code。
在原算法中,需要连续接收4个数据,一次收全。改进的算法增加了帧序frame id的参数,接收到3个有效数据,将接收到的数据定位到发送时的顺序,多轮接收数据,大大增加了成功率。
3、prefix code的接收:
原算法:收到连续的4个字节
(data[0]&0x01f0)==0x0040//第5-9位为0x4
(data[1]&0x01f0)==0x0050//第5-9位为0x5
(data[2]&0x01f0)==0x0060//第5-9位为0x6
(data[3]&0x01f0)==0x0070//第5-9位为0x7
基于帧序的UDP数据重组方法:
情形1:
(data[0]&0x01f0)==0x0040//第5-9位为0x4
(data[1]&0x01f0)==0x0050//第5-9位为0x5
(data[2]&0x01f0)==0x0060//第5-9位为0x6
id[1]-id[0]=1,id[2]-id[1]=1
情形1接收到3个有效prefix数据0、1、2,
prefix_data[0]=data[0],prefix_data[1]=data[1],prefix_data[2]=data[2]
情形2:
(data[0]&0x01f0)==0x0040//第5-9位为0x4
(data[1]&0x01f0)==0x0050//第5-9位为0x5
(data[2]&0x01f0)==0x0070//第5-9位为0x7
id[1]-id[0]=1,id[2]-id[1]=2
情形2接收到3个有效prefix数据0、1、3,
prefix_data[0]=data[0],prefix_data[1]=data[1],prefix_data[3]=data[2]
情形3:
(data[0]&0x01f0)==0x0040//第5-9位为0x4
(data[1]&0x01f0)==0x0060//第5-9位为0x6
(data[2]&0x01f0)==0x0070//第5-9位为0x7
id[1]-id[0]=2,id[2]-id[1]=1
情形1接收到3个有效prefix数据0、2、3,
prefix_data[0]=data[0],prefix_data[2]=data[1],prefix_data[3]=data[2]
情形4:
(data[0]&0x01f0)==0x0050//第5-9位为0x5
(data[1]&0x01f0)==0x0060//第5-9位为0x6
(data[2]&0x01f0)==0x0070//第5-9位为0x7
id[1]-id[0]=1,id[2]-id[1]=1
情形1接收到3个有效prefix数据1、2、3,
此时prefix_data[1]=data[0],prefix_data[2]=data[1],prefix_data[3]=data[2]
当通过多轮接收,prefix_data[0-4]收据接收完整后,做crc验证,确认是否收到连续4个prefix code。
在原算法中,需要连续接收4个数据,一次收全。改进的算法增加了帧序frame id的参数,接收到3个有效数据,将接收到的数据定位到发送时的顺序,多轮接收数据,大大增加了成功率。
算法验证如下:算法在arm7的开发板上验证通过,采用算法前,airkiss配网成功率在5%左右,配网时间150-180秒。采用新算法后,airkiss配网成功率80%,配网时间10-60秒。显著的提供了airkiss配网成功率和极大缩短了配网时间。对于airkiss配网推广和应用有较大价值。
同时,算法也对无连接的UDP数据发送提供了一种参考,可以通过重复发送UDP数据,在接收端采用基于帧序的UDP数据重组算法接收数据,实现一种连接的效果。
下面通过采用改进算法实现airkiss配网的LOG,展示了算法运行的完整过程。
[+++++][69][0][71][72]//接收到guide code数据0,2,3
airkiss_recv_discover success
base len:68
Lock channel in 3//接收到guide code
[+++++]magic code:[8][0][36][54]//接收到magic code数据0,2,3
[+++++]magic code:[8][30][36][54]//接收到magic code数据0,1,2,3
airkiss_process_magic_code success//接收到magic code
total_len:20,ssid crc:4e//需要接收20个字节
[+++++]prefix code:[64][0][103][126]//接收到prefix的数据0,2,3
[+++++]prefix code:[64][90][103][126]//接收到prefix的数据0,1,2,3
airkiss_process_prefix_code success//接收到prefix code
pswd_len:10,pswd_lencrc:7e,need seq:5,seq map:1f//需要接收5个数据片段,每次4字节
[+++++][crc:12][index:00][00,33,00,37]//index 0:收到第2,4字节
[+++++][crc:41][index:03][00,6e,67,77]//index 3:收到第2,3,4字节
[+++++][crc:6e][index:02][00,30,00,7a]//index 2:收到第2,4字节
[+++++][crc:41][index:03][65,6e,67,77]//index 3:收到第1,2,3,4字节
[+++++]crc ok//index 3ok
[+++++][crc:4a][index:04][75,6a,75,00]//index 4:收到第1,2,3字节
[+++++][crc:6e][index:02][00,30,c3,7a]//index 2:收到第2,3,4字节
[+++++][crc:12][index:00][00,33,35,37]//index 0:收到第2,3,4字节
[+++++][crc:72][index:01][39,00,34,36]//index 1:收到第1,2,3字节
[+++++][crc:6e][index:02][38,30,c3,7a]//index 2:收到第1,2,3,4字节
[+++++]crc ok//index 2ok
[+++++][crc:72][index:01][39,32,34,36]//index 1:收到第1,2,3,4字节
[+++++]crc ok//index 1ok
[+++++][crc:4a][index:04][75,6a,75,6e]//index 4:收到第1,2,3,4字节
[+++++]crc ok//index 4ok
[+++++][crc:12][index:00][31,33,35,37]//index 0:收到第1,2,3,4字节
[+++++]crc ok//index 0ok
User data is:31 33 35 37 39 32 34 36 38 30c3 7a 65 6e 67 7775 6a 756e 00
Airkiss completed.
Result:
ssid_crc:[4e]
key_len:[10]
key:[1357924680]
random:[0xc3]
ssid_len:[9]
ssid:[zengwujun]。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (3)
1.一种基于帧序的UDP数据重组方法,其特征在于:基于互联网UDP协议数据帧发送的有序性,以及airkiss配网协议数据发送的重复性,在数据发送端重复发送UDP数据,在数据接收端基于发送帧的序号,将接收的数据匹配到数据发送时的位置,进行数据重组,实现数据完整、连续的接收。
2.根据权利要求1所述的基于帧序的UDP数据重组方法,其特征在于:通过累积填充数据字节的方式进行数据重组。
3.根据权利要求1所述的基于帧序的UDP数据重组方法,其特征在于:包括以下步骤:
(1)airkiss_recv接收客户端发送过来的数据,在接收到guide code后,调用airkiss_filter过滤数据,只接收和guide code帧相同mac地址的帧,包括发送端mac地址,发送路由器mac地址,接收端mac地址;
(2)对数据有效性进行判断,分多次接收数据,如果第1、2以及3-6中的任一个数据一共3个数据满足协议规定,则是一次有效的数据;
(3)第2个字节index代表了seq数据组的序号0-need_seq,将这次收到的数据放置到seq_data[index]中,seq_data[index]共6个字节,第1个字节代表了这一数据组的crc校验和,第2个字节index,第3-6个字节是数据,待4个数据全部收全后进行校验;
(4)依次查看其后的4个数据位,先将数据所处的帧序号frame_id和index的frame_id相减,如果范围是1-4之内,就是有效的数据,放置到对应的seq_data[index][id]中;
(5)将index所在的数据组,进行crc检验,并判断index数据组是否全部收集,seq_data[index]所有的数据不为0表明数据已全部收集;
(6)如果index数据组的数据未全部收集,或者crc校验未通过,继续到第(1)步接收数据;
(7)如果index数据组的数据已经全部收集,并且crc校验通过,代表index数据组接收成功;
(8)查看是否0-need_seq,一共need_seq的数据是否全部接收成功;
(9)如果还有一些数据组没有收全数据,继续到第(1)步接收数据;
(10)0-need_seq所有的数据全部OK,存入ssid和psw数组,写入到wpa_supplicant.conf文件,并调用脚本连接网络。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910144422.9A CN109922057A (zh) | 2019-02-27 | 2019-02-27 | 基于帧序的udp数据重组方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910144422.9A CN109922057A (zh) | 2019-02-27 | 2019-02-27 | 基于帧序的udp数据重组方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109922057A true CN109922057A (zh) | 2019-06-21 |
Family
ID=66962548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910144422.9A Pending CN109922057A (zh) | 2019-02-27 | 2019-02-27 | 基于帧序的udp数据重组方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109922057A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101030842A (zh) * | 2006-03-03 | 2007-09-05 | 华为技术有限公司 | 移动通信***中数据的重排方法及其装置 |
CN105187440A (zh) * | 2015-09-26 | 2015-12-23 | 北京暴风科技股份有限公司 | 使用udp协议传输视频数据的方法及*** |
CN106027631A (zh) * | 2016-05-12 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 一种数据传输方法及装置 |
CN106686410A (zh) * | 2015-11-09 | 2017-05-17 | 中国电信股份有限公司 | Hls流媒体传输方法以及装置 |
CN107104911A (zh) * | 2017-04-06 | 2017-08-29 | 清华大学 | Udp数据包的分割方法和发送方法 |
CN107276877A (zh) * | 2017-08-07 | 2017-10-20 | 深圳酷旗互联网有限公司 | 一种基于微信Airkiss的智能设备的控制方法及装置 |
JP2018170770A (ja) * | 2018-06-01 | 2018-11-01 | 株式会社インフォシティ | コンテンツ配信システム |
CN109219045A (zh) * | 2018-09-17 | 2019-01-15 | 北京奇艺世纪科技有限公司 | 一种路由器连接方法、装置、电子设备及*** |
JP3220180U (ja) * | 2018-08-21 | 2019-02-21 | 嶺南師範学院 | Airkiss技術に基づく家庭用ペット給餌器システム |
CN109379355A (zh) * | 2018-10-11 | 2019-02-22 | 无锡威孚力达催化净化器有限责任公司 | 基于udp协议的自适应可靠多窗口数据传输方法 |
-
2019
- 2019-02-27 CN CN201910144422.9A patent/CN109922057A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101030842A (zh) * | 2006-03-03 | 2007-09-05 | 华为技术有限公司 | 移动通信***中数据的重排方法及其装置 |
CN105187440A (zh) * | 2015-09-26 | 2015-12-23 | 北京暴风科技股份有限公司 | 使用udp协议传输视频数据的方法及*** |
CN106686410A (zh) * | 2015-11-09 | 2017-05-17 | 中国电信股份有限公司 | Hls流媒体传输方法以及装置 |
CN106027631A (zh) * | 2016-05-12 | 2016-10-12 | 腾讯科技(深圳)有限公司 | 一种数据传输方法及装置 |
CN107104911A (zh) * | 2017-04-06 | 2017-08-29 | 清华大学 | Udp数据包的分割方法和发送方法 |
CN107276877A (zh) * | 2017-08-07 | 2017-10-20 | 深圳酷旗互联网有限公司 | 一种基于微信Airkiss的智能设备的控制方法及装置 |
JP2018170770A (ja) * | 2018-06-01 | 2018-11-01 | 株式会社インフォシティ | コンテンツ配信システム |
JP3220180U (ja) * | 2018-08-21 | 2019-02-21 | 嶺南師範学院 | Airkiss技術に基づく家庭用ペット給餌器システム |
CN109219045A (zh) * | 2018-09-17 | 2019-01-15 | 北京奇艺世纪科技有限公司 | 一种路由器连接方法、装置、电子设备及*** |
CN109379355A (zh) * | 2018-10-11 | 2019-02-22 | 无锡威孚力达催化净化器有限责任公司 | 基于udp协议的自适应可靠多窗口数据传输方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103945369B (zh) | 一种通过检查wifi数据包的长度实现wifi设备的上网配置方法 | |
CN103765848B (zh) | 用于媒体访问控制替换的装置和方法 | |
EP1594284B1 (en) | MAC header compression for use with frame aggregation | |
CN100571124C (zh) | 防止重放攻击的方法以及保证消息序列号不重复的方法 | |
EP2288195A2 (en) | Method and apparatus for reducing overhead for integrity check of data in wireless communication system | |
CN101156351A (zh) | 一种密钥更新方法及装置 | |
CN105119900B (zh) | 信息安全传输方法、联网接入方法及相应的终端 | |
CN106452688A (zh) | 一种北斗数据缺报重传方法及*** | |
CN110392998B (zh) | 一种数据包校验方法及设备 | |
CN107682859A (zh) | 消息处理方法及相关设备 | |
CN108924827A (zh) | 一种无线网络的快速接入方法及*** | |
CN106878324A (zh) | 短信认证方法、短信认证服务器及终端 | |
CN102045714A (zh) | 提供3gpp网络与无线局域网互通安全的方法和装置 | |
RU2509445C2 (ru) | Способ и устройство для уменьшения служебных данных для проверки целостности данных в беспроводной системе связи | |
CN106911428B (zh) | 信息的传输方法和装置 | |
JP5494995B2 (ja) | ローカルドメイン名を取得するための方法、装置、およびシステム | |
CN105120454A (zh) | 信息传输方法、联网接入方法及相应的终端 | |
Vanhoef | A time-memory trade-off attack on WPA3's SAE-PK | |
CN102685746A (zh) | 一种对移动设备验证的方法、装置及*** | |
CN109922057A (zh) | 基于帧序的udp数据重组方法 | |
WO2018214070A1 (zh) | 译码的方法和装置 | |
CN103095451B (zh) | 一种在传感器网络中进行认证的方法和传感器网络 | |
CN100579013C (zh) | 一种全球接入互操作网络的接入认证***及方法 | |
CN110417804A (zh) | 一种适于单片机实现的双向身份认证加密通信方法及*** | |
WO2020103159A1 (zh) | 一种报文收发方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20210223 |
|
AD01 | Patent right deemed abandoned |