[发明专利]一种有效检测重传数据包丢失并预防重传超时方法在审
申请号: | 201810432428.1 | 申请日: | 2018-05-08 |
公开(公告)号: | CN108650064A | 公开(公告)日: | 2018-10-12 |
发明(设计)人: | 汪海涛;万文凯;姜瑛;陈星 | 申请(专利权)人: | 昆明理工大学 |
主分类号: | H04L1/16 | 分类号: | H04L1/16;H04L1/18 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 650093 云*** | 国省代码: | 云南;53 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 重传 重传数据包 超时 有效检测 发送端 触发 网络吞吐率 发送端的 网络环境 移动网络 丢包率 接收端 遍历 预防 返回 检测 保证 | ||
1.一种有效检测重传数据包丢失并预防重传超时方法,其特征在于:包括如下步骤:首先在发送端获取接收端返回给发送端的每一个SACK;然后遍历SACK的每一段,比较与前一个SACK段的差别;最后根据上一步的比较结果判断重传数据包是否丢失,如果断定为丢失那么触发再次重传,且防止重传超时。
2.根据权利要求1所述的有效检测重传数据包丢失并预防重传超时方法,其特征在于:具体步骤如下:
Step1:在发送端的Linux内核处理SACK前截获接收端返回给发送端的每一个SACK;
Setp2:检测SACK的标志位flag,在Linux内核中,SACK的flag代表了对应数据包的状态;
Step3:将SACK的标志位flag与Linux内核中的数据包标志位表达式FLAG_NOT_DUP orFLAG_SND_UNA_ADVANCED or FLAG_DATA_SACKED做逻辑与操作,FLAG_NOT_DUP表示收到的SACK不是一个重复SACK,FLAG_SND_UNA_ADVANCED表示收到的SACK更新了接收窗口—Awnd的起始序号,FLAG_DATA_SACKED表示SACK确认了新的数据包,如果逻辑与的条件为真,则表示当前SACK和收到的上一个SACK完全一样,意味着重传数据包可能丢失,那么进入Step4做进一步的判断;如果逻辑与的条件为假,那么代表该SACK是正常的,不需要进行处理,所以跳转到Step11,直接交给Linux内核按照正常流程进行重传数据包检查;
Step4:由Step3知道,该SACK为不正常SACK,于是调用内核函数tcp_for_write_queue_from遍历发送端缓存snd_mem,每次传送一个snd_mem数据包的指针_skb给Step5处理,判断是否需要被重传;
Step5:如果当前snd_mem的数据包大于snd_mem记录的最高已发送序号highest_sack_sequence,表示已经遍历完snd_mem,于是跳转到Step11;如果当前snd_mem的数据包小于等于snd_mem记录的最高已发送序号highest_sack_sequence,表示snd_mem还没有遍历结束,于是跳转到Step6对当前数据包做进一步的判断;
Step6:如果当前数据包已经被SACK过了,表示该数据包已经被接收端收到了,不需要重传,那么不做任何处理跳转到Step4继续遍历snd_mem;如果该数据包没有被SACK,那么表示该数据包可能丢失了,需要被重传,于是跳转到Step7判断重传一个数据包需要的标志是否都已打上;
Step7:判断数据包有没有被标记为丢失,如果有打上TCPCB_LOST标记,代表Linux内核已经标记为丢失了,不需要进行处理,所以跳转到Step9继续判断重传一个数据包的其他条件是否满足;但是如果没被标记,就需要给该数据包打上TCPCB_LOST标记,因为不打TCPCB_LOST标记,Linux内核会认为该数据包没有丢失,也就不会进行重传,这样接收端就一直收不到这个丢失的数据包,直到超时重传;
Step8:给数据包打上TCPCB_LOST标记,然后跳转到Step9继续判断是否满足重传的条件;
Step9:如果打了TCPCB_SACKED_RETRANS标记,表示该数据包已经被重传过,不管数据包是否再次丢失,Linux内核都不会再重传该数据包,所以如果Linux内核没有给该数据包标记TCPCB_SACKED_RETRANS,表示该数据包会被重传,不需要做任何处理,直接跳转到Step4继续遍历snd_mem;如果数据包被标记了TCPCB_SACKED_RETRANS,那么跳转到Step10继续处理;
Step10:将数据包的TCPCB_SACKED_RETRANS标记位清除掉,然后跳转到Step4继续遍历snd_mem;
Step11:正常的SACK或者是经过处理后的异常SACK最后都会被递交给重传函数,按照正常的Linux内核流程处理,然后重传需要被重传的数据包。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于昆明理工大学,未经昆明理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810432428.1/1.html,转载请声明来源钻瓜专利网。
- 上一篇:农机自动驾驶ISOBUS功能的应用
- 下一篇:基于窗口的流式数据缺失处理方法