一种网元间通信时制造技术

技术编号:39874554 阅读:7 留言:0更新日期:2023-12-30 12:59
本发明专利技术公开了一种网元间通信时

【技术实现步骤摘要】
一种网元间通信时TCP粘包的处理装置及方法


[0001]本专利技术属于移动通信
,涉及基带处理单元与射频拉远单元间的通信问题,特别是涉及一种网元间通信时
TCP
粘包的处理装置及方法


技术介绍

[0002]目前,新一代的

用于完成网络覆盖的主流产品为分布式基站

其特征表现为将基带处理单元

扩展单元

射频拉远单元分离,且基于光纤连接以及通信,实现灵活组网

应用场景的不同,决定了基带处理单元

扩展单元

射频拉远单元的组网方式

基带处理单元可通过多个光口连接多个扩展单元或射频拉远单元,扩展单元可通过多个光口连接多个扩展单元或射频拉远单元

为方便不同网元间的协同管控,网元间需采用同一种通信机制

[0003]TCP(Transmission Control Protocol)
传输控制协议是可靠的

基于字节流的传输层通信协议,虽然能提供可靠的端到端连接,但是由于
TCP
传输延迟

缓冲区限制

接收端接收延迟

网络拥塞等原因,发送端可能先将多个应用层数据小包封装成一个数据大包后再发送给接收方,接收方难以感知

该问题会导致业务层面关键信息丢失

业务心跳不正常等其他交互异常情况的发生


技术实现思路

[0004]针对上述现有技术中存在问题,本专利技术的目的是提供一种网元间通信时
TCP
粘包的处理方法及装置,旨在保证网元接收端能够接收到有序

连续

完整的应用层消息,以解决
TCP
粘包带来的业务数据丢失

拓扑连接异常等问题

[0005]为实现上述目的,本专利技术所采用的技术方案为:
[0006]一种网元间通信时
TCP
粘包的处理方法,包括:
[0007]步骤一:基带处理单元和射频拉远单元建立
TCP
连接后,射频拉远单元将接收的数据包放入队列的头部;
[0008]步骤二:射频拉远单元从队列尾部取出数据包,将数据包拼接至缓冲区的尾部;
[0009]步骤三:比较消息头和缓冲区报文的长度,若前者小于后者且缓冲区包含完整消息头,则解析缓冲区报文,获取消息体长度,反之则从队列中取出下一个数据包拼接至缓冲区尾部后重新比较;
[0010]步骤四:比较消息体和缓冲区报文长度,若前者小于后者,获取完整消息体并将处理后的消息体从缓冲区删除,反之则从队列尾部取出下一个数据包拼接至缓冲区尾部后重新比较消息头与缓冲区报文长度;
[0011]步骤五:缓冲区的数据处理完毕后将对应的队列里数据包从队列尾部删除

[0012]建立连接前,需将发送端与接收端业务网卡的最大传输单元
MTU(Maximum Transmission Unit)
设置为相同,缓解网络报文拆包组包的情况

连接建立后,射频拉远单元每次都将接收的数据包从消息队列头部放入,不做其他影响数据接收的操作

[0013]射频拉远单元将数据接收和数据处理分为两个独立的线程,以异步的方式读取

处理数据包,保证数据包的稳定接收

对消息队列读取或写入数据时,需增加互斥锁,保证消息队列数据安全,避免出现脏读的情况

处理消息队列的线程优先级需高于填充消息队列的线程优先级,避免消息队列溢出的情况

[0014]上述消息队列为一种
FIFO
先进先出的数据结构,保证每次新接收到的数据包总是从消息队列的头部添加至消息队列中,每次都是从消息队列的尾部删除已处理的数据包,释放消息队列空间

[0015]射频拉远单元每次都从消息队列的尾部将数据包取出,拼接至缓冲区的尾部

初始缓冲区为空,则直接将数据包存至缓冲区中,后续数据包若需存至缓冲区则需拼接在当前非空缓冲区的尾部

当前缓冲区的数据结构为
String
类型的字符串,其内存空间可动态的扩大与缩小

该缓冲区被单线程内部访问,无需增加线程锁

[0016]当
TCP
连接存在时,射频拉远单元需周期判断缓冲区的使用情况,若缓冲区不为空,则优先判断消息头长度与当前缓冲区报文长度

消息头设计为定长,其包含的数据报文包括但不限于网元间约定的校验字

消息体总长度

