一種消除位置誤差的網絡時延測量方法及系統的制作方法
【專利摘要】本發明涉及一種消除位置誤差的網絡時延測量方法及系統,該方法在端主機Windows操作系統的微端口驅動和協議驅動間插入一個NDIS中間層驅動程序,將測量時間戳的記錄位置從傳統應用程序下移到該中間層驅動,用戶空間的測量探針程序依據其記錄并返回的時間戳來計算網絡路徑的時延值(包括單向時延和往返時延),實現消除時延測量位置誤差。由于位置誤差受主機硬件性能、內核復雜度、系統負載、中斷響應、內核旋轉鎖、進程與線程調度等多因素的影響,特別受系統負載和進程/線程調度影響最大。本發明改進后的方法盡可能地讓測量過程的收/發數據包時間戳記錄位置接近測量主機網卡收/發包的時刻,從而消除主機本身處理數據包的時間消耗,即消除測量位置誤差。
【專利說明】一種消除位置誤差的網絡時延測量方法及系統
【技術領域】
[0001]本發明涉及一種互聯網絡時延主動測量誤差消除的方法,特別是經濟、高效的消除測量主機位置誤差的方法。本發明的【技術領域】是互聯網端到端性能測量與監控,具體涉及一種消除位置誤差的網絡時延測量方法及系統。
【背景技術】
[0002]在互聯網測量與監控領域,路徑時延是衡量網絡性能的關鍵參數之一,也是網絡丟包率、時延抖動、瓶頸帶寬等其它指標測量的基礎。精確的路徑時延測量是一個困難的問題,但它在網絡行為分析、性能監測、網絡應用設計等領域有著廣泛的應用。IETF組織的IP網絡性能指標工作組(IP Performance Metrics Working Group, IPPM)對路徑時延定義進行了標準化,將其分為往返時延和單向時延。國內外許多研究者針對路徑時延測量提出了大量的實現與改進方法,例如:基于多次正向和反向往返時延估計單向時延的測量方法,基于TCP的往返時延測量方法,基于組播的時延測量方法等等。路徑時延測量的誤差來源主要有兩種:一種是測量主機的時鐘不同步帶來的時鐘誤差;二是因為測量主機記錄的收/發包時間戳不是真實的到達/離開網卡的時刻而產生的位置誤差。這兩類誤差都會導致測量結果中包含由主機處理所帶來的測量誤差,會使評價網絡時延、時延抖動、帶寬等指標性能不準確。因此必須盡可能地消除這兩類誤差,提高路徑時延測量精度。
[0003]國內外目前的研究成果集中在解決測量主機時鐘不同步帶來的時鐘誤差的消除問題,依據同步時鐘源分為兩類:一類是基于外部時鐘源的同步,主要包括網絡時間協議(Network Time Protocol, NTP)、全球定位系統(Global Position System, GPS)、IEEE1588時鐘同步協議。另一類是基于端到端測量的時鐘同步,主要包括在線和離線兩種方式。例如:采用線性規劃算法、凸包算法、聚類算法等方法消除時鐘偏差取得了較為理想的結果,但這些方法都沒涉及測量位置誤差的消除。
[0004]同時針對因為測量主機記錄的收/發包時間戳不是真實的到達/離開網卡的時刻而產生的位置誤差問題,目前也有少量研究,主要包括:Endaceg公司生產的專用于數據包捕獲的DAG (Data Acquisition and Generation)采集卡,可以實現捕獲數據包的同時記錄時間戳,但這種方式硬件價格昂貴,不利于普遍部署,并且DAG主要用于高速鏈路的數據包捕獲,是網絡流量工程的基礎硬件,不適于網絡時延主動測量方式的應用;基于Linux環境在網卡驅動程序來記錄時間戳的方法,該方案需要較多地修改Linux網絡設備內核代碼并重新編譯內核,而且不能普遍適應各種類型的網卡Jcpdump等基于BPF的流量監測工具實現了在Linux系統的設備獨立層記錄收包時間戳,減少了收包的位置誤差,但沒有實現發送位置誤差的消除,也不適宜于主動的時延測量應用設計。
[0005]因此到目前為止,還沒有一種便捷的、經濟的、且適合于主動時延測量的位置誤差消除方法。
【發明內容】
[0006]本發明的目的在于,為克服現有技術在測量網絡延時時存在的位置誤差問題,本發明提供了一種消除位置誤差的網絡時延測量方法。
[0007]本發明的技術方案基于Windows平臺、且適宜于主動測量方式的網絡端到端時延測量位置誤差消除方法。
[0008]為實現上述目的,本發明提供了一種消除位置誤差的網絡時延值測量方法,該方法用于端到端的網絡時延測量,所述方法包含:
[0009]在一次往返測量過程中:
[0010]步驟101)源端主機記錄其向目的端主機發送數據包的時間戳信息tsend s ;
[0011]步驟102)目的端主機記錄其收到源端發送的數據包的時間戳信息t_v d,然后再記錄其向發送端回應數據包的時間戳信息t_ d ;
[0012]步驟103)源端收到目的端回應的數據包,并記錄其受到該回應數據包的時間戳信
自t./E、 ^recv—s ?
[0013]步驟104)采用如下公式計算端到端的單向和/或雙向網絡延時值:
[0014]路徑正向單向時延:F0WD=trav—d_tsend—s;
[0015]路徑反向單向時延:R0WD=trecvs-trespmse d ;
[0016]路徑往返時延:RTT=(trecv d-tsend s) + (trecv s_trespmse d);
[0017]其中,所述步驟101)、102)和103)通過在所述源端和目的端主機的Windows操作系統的微端口驅動和協議驅動間插入NDIS中間層驅動,該驅動層能夠記錄用于測量網絡延時的收/發數據包的時間戳信息。
[0018]上述技術方案中,當用于確定路徑正向延時值時上述方法具體包含如下子步驟:
[0019]步驟101)當NDIS中間層驅動截獲到一個數據封包時,檢測是否是測量數據包,如果是測量數據包,進入步驟102)進行位置誤差處理;否則直接發往微端口層;
[0020]步驟102)對測量數據包進行位置誤差處理,源端主機的NDIS中間層驅動把獲得的系統時間戳插入到待發送數據包負載中用戶數據段的頭4個字節,然后重新計算數據包校驗和,并將該新的封包發往微端口層;
[0021]步驟103)目的端主機的NDIS中間層驅動把獲得的系統時間戳減去發送端傳來的時間戳插入到數據包負載中用戶數據段的頭4個字節,并調用例程通知上層協議驅動;
[0022]步驟104)目的端測量應用程序從套接字接收緩沖區取回測量數據包,讀取頭4個字節便得到消除測量位置誤差的端到端路徑正向單向時延值。
[0023]上述技術方案中,所述收/發數據包的時間戳信息能夠利用內核例程返回的操作系統時鐘的計時獲取,或通過調用內核例程以CPU頻率計數獲取。
[0024]上述技術方案中,所述NDIS中間層驅動有兩種方式處理源端和目的端數據包的發送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據收到的包描述符重建一個新的包描述符,稱為重申請;
[0025]其中,所述NDIS中間層驅動獲得的網絡封包結構是一個單向鏈表,所述包描述符相當于整個鏈表的表頭指針。
[0026]上述技術方案中,所述步驟103)進一步包含如下子步驟:
[0027]步驟103-1)當目的端主機的物理網卡接收到一個數據包時,觸發中斷,中斷處理程序接管中斷后,調用網卡微端口驅動所注冊的中斷處理例程,微端口驅動把網卡收到的數據拷貝到微端口驅動緩沖區隊列;
[0028]步驟103-2)微端口驅動程序盡可能等待更多的數據包到達,并推遲一個隨機時間片后調用相應內核例程通知NDIS中間層驅動處理到達的數據包;
[0029]步驟103-3) NDIS中間層驅動把到達的數據包中的所有數據拷貝到一個連續的內存并進行下個步驟的封包處理;
[0030]步驟103-4) NDIS中間層驅動獲得目的端接收數據包記錄的時間戳信息,并讀取源端傳來數據包時的時間戳信息,然后將所述兩個時間戳信息做差并將差值重新寫到待回應的數據包;
[0031]步驟103-5) NDIS中間層驅動通知其上層的協議驅動,從套接字接收緩沖區取回待回應的數據包,即獲得一個消除測量位置誤差的端到端路徑正向的單向時延值。
[0032]基于上述方法本發明還提供了一種消除位置誤差的網絡時延值測量系統,該系統設置于網絡兩端的源端和目的端主機中,所述系統基于Windows平臺,包含:設置于微端口驅動層和協議驅動層之間的NDIS中間層驅動層,及位于應用層的測量探針模塊;其中:
[0033]NDIS中間層驅動層,用于檢測是否是測量數據包并在數據包的用戶數據段位置記錄用于測量網絡延時的收/發數據包的時間戳信息;
[0034]測量探針模塊,用于依據收到的NDIS中間層驅動層記錄的時間戳信息采用如下公式計算路徑正向延時值、路徑反向延時值或路徑雙向延時值;
[0035]路徑正向單向時延:F0WD=trav—d_tsend—s;
[0036]路徑反向單向時延:R0WD=trecvs-trespmse d ;
[0037]路徑往返時延:RTT=(trecv—d_tsend—s) + (trecv_s-tresponse_d);
[0038]其中,trecv_d表示源端存儲模塊記錄的發送時間戳,tsend_s表示目的端的存儲模塊記錄的接收數據包時間戳、t? d表示目的端存儲模塊記錄的其回應包的時間戳,trecv_s表示源端存儲模塊記錄的其收到回應包的時間戳。
[0039]上述技術方案中,所述NDIS中間層驅動層還包含:
[0040]數據包檢測模塊,用于當NDIS中間層驅動截獲到一個數據封包時,檢測是否是測量數據包,如果是測量數據包則進行位置誤差處理;否則直接發往微端口層。
[0041]封包模塊,用于對接收的測量數據包進行位置誤差處理,把獲得的系統時間戳或者計算得到的延時值插入到數據包負載中用戶數據段的字節中,然后重新計算數據包校驗和,并將該新的封包發往微端口層或通知上層協議驅動。
[0042]上述技術方案中,所述NDIS中間層驅動層有兩種方式處理源端和目的端數據包的發送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據收到的包描述符重建一個新的包描述符,稱為重申請;
[0043]其中,所述NDIS中間層驅動層獲得的網絡封包結構是一個單向鏈表,所述包描述符為整個鏈表的表頭指針。
[0044]與現有技術相比,本發明的技術優勢在于:
[0045]本發明所采用的方法在進行網絡時延測量時能夠高精度的消除測量方法不完善所帶來的位置誤差,且能夠適用于主動和被動模式的時延測量,不需要額外的硬件和軟件支持,成本很低,因此適合于普遍部署和應用。【專利附圖】
【附圖說明】
[0046]圖1是本發明基于windows NDIS中間層驅動實現時間戳記錄的方法模型;
[0047]圖2是本發明實現發送位置誤差消除的流程;
[0048]圖3是本發明實現接收位置誤差消除的流程;
[0049]圖4為在輕載條件下IMD-ping和ping的往返時延時序(包長1500字節)及穩定性;
[0050]圖5為在并發測量條件下MD-ping和ping的往返時延時序(包長1500字節)
及穩定性。
【具體實施方式】
[0051 ] 下面結合附圖對本發明的內容進行詳細說明。
[0052]本發明通過在Windows操作系統的微端口驅動和協議驅動之間插入一個NDIS中間層驅動程序,將測量時間戳的記錄位置從傳統應用程序下移到該中間層驅動,用戶空間的測量探針程序依據其記錄并返回的時間戳來計算網絡路徑的時延值,從而實現消除時延測量位置誤差。測量位置誤差分析及本發明方法的實現過程描述如下:
[0053](I)位置誤差分析
[0054]位置誤差主要包括:(1)內核驅動各層處理數據包的時間;(2)通信應用進程/線程間競爭CPU的排隊時間。如圖1所示為Windows系統的網絡體系結構及套接字通信過程,數據包在應用進程與物理網卡之間往返傳遞,經歷了用戶態DLL調用、系統調用及內核的多層處理。在應用進程記錄的數據包發送時間戳A,不是數據包被送到物理鏈路的真實發送時刻tsmd,而是提前了 Atsmd時間,即tsmd = ti+Δ tsendo在應用進程記錄的包接收時間戳t2,不是數據包從物理鏈路送到網卡的真實接收時刻t_v,而是滯后了 Λ trecv時間,即trecv=t2-Atrecvo主流的網絡時延測量程序(如ping程序)是使用的W它實際包含了主機發送和接收包的處理時間,即位置誤差為:Επγ。。= Δ tsend+ Δ trecv0
[0055]實際上,位置誤差Εηγ。。的值受主機硬件性能、內核復雜度、系統負載、中斷響應、內核旋轉鎖、進程與線程調度等多因素的影響,Επγ。。值可達到數十至數百毫秒,特別在大流量導致主機內核出現“中斷活鎖”的極端情況下,位置誤差可達到數百毫秒甚至無窮大。
[0056](2)發送位置誤差消除
[0057]在NDIS封包管理機制中,NDIS交給中間層驅動程序是一個結構為NDIS_PACKET的包描述符(NDIS Packet Descriptor, NPD)。中間層獲得的網絡封包結構是一個單向鏈表,包描述符相當于整個鏈表的表頭指針。這樣上層協議驅動程序調用NdisSend/NdisSendPackets內核例程請求NDIS發送數據包時,NDIS將調用中間層驅動實現的 MiniportSend/MiniportSendPackets 例程。此時,在中間層驅動的 MiniportSend/MiniportSendPackets例程中完成發送時間戳的記錄,算法如圖2。之后,中間層驅動再調用其實現的NdisSend/NdisSendPackets例程請求NDIS往下層發送數據包,NDIS便調用其下層的 Miniport Driver 的 MiniportSend/MiniportSendPackets 例程通過 NDIS 接口控制物理網卡,將數據發送出去。
[0058]在NDIS中間層驅動規范中,有兩種方式處理包發送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據收到的包描述符重建一個新的包描述符,稱為重申請。事實上,重申請包描述符并不需要對網絡數據包重建,所涉及內存操作少,可以忽略代價開銷。而在重利用方式下,需要調用內核例程NdislMGetCurrentPacketStack檢測當前驅動的棧空間是否可供利用,在沒有剩余空間的情況下必須轉入重申請。在大量通信的情況下,重利用方式是不經濟的。圖2中,原始包描述符復制到新申請的包描述符MyPacket時,關鍵是復制NDIS_PACKET_EXTENSION結構。為不影響主機系統其它通信程序正常通信,在中間驅動程序截獲到一個數據封包時,需要檢測是否是測量數據包,如果不是則直接調用NdisSend/NdisSendPackets例程將MyPacket發往微端口層,否則進行位置誤差處理。位置誤差處理過程中,把GetTimeStamp函數獲得的系統時間戳插入到數據包負載中用戶數據段的頭4個字節(根據IEEE802.3以太網幀格式,依據最小有效幀長度64字節計算,TCP、UDP及ICMP協議數據包的用戶數據段長度分別是6、18和18字節),然后重新計算數據包校驗和。
[0059](3)接收位置誤差消除
[0060]接收位置誤差消除流程如圖3所示。
[0061]當物理網卡接收到一個數據包時,觸發中斷,中斷處理程序接管中斷后,調用網卡微端口驅動所注冊的中斷處理例程,微端口驅動把網卡收到的數據拷貝到微端口驅動緩沖區隊列。基于效率的原因,微端口驅動程序盡可能等待更多的數據包到達,因此會推遲一個隨機時間片后通知上層驅動處理到達的數據包[18].微端口驅動調用NdisMIndicateReceive/NdisMEthlndicateReceive 例程通知中間層驅動。由于下層微端口驅動程序傳遞上來的網絡封包在內存中的存儲地址并不是連續的,因此在進行封包處理之前需要先把數據包中的所有數據拷貝到一個連續的內存中才能進行處理。中間層驅動在PtReceive/PtReceivePacket例程中用GetTimeStamp例程獲得接收時間戳t4,并讀取發送端傳來的時間戳t3。然后將t4減去t3的值(即單向時延值)重新寫入MyPacket指向數據包數據包負載中用戶數據段的頭4個字節,并將尾部數據去掉后重新計算數據包校驗和(這樣可以減少計算校驗和的時間開銷),算法如圖3。之后,中間層驅動再調用NdisMIndicateReceivePacket例程通知上層協議驅動。這樣,測量應用程序調用Winsock的接口函數recv/recvfrom從套接字接收緩沖區取回測量數據包,讀取頭4個字節便得到一個基本消除測量位置誤差的端到端單向時延值。
[0062](4)高精度內核時間戳
[0063]Windows操作系統內核驅動程序開發包提供的系統時鐘例程主要有KeQueryTickCount、KeQuerySystemTime、KeGetCurrenttime 等都是依據定時器中斷計數完成計時。通用PC的晶體振蕩器頻率是14.318Mhz,由8253定時/計數器分頻后提供給軟件。內核例程可讀取的時鐘頻率為1.193MHz,故軟件時鐘分辨率較差,約為10ms,不宜作為測量時延時鐘源。CPU時鐘頻率從4.77Mhz到現在的IGHz以上,分辨率高且穩定性強,CPU時鐘周期表不了 同步動態隨機存儲器(SynchronousDynamic Random Access Memory, SDRAM)所能運行的最高頻率。利用內核例程KeQueryPerformanceCounter可以獲得微秒級精度計時,滿足時延測量的時鐘要求。在操作系統內核中獲取微秒級精度計時的GetTimeStamp函數,其算法算法如下:
[0064]①調用內核例程KeQueryPerformanceCounter獲取CPU頻率信息結構Freq及頻率計數CurTime ;[0065]②利用算式((CurTime.QuadPart*1000000)/Freq.QuadPart)計算時間戮信息,精度為微秒。
[0066](5) NDIS中間層驅動程序設計
[0067]基于Windows NDIS規范編程實現了如圖3所示的時延測量中間層驅動程序,以下稱為DeIayM-1MDriver。并改造Windows系統的ping程序,把時間戳記錄位置從應用程序位置下移到DelayM-1MDriver中,改造的ping程序稱為IMD-ping。本發明的DelayM-1MDriver的核心算法設計如下:
[0068]①調用內核例程NdisAllocateMemoryWithTag分配無分頁內存塊,并將起始地址賦值給pPacketContent指針變量;
[0069]②調用內核例程NdisQueryPacket 找到第一個 Ndis_Buffer ;
[0070]③循環調用NdisQueryBufferSafe、NdisMoveMemory 和 NdisGetNextBuffer 例程取得Ndis_Buffer中存儲緩沖區的虛擬地址、內存中的物理塊數、NDIS_BUFFER包數、總共的包數據長度、IP包指針及獲得下一個NDIS_BUFFER ;如果系統資源低或者甚至耗盡的時候,會產生Bug Check錯誤;
[0071]④取得數據包內容后,根據IP頭部協議域判斷是否為測量數據包,如果不是測量數據包,直接發送到微端口驅動或通知上層協議驅動;如果是測量數據包,則進行以下操作:
[0072]a)調用例程GetTimeStamp例程得到時間戳time_stamp ;
[0073]b)將時間戳time_stamp插入數據包的用戶數據段;
[0074]c)重新計算校驗和,并更新IP數據包得到新的測量數據包;
[0075]d)將新的測量數據包發送到微端口驅動或通知上層協議驅動;
[0076]e)調用 NdisFreeMemory 例程釋放 pPacketContent 指向的數據包。
[0077]本發明可應用于IP網絡測量應用領域。實施方式描述如下:
[0078]1.本發明的實驗與驗證過程
[0079](I)實驗設計
[0080]基于WindowsNDIS規范編程實現了如圖3所示的時延測量中間層驅動程序,以下稱為DelayM-1MDriver。并改造Windows系統的ping程序,把時間戳記錄位置從應用程序位置下移到DelayM-1MDriver中,改造的ping程序以下稱為IMD-ping。實驗比較了其與應用層記錄時間戳測量方法,如,Ping的性能差異。為避免網絡背景流量引起的時延變化對實驗結果評估的影響,將兩臺PC機用Im長度的5類雙絞線直連(一臺作為測量主機,另一臺為目標主機),并關閉兩臺PC上運行的其它通信類進程。PC機配置為:CPU Pentium(R)Dual-Core 3.2G,2GB 內存,Intel-82567LF_Gigabit 以太網卡,windows XP SP3 操作系統。Im長度雙絞線的信號傳輸時延僅為1ns,可忽略不計。MD-ping測量RTT值時,兩臺PC上都安裝DelayM-MDriver驅動程序。這樣在測量主機和目標主機可分別得到兩組時間戳,即測量主機端的發送/接收時間戳組(ts_smd,ts_recv)和目標主機端的接收/回應時間戳組(td_recv,td_send)。準確的 RTT 值可依據(td_recv_td_send) - (ts_send-ts_recv)計算得到,兩臺 PC 間可不進行時鐘同步。由于網卡中斷模式以及數據包聚集的特性,網卡收到數據后會延遲遞交到驅動層,時延值約在25us左右[20]。在操作系統中,延遲過程調用(Deferred ProcedureCall, DPC)時延約在30us左右。因此,在中間層驅動接收到網卡遞交上來的數據包約有50us左右的時延。
[0081](2)實驗結果與評估
[0082]實驗1:關閉兩臺PC無關的后臺進程,在輕載條件下評估測量精度。分別對64、512和1500字節等3種典型長度數據包進行實驗。每次實驗分別對MD-ping和ping的RTT值連續采樣1000次,得到兩個實驗樣本。表I為在3種典型數據包長度下MD-ping和Ping的RTT均值及精確度比較。在各種數據包長度下,ping與MD-ping都有較大的差值。根據標準差分析,ping結果的抖動比IMD-ping大。IMD-ping相對ping在3種典型包長度下測量誤差分別下降19.1%、14%和26.7%,且標準差小于10us。故MD-ping測量精度高于ping。圖4為IMD-ping和ping的24小時RTT測量時序(包長1500字節),可觀測到IMD-ping的RTT值抖動不大,測量結果穩定。
[0083]表I輕載條件下IMD-ping與ping的RTT均值(us)及標準差(us)
【權利要求】
1.一種消除位置誤差的網絡時延值測量方法,該方法用于端到端的網絡時延測量,所述方法包含: 在一次往返測量過程中: 步驟101)源端主機記錄其向目的端主機發送數據包的時間戳信息tsmd s ; 步驟102)目的端主機記錄其收到源端發送的數據包的時間戳信息t_v d,然后再記錄其向發送端回應數據包的時間戳信息t_p d ; 步驟103)源端收到目的端回應的數據包,并記錄其受到該回應數據包的時間戳信息t <recv_s 9 步驟104)采用如下公式計算端到端的單向和/或雙向網絡延時值: 路徑正向單向時延:FOWD=t
recvd ^send_s ?
路徑反向單向時延:ROWD=trecv s-trespmse d ;
路徑往返時延:RTT=(treev—d-tsend—s) + (treev—s-trespmse—d); 其中,所述步驟101)、102)和103)通過在所述源端和目的端主機的Windows操作系統的微端口驅動和協議驅動間插入NDIS中間層驅動,該驅動層能夠記錄用于測量網絡延時的收/發數據包的時間戳信息。
2.根據權利要求1所述的網絡時延測量位置誤差消除方法,其特征在于,當用于確定路徑正向延時值時上述方法具體包含如下子步驟: 步驟101)當NDIS中間層驅動截獲到一個數據封包時,檢測是否是測量數據包,如果是測量數據包,進入步驟102)進行位置誤差處理;否則直接發往微端口層; 步驟102)對測量數據包進行位置誤差處理,源端主機的NDIS中間層驅動把獲得的系統時間戳插入到待發送數據包負載中用戶數據段的頭4個字節,然后重新計算數據包校驗和,并將該新的封包發往微端口層; 步驟103)目的端主機的NDIS中間層驅動把獲得的系統時間戳減去發送端傳來的時間戳插入到數據包負載中用戶數據段的頭4個字節,并調用例程通知上層協議驅動; 步驟104)目的端測量應用程序從套接字接收緩沖區取回測量數據包,讀取頭4個字節便得到消除測量位置誤差的端到端路徑正向單向時延值。
3.根據權利要求1所述的網絡時延測量位置誤差消除方法,其特征在于,所述收/發數據包的時間戳信息能夠利用內核例程返回的操作系統時鐘的計時獲取,或通過調用內核例程以CPU頻率計數獲取。
4.根據權利要求1所述的消除位置誤差的網絡時延測量方法,其特征在于,所述NDIS中間層驅動有兩種方式處理源端和目的端數據包的發送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據收到的包描述符重建一個新的包描述符,稱為重申請; 其中,所述NDIS中間層驅動獲得的網絡封包結構是一個單向鏈表,所述包描述符相當于整個鏈表的表頭指針。
5.根據權利要求2所述的消除位置誤差的網絡時延測量方法,其特征在于,所述步驟103)進一步包含如下子步驟: 步驟103-1)當目的端主機的物理網卡接收到一個數據包時,觸發中斷,中斷處理程序接管中斷后,調用網卡微端口驅動所注冊的中斷處理例程,微端口驅動把網卡收到的數據拷貝到微端口驅動緩沖區隊列; 步驟103-2)微端口驅動程序盡可能等待更多的數據包到達,并推遲一個隨機時間片后調用相應內核例程通知NDIS中間層驅動處理到達的數據包; 步驟103-3) NDIS中間層驅動把到達的數據包中的所有數據拷貝到一個連續的內存并進行下個步驟的封包處理; 步驟103-4) NDIS中間層驅動獲得目的端接收數據包記錄的時間戳信息,并讀取源端傳來數據包時的時間戳信息,然后將所述兩個時間戳信息做差并將差值重新寫到待回應的數據包; 步驟103-5)NDIS中間層驅動通知其上層的協議驅動,從套接字接收緩沖區取回待回應的數據包,即獲得一個消除測量位置誤差的端到端路徑正向的單向時延值。
6.一種消除位置誤差的網絡時延值測量系統,該系統設置于網絡兩端的源端和目的端主機中,所述系統基于Windows平臺,包含:設置于微端口驅動層和協議驅動層之間的NDIS中間層驅動層,及位 于應用層的測量探針模塊;其中: NDIS中間層驅動層,用于檢測是否是測量數據包并在數據包的用戶數據段位置記錄用于測量網絡延時的收/發數據包的時間戳信息; 測量探針模塊,用于依據收到的NDIS中間層驅動層記錄的時間戳信息采用如下公式計算路徑正向延時值、路徑反向延時值或路徑雙向延時值; 路徑正向單向時延:F0WD=traev—d-tsend—s ;
路徑反向單向時延:R0WD = trecv_s-tresponse d ;
路徑往返時延:RTT=(treev—d-tsend—s) + (treev—s-trespmse—d); 其中,t_v d表示源端存儲模塊記錄的發送時間戳,tsmd s表示目的端的存儲模塊記錄的接收數據包時間戳、t_p(_ d表示目的端存儲模塊記錄的其回應包的時間戳,t_v s表示源端存儲模塊記錄的其收到回應包的時間戳。
7.根據權利要求6所述的消除位置誤差的網絡時延值測量系統,其特征在于,所述NDIS中間層驅動層還包含: 數據包檢測模塊,用于當NDIS中間層驅動截獲到一個數據封包時,檢測是否是測量數據包,如果是測量數據包則進行位置誤差處理;否則直接發往微端口層。 封包模塊,用于對接收的測量數據包進行位置誤差處理,把獲得的系統時間戳或者計算得到的延時值插入到數據包負載中用戶數據段的字節中,然后重新計算數據包校驗和,并將該新的封包發往微端口層或通知上層協議驅動。
8.根據權利要求6所述的消除位置誤差的網絡時延測量系統,其特征在于,所述NDIS中間層驅動層有兩種方式處理源端和目的端數據包的發送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據收到的包描述符重建一個新的包描述符,稱為重申請; 其中,所述NDIS中間層驅動層獲得的網絡封包結構是一個單向鏈表,所述包描述符為整個鏈表的表頭指針。
【文檔編號】H04L1/00GK103427935SQ201210152326
【公開日】2013年12月4日 申請日期:2012年5月16日 優先權日:2012年5月16日
【發明者】陳世強, 周旭, 覃毅芳, 王俊峰 申請人:中國科學院聲學研究所, 四川大學