[發明專利]一種有效檢測重傳數據包丟失并預防重傳超時方法在審
| 申請號: | 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.szxzyx.cn/pat/books/201810432428.1/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:農機自動駕駛ISOBUS功能的應用
- 下一篇:基于窗口的流式數據缺失處理方法