业务类型等

一个完整的消息体包含了消息头和业务数据,消息体的总长度应为消息头长度与业务数据长度之和

若消息头长度小于缓冲区报文长度,且在缓冲区中能够找到网元间约定的校验字第一次出现的位置,则从缓冲区中消息头第一次出现的位置按照消息头定长解析获取当前消息体的总长度

若消息头长度大于缓冲区报文长度,则重新从消息队列尾部顺序获取下一条待解析的数据包拼接至缓冲区尾部

将消息头中获取的消息体总长度与当前缓冲区报文长度进行比较,会出现以下三种情况:
[0017]情况一,消息体总长度大于当前缓冲区报文长度,表示该消息体不完整,该消息体的部分报文在下一个消息队列的数据包里

此时,需将消息队列的当前未处理完全的数据包删除,并将下一个数据包拼接至缓冲区尾部,分别重新校验消息头

消息体和缓冲区中报文的长度

[0018]情况二,消息体总长度等于当前缓冲区报文的长度,表示当前缓冲区里有一条完整的消息体,当前数据包无粘包情况,是个完整的数据包

从缓冲区中解析报文并做相应的业务处理后,将缓冲区中的报文清空,且将当前消息队列里的已处理的数据包删除,并将下一条待处理的数据包存放至缓冲区

[0019]情况三,消息体总长度小于当前缓冲区报文的长度,表示当前缓冲区的数据包有不止一条消息,出现了粘包的情况

此时,从缓冲区头部逐条解析完整的消息,并将已解析的报文从缓冲区头部删除

若缓冲区最后一条报文是完整的情况,即上述情况二,则在解析完最后一条报文后清空缓冲区,且从消息队列中删除当前已处理的消息队列中出现粘包的大数据包,并将下一条待处理的数据包存放至缓冲区

若缓冲区最后一条报文是不完整的情况,即上述情况一,需从消息队列删除当前未处理完的数据包,并将下一个数据包拼接至缓冲区尾部,分别重新校验消息头

消息体和缓冲区报文的长本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种网元间通信时
TCP
粘包的处理装置,其特征在于,包括:基带处理单元和射频拉远单元,网元之间通过光纤连接,光链路稳定后,通过
TCP
协议实现通信;所述射频拉远单元包括依次排列的数据包接收单元

消息队列

应用层报文缓冲区

消息头校验单元

消息体校验单元

数据处理单元和资源回收单元
。2.
根据权利要求1所述的一种网元间通信时
TCP
粘包的处理装置,其特征在于:一个正常的数据包,按照由上至下从数据包接收单元,到消息队列,到应用层报文缓冲区,再到消息头校验单元,再到消息体校验单元,再经过数据处理单元,再到资源回收单元的顺序,直至处理完成
。3.
根据权利要求1所述的一种网元间通信时
TCP
粘包的处理装置的处理方法,其特征在于,包括:步骤一:基带处理单元和射频拉远单元建立
TCP
连接后,射频拉远单元将接收的数据包放入队列的头部;步骤二:射频拉远单元从队列尾部取出数据包,将数据包拼接至缓冲区的尾部;步骤三:比较消息头和缓冲区报文的长度,若前者小于后者且缓冲区包含完整消息头,则解析缓冲区报文,获取消息体长度,反之则从队列中取出下一个数据包拼接至缓冲区尾部后重新比较;步骤四:比较消息体和缓冲区报文长度,若前者小于后者,获取完整消息体并将处理后的消息体从缓冲区删除,反之则从队列尾部取出下一个数据包拼接至缓冲区尾部后重新比较消息头与缓冲区报文长度;步骤五:缓冲区的数据处理完毕后将对应的队列里数据包从队列尾部删除
。4.
根据权利要求3所述的一种网元间通信时
TCP
粘包的处理方法,其特征在于:在建立连接前,需保持发送端和接收端业务网卡的最大传输单元
MTU
一致,射频拉远单元在接收基带处理单元发送的数据包后,直接将数据包放入队列中,及时释放
TCP
数据接收缓冲区空间,避免数据丢失
。5.
根据权利要求3所述的一种网元间通信时
TCP
粘包的处理方法,其特征在于:射频拉远单元将数据接收和数据处理分为两个独立的线程,以异步的...

【专利技术属性】
技术研发人员:徐青马丰超
申请(专利权)人:南京典格通信科技有限公司
类型:发明
国别省市:

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

1