左延智,王 娟,吳訓(xùn)吉,張宗鵬
(1.北京跟蹤與通信技術(shù)研究所,北京 100094;2.北京新宇航星科技有限公司,北京 100080)
在網(wǎng)絡(luò)通信中,網(wǎng)絡(luò)丟包是最常見的故障之一。丟包會引起網(wǎng)速降低甚至造成網(wǎng)絡(luò)中斷。網(wǎng)絡(luò)運維人員在日常的網(wǎng)絡(luò)維護過程中,必須做到“早發(fā)現(xiàn)”、“早解決”。通常會借助各種儀器儀表或網(wǎng)絡(luò)性能監(jiān)測系統(tǒng)檢測網(wǎng)絡(luò)丟包,檢測方法大致可分為兩類:主動測試和被動測試。主動測試是指測試設(shè)備向被測網(wǎng)絡(luò)中注入一定數(shù)量的網(wǎng)絡(luò)數(shù)據(jù)包,在接收端判斷是否丟包,各類網(wǎng)絡(luò)測試儀表都可以實現(xiàn)主動測試;被動測試是指測試設(shè)備通過捕獲網(wǎng)絡(luò)數(shù)據(jù)包,通過算法判斷丟包。主動測試遵循RFC2544測試標(biāo)準(zhǔn),測試儀表廣泛應(yīng)用。本文只探討被動測試算法,即在線丟包檢測算法及其解決方案,通過橫向比較和應(yīng)用場景分析,發(fā)現(xiàn)這些算法的長處和局限。
網(wǎng)絡(luò)丟包(Packet lost)在百度百科中有比較準(zhǔn)確的定義[1]:
定義1:丟包是指一個或多個數(shù)據(jù)包的數(shù)據(jù)無法透過網(wǎng)上到達(dá)目的地。
接收方可以直觀感覺到丟包,例如:圖像出現(xiàn)“馬賽克”或者報文顯示錯誤。但僅僅從通信結(jié)果來判斷是否丟包又是不夠嚴(yán)格的。例如:TCP 協(xié)議發(fā)現(xiàn)丟包時會自動請求重發(fā),使得通信完整,掩蓋了丟包。本文補充了上述定義:
定義2:丟包是相鄰的兩個數(shù)據(jù)包在一定時間范圍內(nèi)無法透過網(wǎng)絡(luò)都到達(dá)目的地,或者不能保持原有次序。
定義2首先增加了時間限制,如果數(shù)據(jù)包不能在指定的時間期限內(nèi)到達(dá)目的地,也被定義為“丟包”。其次增加了先后次序限制。在網(wǎng)絡(luò)傳輸中路由器可以自主選擇最合適的路由,數(shù)據(jù)包到達(dá)目的地時有可能前后顛倒形成“錯序”。
圖1 舉例說明丟包和錯序示意圖
例如:源方發(fā)送了6個數(shù)據(jù)包,目的方實際接收次序是:第一、第二、第四、第六、第六、第五、第三包,如圖1所示。操作系統(tǒng)會在協(xié)議棧中自動調(diào)整次序,通信成功。從用戶角度似乎沒有丟包。但是根據(jù)定義2,我們認(rèn)為出現(xiàn)了2次“丟包”,2次“錯序”,1次“重包”。
在航天業(yè)務(wù)網(wǎng)中,實時通信是最常見的通信方式,例如:觀測設(shè)備連續(xù)獲得了目標(biāo)的6個位置數(shù)據(jù),傳送給接收方。如果在通信過程中次序錯亂,即使在接收方收滿了這6個位置數(shù)據(jù),也恢復(fù)了先后次序,但已經(jīng)延誤了接收方的實時狀態(tài)獲取。因此,必須監(jiān)測這些特殊意義的丟包。
丟包檢測算法分為離線檢測和在線檢測兩大類:
(1)離線檢測就是主動測試,計算公式如下:
例如:傳統(tǒng)的ping 命令發(fā)送3個ICMP 協(xié)議數(shù)據(jù)包給目的地設(shè)備,經(jīng)對方反饋可以得到丟包情況和時延參數(shù)。更精細(xì)的是用測試儀表,指定包頻、包長、發(fā)包數(shù)量或時間等參數(shù),模擬網(wǎng)絡(luò)通信場景,檢測丟包和測量時延。
(2)在線檢測為被動測試。需要搭建一套丟包監(jiān)測系統(tǒng),即網(wǎng)絡(luò)性能監(jiān)測系統(tǒng),包括了一個管理中心和若干臺探針,探針會遠(yuǎn)程部署在各個重要的節(jié)點,例如核心交換機、路由器等處。
本文對各種在線丟包檢測算法進行探討,分析彼此優(yōu)劣,為實際工作中的丟包檢測提供建議。
根據(jù)判斷丟包的位置算法可分為兩類:第一類在管理中心匯總和判斷;第二類由探針直接檢測。
最理想的檢測算法基于特殊的部署方案。
2.1.1 監(jiān)測設(shè)備的部署
算法實現(xiàn)需要部署至少3-4臺探針和1套管理中心,部署示意圖如圖2所示:
探針1部署在源端的第一臺交換機處,探針2部署在目的端的最后一臺交換機處;在沿途的第i 臺交換機部署探針3、第j 臺交換機部署探針4;部署一個管理中心,用于接收各臺探針上報的監(jiān)測結(jié)果,綜合處理得到丟包檢測結(jié)果。
2.1.2 算法核心步驟
(1)每臺探針都按照一定時間間隔將捕獲的數(shù)據(jù)包摘要列表上報到管理中心。
圖2 算法一監(jiān)測設(shè)備部署示意圖
(2)在管理中心從探針1的列表1中依次取出一個數(shù)據(jù)包,在探針2的最終序列2中檢查是否包含。
如果未包含,則表示丟失了該數(shù)據(jù)包,檢查探針3、探針4的列表中是否包含,從而確定丟失位置;
說明:此處丟包采用了定義2 中的時間限制(時間間隔)。超出這個間隔,即使探針2收到了,也被判為丟包。
2.1.3 算法特點
(1)算法優(yōu)勢:丟包檢測完整,不會遺漏;各種協(xié)議均適合。
(2)算法劣勢:對部署位置有嚴(yán)格要求。如果需要同時監(jiān)視多組源端和目的端,就難以滿足。
為了去除部署位置的嚴(yán)格要求,提出了通用協(xié)議在線丟包檢測算法(簡稱“算法二”)。在圖3中,舉例描述了一個應(yīng)用部署場景,選擇網(wǎng)絡(luò)中任意3臺交換機或路由器的鏡像端口部署3臺探針。
圖3 算法二監(jiān)測設(shè)備部署示意圖
本算法用到了IP 協(xié)議頭結(jié)構(gòu)中的ID(16位標(biāo)識)字段。例如:圖4顯示了算法二的一個應(yīng)用場景。
圖4 算法二各個探針I(yè)D序列示意圖
可以大致推測路由器的順序是探針1、探針3、探針2,因為同一個ID 值(122,123,125,135,137等),時間戳滿足這個順序的概率最大;推測發(fā)送方的ID 序列為左側(cè)的列表;ID 值=129的數(shù)據(jù)包在序列2中丟失。
2.2.1 算法的核心步驟
(1)每臺探針都按照一定間隔將捕獲的數(shù)據(jù)包ID 值及時間戳序列上報管理中心。
(2)在管理中心按照時間戳先后出現(xiàn)的概率大小排出路由先后次序。時間戳越小的越靠前。
(3)從排序最靠前的序列中依次取出一個數(shù)據(jù)包,在排序最靠后的序列中檢查是否包含該數(shù)據(jù)包。如果未包含,則表示丟失了該數(shù)據(jù)包,繼續(xù)確定丟失位置。
2.2.2 算法特點
(1)算法優(yōu)勢:各種協(xié)議均適合;對部署位置無要求,自動推導(dǎo)路由順序。
(2)算法劣勢:占用帶寬較大,源端每發(fā)送一個數(shù)據(jù)包,探針都需要上報一個數(shù)據(jù)項,有多少探針就擴大多少倍;無法做到檢測每一個丟包。因為算法基于推導(dǎo)的最早路由探針,如果最早探針已經(jīng)丟包就無法檢測。
考慮到丟包是一種小概率事件,具有偶發(fā)性的特點,提出了改進型重點丟包檢測算法(算法三)。
2.3.1 算法三由三個部分組成
(1)重點在線檢測(自動模式)。由網(wǎng)絡(luò)管理人員圈定一個重點監(jiān)測范圍,監(jiān)測系統(tǒng)對此重點監(jiān)測,檢測方法是算法二。
(2)人工檢索丟包信息(手動模式)。如果在重點監(jiān)測范圍之外用戶反饋丟包了,則由管理中心下發(fā)命令,各個探針將丟包附近時間段內(nèi)的所有數(shù)據(jù)上報,在管理中心進行逐個比較,得到丟包的位置等信息。
(3)輔助查找丟包(半主動模式)?!盁o一遺漏”地全面檢查所有的測試流,按照一定策略例如:優(yōu)先檢索流量大的測試流;或者優(yōu)先檢索包頻最快的測試流等,依次對測試流進行“全覆蓋”。
2.3.2 算法的核心操作
(1)選擇任何一個探針作為輔助者,上報過去一段時間內(nèi)該測試流的ID 序列、時間戳及數(shù)量等信息。
(2)管理中心將包數(shù)量、第一個ID 值及時間戳、最后一個ID 值及時間戳下發(fā)給其他探針;
(3)各個探針比較兩個ID 值間的包數(shù)量,如果相同,則沒有丟包;如果不同,則上報本地的ID 值及時間戳序列。
(4)在管理中心采用算法二確定是否丟包,以及丟包位置。
“輔助查找丟包”還可以調(diào)整檢索策略,先加大檢索的時間范圍,類似于快速粗掃描。如果某臺探針發(fā)現(xiàn)了丟包,再縮小時間范圍,進入精細(xì)掃描,采用算法二,確定丟包位置。對于每一個測試流,在網(wǎng)絡(luò)上只上傳一次ID 值序列,向其他探針下發(fā)的命令和上報的結(jié)果都很小,對網(wǎng)絡(luò)影響不大。
2.3.3 算法三的特點
一是自動模式下可以在線監(jiān)測重點測試流,數(shù)量、范圍可控;二是手動模式下可以較快地相應(yīng)用戶的關(guān)切;三是半主動模式下算法以粗掃描方式盡最大可能覆蓋所有的測試流,盡最大努力跟上網(wǎng)速。
在很多實時傳輸協(xié)議中都有包序號字段,連續(xù)發(fā)送的數(shù)據(jù)包其包序號也連續(xù),可以充分利用此特點。
實時在線丟包檢測算法(算法四)在捕獲數(shù)據(jù)包的同時就能檢測出是否丟包。
如果序號差等于1,表示沒有丟包;否則丟包,計算丟包數(shù)。探針檢測到丟包后上報管理中心,管理中心匯總就可以知道最早丟失數(shù)據(jù)包的位置在哪一臺探針處。
在航天信息網(wǎng)中,為了通信安全在源端和目的端之間增加了編碼設(shè)備和解碼設(shè)備,例如:保密機。如圖5所示。探針1處在編碼之前,探針2處在解碼之后,可以解析得到包序號。探針3、探針4處都已編碼(加密),不能解析,無法執(zhí)行算法四判斷是否丟包。
圖5 算法五監(jiān)測設(shè)備部署示意圖
算法五的核心操作:一是如果探針2發(fā)現(xiàn)丟包,上報管理中心;二是由管理中心下發(fā)命令給4臺探針,要求上報丟包時間前后的所有數(shù)據(jù)包的ID值序列;三是在管理中心逐個比較4個ID值序列,就可以確定丟包的數(shù)量、丟包位置等信息。
在 TCP/IP 分 層 中, 數(shù) 據(jù) 鏈 路 層 用 MTU(Maximum Transmission Unit,最大傳輸單元)來限制所能傳輸?shù)臄?shù)據(jù)包大小。當(dāng)發(fā)送的IP 數(shù)據(jù)報的大小超過了MTU 時,IP 層就需要對數(shù)據(jù)進行分片[3]。探針可以根據(jù)標(biāo)志位、片偏移之間的關(guān)系直接判斷是否丟失了分片包或者是第一包。
算法六的特點:一是算法很簡單,在探針就可以完成,判斷是否丟包;二是如果丟失最后一個分片,就會導(dǎo)致接收超時,需要特殊處理;三是如果丟失第一個分片,偏移量不能從0開始,不能解析應(yīng)用層協(xié)議。
以上提出了6個在線檢測丟包的算法,比較如表1所示:
表1 算法比較
由此得出如下結(jié)論:一是在RTP 之類實時協(xié)議占多數(shù)的網(wǎng)絡(luò)中,使用算法四和五,用包序號判斷丟包,快速可靠;二是如果網(wǎng)絡(luò)帶寬足夠,建議使用算法二,對任何協(xié)議均可判斷丟包,適合復(fù)雜網(wǎng)絡(luò);三是如果網(wǎng)絡(luò)帶寬比較緊張,可以使用算法三,粗掃描與細(xì)掃描相結(jié)合;四是如果網(wǎng)絡(luò)中有大包,則必須使用算法六,檢測分片丟包。由此可見,還是應(yīng)當(dāng)根據(jù)網(wǎng)絡(luò)實際情況和應(yīng)用需求,靈活選擇丟包檢測算法。