欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量方法及系統(tǒng)的制作方法

文檔序號(hào):7978985閱讀:484來源:國(guó)知局
一種消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量方法及系統(tǒng),該方法在端主機(jī)Windows操作系統(tǒng)的微端口驅(qū)動(dòng)和協(xié)議驅(qū)動(dòng)間插入一個(gè)NDIS中間層驅(qū)動(dòng)程序,將測(cè)量時(shí)間戳的記錄位置從傳統(tǒng)應(yīng)用程序下移到該中間層驅(qū)動(dòng),用戶空間的測(cè)量探針程序依據(jù)其記錄并返回的時(shí)間戳來計(jì)算網(wǎng)絡(luò)路徑的時(shí)延值(包括單向時(shí)延和往返時(shí)延),實(shí)現(xiàn)消除時(shí)延測(cè)量位置誤差。由于位置誤差受主機(jī)硬件性能、內(nèi)核復(fù)雜度、系統(tǒng)負(fù)載、中斷響應(yīng)、內(nèi)核旋轉(zhuǎn)鎖、進(jìn)程與線程調(diào)度等多因素的影響,特別受系統(tǒng)負(fù)載和進(jìn)程/線程調(diào)度影響最大。本發(fā)明改進(jìn)后的方法盡可能地讓測(cè)量過程的收/發(fā)數(shù)據(jù)包時(shí)間戳記錄位置接近測(cè)量主機(jī)網(wǎng)卡收/發(fā)包的時(shí)刻,從而消除主機(jī)本身處理數(shù)據(jù)包的時(shí)間消耗,即消除測(cè)量位置誤差。
【專利說明】一種消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種互聯(lián)網(wǎng)絡(luò)時(shí)延主動(dòng)測(cè)量誤差消除的方法,特別是經(jīng)濟(jì)、高效的消除測(cè)量主機(jī)位置誤差的方法。本發(fā)明的【技術(shù)領(lǐng)域】是互聯(lián)網(wǎng)端到端性能測(cè)量與監(jiān)控,具體涉及一種消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量方法及系統(tǒng)。
【背景技術(shù)】
[0002]在互聯(lián)網(wǎng)測(cè)量與監(jiān)控領(lǐng)域,路徑時(shí)延是衡量網(wǎng)絡(luò)性能的關(guān)鍵參數(shù)之一,也是網(wǎng)絡(luò)丟包率、時(shí)延抖動(dòng)、瓶頸帶寬等其它指標(biāo)測(cè)量的基礎(chǔ)。精確的路徑時(shí)延測(cè)量是一個(gè)困難的問題,但它在網(wǎng)絡(luò)行為分析、性能監(jiān)測(cè)、網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)等領(lǐng)域有著廣泛的應(yīng)用。IETF組織的IP網(wǎng)絡(luò)性能指標(biāo)工作組(IP Performance Metrics Working Group, IPPM)對(duì)路徑時(shí)延定義進(jìn)行了標(biāo)準(zhǔn)化,將其分為往返時(shí)延和單向時(shí)延。國(guó)內(nèi)外許多研究者針對(duì)路徑時(shí)延測(cè)量提出了大量的實(shí)現(xiàn)與改進(jìn)方法,例如:基于多次正向和反向往返時(shí)延估計(jì)單向時(shí)延的測(cè)量方法,基于TCP的往返時(shí)延測(cè)量方法,基于組播的時(shí)延測(cè)量方法等等。路徑時(shí)延測(cè)量的誤差來源主要有兩種:一種是測(cè)量主機(jī)的時(shí)鐘不同步帶來的時(shí)鐘誤差;二是因?yàn)闇y(cè)量主機(jī)記錄的收/發(fā)包時(shí)間戳不是真實(shí)的到達(dá)/離開網(wǎng)卡的時(shí)刻而產(chǎn)生的位置誤差。這兩類誤差都會(huì)導(dǎo)致測(cè)量結(jié)果中包含由主機(jī)處理所帶來的測(cè)量誤差,會(huì)使評(píng)價(jià)網(wǎng)絡(luò)時(shí)延、時(shí)延抖動(dòng)、帶寬等指標(biāo)性能不準(zhǔn)確。因此必須盡可能地消除這兩類誤差,提高路徑時(shí)延測(cè)量精度。
[0003]國(guó)內(nèi)外目前的研究成果集中在解決測(cè)量主機(jī)時(shí)鐘不同步帶來的時(shí)鐘誤差的消除問題,依據(jù)同步時(shí)鐘源分為兩類:一類是基于外部時(shí)鐘源的同步,主要包括網(wǎng)絡(luò)時(shí)間協(xié)議(Network Time Protocol, NTP)、全球定位系統(tǒng)(Global Position System, GPS)、IEEE1588時(shí)鐘同步協(xié)議。另一類是基于端到端測(cè)量的時(shí)鐘同步,主要包括在線和離線兩種方式。例如:采用線性規(guī)劃算法、凸包算法、聚類算法等方法消除時(shí)鐘偏差取得了較為理想的結(jié)果,但這些方法都沒涉及測(cè)量位置誤差的消除。
[0004]同時(shí)針對(duì)因?yàn)闇y(cè)量主機(jī)記錄的收/發(fā)包時(shí)間戳不是真實(shí)的到達(dá)/離開網(wǎng)卡的時(shí)刻而產(chǎn)生的位置誤差問題,目前也有少量研究,主要包括:Endaceg公司生產(chǎn)的專用于數(shù)據(jù)包捕獲的DAG (Data Acquisition and Generation)采集卡,可以實(shí)現(xiàn)捕獲數(shù)據(jù)包的同時(shí)記錄時(shí)間戳,但這種方式硬件價(jià)格昂貴,不利于普遍部署,并且DAG主要用于高速鏈路的數(shù)據(jù)包捕獲,是網(wǎng)絡(luò)流量工程的基礎(chǔ)硬件,不適于網(wǎng)絡(luò)時(shí)延主動(dòng)測(cè)量方式的應(yīng)用;基于Linux環(huán)境在網(wǎng)卡驅(qū)動(dòng)程序來記錄時(shí)間戳的方法,該方案需要較多地修改Linux網(wǎng)絡(luò)設(shè)備內(nèi)核代碼并重新編譯內(nèi)核,而且不能普遍適應(yīng)各種類型的網(wǎng)卡Jcpdump等基于BPF的流量監(jiān)測(cè)工具實(shí)現(xiàn)了在Linux系統(tǒng)的設(shè)備獨(dú)立層記錄收包時(shí)間戳,減少了收包的位置誤差,但沒有實(shí)現(xiàn)發(fā)送位置誤差的消除,也不適宜于主動(dòng)的時(shí)延測(cè)量應(yīng)用設(shè)計(jì)。
[0005]因此到目前為止,還沒有一種便捷的、經(jīng)濟(jì)的、且適合于主動(dòng)時(shí)延測(cè)量的位置誤差消除方法。

【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于,為克服現(xiàn)有技術(shù)在測(cè)量網(wǎng)絡(luò)延時(shí)時(shí)存在的位置誤差問題,本發(fā)明提供了一種消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量方法。
[0007]本發(fā)明的技術(shù)方案基于Windows平臺(tái)、且適宜于主動(dòng)測(cè)量方式的網(wǎng)絡(luò)端到端時(shí)延測(cè)量位置誤差消除方法。
[0008]為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種消除位置誤差的網(wǎng)絡(luò)時(shí)延值測(cè)量方法,該方法用于端到端的網(wǎng)絡(luò)時(shí)延測(cè)量,所述方法包含:
[0009]在一次往返測(cè)量過程中:
[0010]步驟101)源端主機(jī)記錄其向目的端主機(jī)發(fā)送數(shù)據(jù)包的時(shí)間戳信息tsend s ;
[0011]步驟102)目的端主機(jī)記錄其收到源端發(fā)送的數(shù)據(jù)包的時(shí)間戳信息t_v d,然后再記錄其向發(fā)送端回應(yīng)數(shù)據(jù)包的時(shí)間戳信息t_ d ;
[0012]步驟103)源端收到目的端回應(yīng)的數(shù)據(jù)包,并記錄其受到該回應(yīng)數(shù)據(jù)包的時(shí)間戳信
自t./E、 ^recv—s ?
[0013]步驟104)采用如下公式計(jì)算端到端的單向和/或雙向網(wǎng)絡(luò)延時(shí)值:
[0014]路徑正向單向時(shí)延:F0WD=trav—d_tsend—s;
[0015]路徑反向單向時(shí)延:R0WD=trecvs-trespmse d ;
[0016]路徑往返時(shí)延:RTT=(trecv d-tsend s) + (trecv s_trespmse d);
[0017]其中,所述步驟101)、102)和103)通過在所述源端和目的端主機(jī)的Windows操作系統(tǒng)的微端口驅(qū)動(dòng)和協(xié)議驅(qū)動(dòng)間插入NDIS中間層驅(qū)動(dòng),該驅(qū)動(dòng)層能夠記錄用于測(cè)量網(wǎng)絡(luò)延時(shí)的收/發(fā)數(shù)據(jù)包的時(shí)間戳信息。
[0018]上述技術(shù)方案中,當(dāng)用于確定路徑正向延時(shí)值時(shí)上述方法具體包含如下子步驟:
[0019]步驟101)當(dāng)NDIS中間層驅(qū)動(dòng)截獲到一個(gè)數(shù)據(jù)封包時(shí),檢測(cè)是否是測(cè)量數(shù)據(jù)包,如果是測(cè)量數(shù)據(jù)包,進(jìn)入步驟102)進(jìn)行位置誤差處理;否則直接發(fā)往微端口層;
[0020]步驟102)對(duì)測(cè)量數(shù)據(jù)包進(jìn)行位置誤差處理,源端主機(jī)的NDIS中間層驅(qū)動(dòng)把獲得的系統(tǒng)時(shí)間戳插入到待發(fā)送數(shù)據(jù)包負(fù)載中用戶數(shù)據(jù)段的頭4個(gè)字節(jié),然后重新計(jì)算數(shù)據(jù)包校驗(yàn)和,并將該新的封包發(fā)往微端口層;
[0021]步驟103)目的端主機(jī)的NDIS中間層驅(qū)動(dòng)把獲得的系統(tǒng)時(shí)間戳減去發(fā)送端傳來的時(shí)間戳插入到數(shù)據(jù)包負(fù)載中用戶數(shù)據(jù)段的頭4個(gè)字節(jié),并調(diào)用例程通知上層協(xié)議驅(qū)動(dòng);
[0022]步驟104)目的端測(cè)量應(yīng)用程序從套接字接收緩沖區(qū)取回測(cè)量數(shù)據(jù)包,讀取頭4個(gè)字節(jié)便得到消除測(cè)量位置誤差的端到端路徑正向單向時(shí)延值。
[0023]上述技術(shù)方案中,所述收/發(fā)數(shù)據(jù)包的時(shí)間戳信息能夠利用內(nèi)核例程返回的操作系統(tǒng)時(shí)鐘的計(jì)時(shí)獲取,或通過調(diào)用內(nèi)核例程以CPU頻率計(jì)數(shù)獲取。
[0024]上述技術(shù)方案中,所述NDIS中間層驅(qū)動(dòng)有兩種方式處理源端和目的端數(shù)據(jù)包的發(fā)送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據(jù)收到的包描述符重建一個(gè)新的包描述符,稱為重申請(qǐng);
[0025]其中,所述NDIS中間層驅(qū)動(dòng)獲得的網(wǎng)絡(luò)封包結(jié)構(gòu)是一個(gè)單向鏈表,所述包描述符相當(dāng)于整個(gè)鏈表的表頭指針。
[0026]上述技術(shù)方案中,所述步驟103)進(jìn)一步包含如下子步驟:
[0027]步驟103-1)當(dāng)目的端主機(jī)的物理網(wǎng)卡接收到一個(gè)數(shù)據(jù)包時(shí),觸發(fā)中斷,中斷處理程序接管中斷后,調(diào)用網(wǎng)卡微端口驅(qū)動(dòng)所注冊(cè)的中斷處理例程,微端口驅(qū)動(dòng)把網(wǎng)卡收到的數(shù)據(jù)拷貝到微端口驅(qū)動(dòng)緩沖區(qū)隊(duì)列;
[0028]步驟103-2)微端口驅(qū)動(dòng)程序盡可能等待更多的數(shù)據(jù)包到達(dá),并推遲一個(gè)隨機(jī)時(shí)間片后調(diào)用相應(yīng)內(nèi)核例程通知NDIS中間層驅(qū)動(dòng)處理到達(dá)的數(shù)據(jù)包;
[0029]步驟103-3) NDIS中間層驅(qū)動(dòng)把到達(dá)的數(shù)據(jù)包中的所有數(shù)據(jù)拷貝到一個(gè)連續(xù)的內(nèi)存并進(jìn)行下個(gè)步驟的封包處理;
[0030]步驟103-4) NDIS中間層驅(qū)動(dòng)獲得目的端接收數(shù)據(jù)包記錄的時(shí)間戳信息,并讀取源端傳來數(shù)據(jù)包時(shí)的時(shí)間戳信息,然后將所述兩個(gè)時(shí)間戳信息做差并將差值重新寫到待回應(yīng)的數(shù)據(jù)包;
[0031]步驟103-5) NDIS中間層驅(qū)動(dòng)通知其上層的協(xié)議驅(qū)動(dòng),從套接字接收緩沖區(qū)取回待回應(yīng)的數(shù)據(jù)包,即獲得一個(gè)消除測(cè)量位置誤差的端到端路徑正向的單向時(shí)延值。
[0032]基于上述方法本發(fā)明還提供了一種消除位置誤差的網(wǎng)絡(luò)時(shí)延值測(cè)量系統(tǒng),該系統(tǒng)設(shè)置于網(wǎng)絡(luò)兩端的源端和目的端主機(jī)中,所述系統(tǒng)基于Windows平臺(tái),包含:設(shè)置于微端口驅(qū)動(dòng)層和協(xié)議驅(qū)動(dòng)層之間的NDIS中間層驅(qū)動(dòng)層,及位于應(yīng)用層的測(cè)量探針模塊;其中:
[0033]NDIS中間層驅(qū)動(dòng)層,用于檢測(cè)是否是測(cè)量數(shù)據(jù)包并在數(shù)據(jù)包的用戶數(shù)據(jù)段位置記錄用于測(cè)量網(wǎng)絡(luò)延時(shí)的收/發(fā)數(shù)據(jù)包的時(shí)間戳信息;
[0034]測(cè)量探針模塊,用于依據(jù)收到的NDIS中間層驅(qū)動(dòng)層記錄的時(shí)間戳信息采用如下公式計(jì)算路徑正向延時(shí)值、路徑反向延時(shí)值或路徑雙向延時(shí)值;
[0035]路徑正向單向時(shí)延:F0WD=trav—d_tsend—s;
[0036]路徑反向單向時(shí)延:R0WD=trecvs-trespmse d ;
[0037]路徑往返時(shí)延:RTT=(trecv—d_tsend—s) + (trecv_s-tresponse_d);
[0038]其中,trecv_d表示源端存儲(chǔ)模塊記錄的發(fā)送時(shí)間戳,tsend_s表示目的端的存儲(chǔ)模塊記錄的接收數(shù)據(jù)包時(shí)間戳、t? d表示目的端存儲(chǔ)模塊記錄的其回應(yīng)包的時(shí)間戳,trecv_s表示源端存儲(chǔ)模塊記錄的其收到回應(yīng)包的時(shí)間戳。
[0039]上述技術(shù)方案中,所述NDIS中間層驅(qū)動(dòng)層還包含:
[0040]數(shù)據(jù)包檢測(cè)模塊,用于當(dāng)NDIS中間層驅(qū)動(dòng)截獲到一個(gè)數(shù)據(jù)封包時(shí),檢測(cè)是否是測(cè)量數(shù)據(jù)包,如果是測(cè)量數(shù)據(jù)包則進(jìn)行位置誤差處理;否則直接發(fā)往微端口層。
[0041]封包模塊,用于對(duì)接收的測(cè)量數(shù)據(jù)包進(jìn)行位置誤差處理,把獲得的系統(tǒng)時(shí)間戳或者計(jì)算得到的延時(shí)值插入到數(shù)據(jù)包負(fù)載中用戶數(shù)據(jù)段的字節(jié)中,然后重新計(jì)算數(shù)據(jù)包校驗(yàn)和,并將該新的封包發(fā)往微端口層或通知上層協(xié)議驅(qū)動(dòng)。
[0042]上述技術(shù)方案中,所述NDIS中間層驅(qū)動(dòng)層有兩種方式處理源端和目的端數(shù)據(jù)包的發(fā)送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據(jù)收到的包描述符重建一個(gè)新的包描述符,稱為重申請(qǐng);
[0043]其中,所述NDIS中間層驅(qū)動(dòng)層獲得的網(wǎng)絡(luò)封包結(jié)構(gòu)是一個(gè)單向鏈表,所述包描述符為整個(gè)鏈表的表頭指針。
[0044]與現(xiàn)有技術(shù)相比,本發(fā)明的技術(shù)優(yōu)勢(shì)在于:
[0045]本發(fā)明所采用的方法在進(jìn)行網(wǎng)絡(luò)時(shí)延測(cè)量時(shí)能夠高精度的消除測(cè)量方法不完善所帶來的位置誤差,且能夠適用于主動(dòng)和被動(dòng)模式的時(shí)延測(cè)量,不需要額外的硬件和軟件支持,成本很低,因此適合于普遍部署和應(yīng)用?!緦@綀D】

【附圖說明】
[0046]圖1是本發(fā)明基于windows NDIS中間層驅(qū)動(dòng)實(shí)現(xiàn)時(shí)間戳記錄的方法模型;
[0047]圖2是本發(fā)明實(shí)現(xiàn)發(fā)送位置誤差消除的流程;
[0048]圖3是本發(fā)明實(shí)現(xiàn)接收位置誤差消除的流程;
[0049]圖4為在輕載條件下IMD-ping和ping的往返時(shí)延時(shí)序(包長(zhǎng)1500字節(jié))及穩(wěn)定性;
[0050]圖5為在并發(fā)測(cè)量條件下MD-ping和ping的往返時(shí)延時(shí)序(包長(zhǎng)1500字節(jié))
及穩(wěn)定性。
【具體實(shí)施方式】
[0051 ] 下面結(jié)合附圖對(duì)本發(fā)明的內(nèi)容進(jìn)行詳細(xì)說明。
[0052]本發(fā)明通過在Windows操作系統(tǒng)的微端口驅(qū)動(dòng)和協(xié)議驅(qū)動(dòng)之間插入一個(gè)NDIS中間層驅(qū)動(dòng)程序,將測(cè)量時(shí)間戳的記錄位置從傳統(tǒng)應(yīng)用程序下移到該中間層驅(qū)動(dòng),用戶空間的測(cè)量探針程序依據(jù)其記錄并返回的時(shí)間戳來計(jì)算網(wǎng)絡(luò)路徑的時(shí)延值,從而實(shí)現(xiàn)消除時(shí)延測(cè)量位置誤差。測(cè)量位置誤差分析及本發(fā)明方法的實(shí)現(xiàn)過程描述如下:
[0053](I)位置誤差分析
[0054]位置誤差主要包括:(1)內(nèi)核驅(qū)動(dòng)各層處理數(shù)據(jù)包的時(shí)間;(2)通信應(yīng)用進(jìn)程/線程間競(jìng)爭(zhēng)CPU的排隊(duì)時(shí)間。如圖1所示為Windows系統(tǒng)的網(wǎng)絡(luò)體系結(jié)構(gòu)及套接字通信過程,數(shù)據(jù)包在應(yīng)用進(jìn)程與物理網(wǎng)卡之間往返傳遞,經(jīng)歷了用戶態(tài)DLL調(diào)用、系統(tǒng)調(diào)用及內(nèi)核的多層處理。在應(yīng)用進(jìn)程記錄的數(shù)據(jù)包發(fā)送時(shí)間戳A,不是數(shù)據(jù)包被送到物理鏈路的真實(shí)發(fā)送時(shí)刻tsmd,而是提前了 Atsmd時(shí)間,即tsmd = ti+Δ tsendo在應(yīng)用進(jìn)程記錄的包接收時(shí)間戳t2,不是數(shù)據(jù)包從物理鏈路送到網(wǎng)卡的真實(shí)接收時(shí)刻t_v,而是滯后了 Λ trecv時(shí)間,即trecv=t2-Atrecvo主流的網(wǎng)絡(luò)時(shí)延測(cè)量程序(如ping程序)是使用的W它實(shí)際包含了主機(jī)發(fā)送和接收包的處理時(shí)間,即位置誤差為:Επγ。。= Δ tsend+ Δ trecv0
[0055]實(shí)際上,位置誤差Εηγ。。的值受主機(jī)硬件性能、內(nèi)核復(fù)雜度、系統(tǒng)負(fù)載、中斷響應(yīng)、內(nèi)核旋轉(zhuǎn)鎖、進(jìn)程與線程調(diào)度等多因素的影響,Επγ。。值可達(dá)到數(shù)十至數(shù)百毫秒,特別在大流量導(dǎo)致主機(jī)內(nèi)核出現(xiàn)“中斷活鎖”的極端情況下,位置誤差可達(dá)到數(shù)百毫秒甚至無窮大。
[0056](2)發(fā)送位置誤差消除
[0057]在NDIS封包管理機(jī)制中,NDIS交給中間層驅(qū)動(dòng)程序是一個(gè)結(jié)構(gòu)為NDIS_PACKET的包描述符(NDIS Packet Descriptor, NPD)。中間層獲得的網(wǎng)絡(luò)封包結(jié)構(gòu)是一個(gè)單向鏈表,包描述符相當(dāng)于整個(gè)鏈表的表頭指針。這樣上層協(xié)議驅(qū)動(dòng)程序調(diào)用NdisSend/NdisSendPackets內(nèi)核例程請(qǐng)求NDIS發(fā)送數(shù)據(jù)包時(shí),NDIS將調(diào)用中間層驅(qū)動(dòng)實(shí)現(xiàn)的 MiniportSend/MiniportSendPackets 例程。此時(shí),在中間層驅(qū)動(dòng)的 MiniportSend/MiniportSendPackets例程中完成發(fā)送時(shí)間戳的記錄,算法如圖2。之后,中間層驅(qū)動(dòng)再調(diào)用其實(shí)現(xiàn)的NdisSend/NdisSendPackets例程請(qǐng)求NDIS往下層發(fā)送數(shù)據(jù)包,NDIS便調(diào)用其下層的 Miniport Driver 的 MiniportSend/MiniportSendPackets 例程通過 NDIS 接口控制物理網(wǎng)卡,將數(shù)據(jù)發(fā)送出去。
[0058]在NDIS中間層驅(qū)動(dòng)規(guī)范中,有兩種方式處理包發(fā)送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據(jù)收到的包描述符重建一個(gè)新的包描述符,稱為重申請(qǐng)。事實(shí)上,重申請(qǐng)包描述符并不需要對(duì)網(wǎng)絡(luò)數(shù)據(jù)包重建,所涉及內(nèi)存操作少,可以忽略代價(jià)開銷。而在重利用方式下,需要調(diào)用內(nèi)核例程N(yùn)dislMGetCurrentPacketStack檢測(cè)當(dāng)前驅(qū)動(dòng)的??臻g是否可供利用,在沒有剩余空間的情況下必須轉(zhuǎn)入重申請(qǐng)。在大量通信的情況下,重利用方式是不經(jīng)濟(jì)的。圖2中,原始包描述符復(fù)制到新申請(qǐng)的包描述符MyPacket時(shí),關(guān)鍵是復(fù)制NDIS_PACKET_EXTENSION結(jié)構(gòu)。為不影響主機(jī)系統(tǒng)其它通信程序正常通信,在中間驅(qū)動(dòng)程序截獲到一個(gè)數(shù)據(jù)封包時(shí),需要檢測(cè)是否是測(cè)量數(shù)據(jù)包,如果不是則直接調(diào)用NdisSend/NdisSendPackets例程將MyPacket發(fā)往微端口層,否則進(jìn)行位置誤差處理。位置誤差處理過程中,把GetTimeStamp函數(shù)獲得的系統(tǒng)時(shí)間戳插入到數(shù)據(jù)包負(fù)載中用戶數(shù)據(jù)段的頭4個(gè)字節(jié)(根據(jù)IEEE802.3以太網(wǎng)幀格式,依據(jù)最小有效幀長(zhǎng)度64字節(jié)計(jì)算,TCP、UDP及ICMP協(xié)議數(shù)據(jù)包的用戶數(shù)據(jù)段長(zhǎng)度分別是6、18和18字節(jié)),然后重新計(jì)算數(shù)據(jù)包校驗(yàn)和。
[0059](3)接收位置誤差消除
[0060]接收位置誤差消除流程如圖3所示。
[0061]當(dāng)物理網(wǎng)卡接收到一個(gè)數(shù)據(jù)包時(shí),觸發(fā)中斷,中斷處理程序接管中斷后,調(diào)用網(wǎng)卡微端口驅(qū)動(dòng)所注冊(cè)的中斷處理例程,微端口驅(qū)動(dòng)把網(wǎng)卡收到的數(shù)據(jù)拷貝到微端口驅(qū)動(dòng)緩沖區(qū)隊(duì)列?;谛实脑?,微端口驅(qū)動(dòng)程序盡可能等待更多的數(shù)據(jù)包到達(dá),因此會(huì)推遲一個(gè)隨機(jī)時(shí)間片后通知上層驅(qū)動(dòng)處理到達(dá)的數(shù)據(jù)包[18].微端口驅(qū)動(dòng)調(diào)用NdisMIndicateReceive/NdisMEthlndicateReceive 例程通知中間層驅(qū)動(dòng)。由于下層微端口驅(qū)動(dòng)程序傳遞上來的網(wǎng)絡(luò)封包在內(nèi)存中的存儲(chǔ)地址并不是連續(xù)的,因此在進(jìn)行封包處理之前需要先把數(shù)據(jù)包中的所有數(shù)據(jù)拷貝到一個(gè)連續(xù)的內(nèi)存中才能進(jìn)行處理。中間層驅(qū)動(dòng)在PtReceive/PtReceivePacket例程中用GetTimeStamp例程獲得接收時(shí)間戳t4,并讀取發(fā)送端傳來的時(shí)間戳t3。然后將t4減去t3的值(即單向時(shí)延值)重新寫入MyPacket指向數(shù)據(jù)包數(shù)據(jù)包負(fù)載中用戶數(shù)據(jù)段的頭4個(gè)字節(jié),并將尾部數(shù)據(jù)去掉后重新計(jì)算數(shù)據(jù)包校驗(yàn)和(這樣可以減少計(jì)算校驗(yàn)和的時(shí)間開銷),算法如圖3。之后,中間層驅(qū)動(dòng)再調(diào)用NdisMIndicateReceivePacket例程通知上層協(xié)議驅(qū)動(dòng)。這樣,測(cè)量應(yīng)用程序調(diào)用Winsock的接口函數(shù)recv/recvfrom從套接字接收緩沖區(qū)取回測(cè)量數(shù)據(jù)包,讀取頭4個(gè)字節(jié)便得到一個(gè)基本消除測(cè)量位置誤差的端到端單向時(shí)延值。
[0062](4)高精度內(nèi)核時(shí)間戳
[0063]Windows操作系統(tǒng)內(nèi)核驅(qū)動(dòng)程序開發(fā)包提供的系統(tǒng)時(shí)鐘例程主要有KeQueryTickCount、KeQuerySystemTime、KeGetCurrenttime 等都是依據(jù)定時(shí)器中斷計(jì)數(shù)完成計(jì)時(shí)。通用PC的晶體振蕩器頻率是14.318Mhz,由8253定時(shí)/計(jì)數(shù)器分頻后提供給軟件。內(nèi)核例程可讀取的時(shí)鐘頻率為1.193MHz,故軟件時(shí)鐘分辨率較差,約為10ms,不宜作為測(cè)量時(shí)延時(shí)鐘源。CPU時(shí)鐘頻率從4.77Mhz到現(xiàn)在的IGHz以上,分辨率高且穩(wěn)定性強(qiáng),CPU時(shí)鐘周期表不了 同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(SynchronousDynamic Random Access Memory, SDRAM)所能運(yùn)行的最高頻率。利用內(nèi)核例程KeQueryPerformanceCounter可以獲得微秒級(jí)精度計(jì)時(shí),滿足時(shí)延測(cè)量的時(shí)鐘要求。在操作系統(tǒng)內(nèi)核中獲取微秒級(jí)精度計(jì)時(shí)的GetTimeStamp函數(shù),其算法算法如下:
[0064]①調(diào)用內(nèi)核例程KeQueryPerformanceCounter獲取CPU頻率信息結(jié)構(gòu)Freq及頻率計(jì)數(shù)CurTime ;[0065]②利用算式((CurTime.QuadPart*1000000)/Freq.QuadPart)計(jì)算時(shí)間戮信息,精度為微秒。
[0066](5) NDIS中間層驅(qū)動(dòng)程序設(shè)計(jì)
[0067]基于Windows NDIS規(guī)范編程實(shí)現(xiàn)了如圖3所示的時(shí)延測(cè)量中間層驅(qū)動(dòng)程序,以下稱為DeIayM-1MDriver。并改造Windows系統(tǒng)的ping程序,把時(shí)間戳記錄位置從應(yīng)用程序位置下移到DelayM-1MDriver中,改造的ping程序稱為IMD-ping。本發(fā)明的DelayM-1MDriver的核心算法設(shè)計(jì)如下:
[0068]①調(diào)用內(nèi)核例程N(yùn)disAllocateMemoryWithTag分配無分頁(yè)內(nèi)存塊,并將起始地址賦值給pPacketContent指針變量;
[0069]②調(diào)用內(nèi)核例程N(yùn)disQueryPacket 找到第一個(gè) Ndis_Buffer ;
[0070]③循環(huán)調(diào)用NdisQueryBufferSafe、NdisMoveMemory 和 NdisGetNextBuffer 例程取得Ndis_Buffer中存儲(chǔ)緩沖區(qū)的虛擬地址、內(nèi)存中的物理塊數(shù)、NDIS_BUFFER包數(shù)、總共的包數(shù)據(jù)長(zhǎng)度、IP包指針及獲得下一個(gè)NDIS_BUFFER ;如果系統(tǒng)資源低或者甚至耗盡的時(shí)候,會(huì)產(chǎn)生Bug Check錯(cuò)誤;
[0071]④取得數(shù)據(jù)包內(nèi)容后,根據(jù)IP頭部協(xié)議域判斷是否為測(cè)量數(shù)據(jù)包,如果不是測(cè)量數(shù)據(jù)包,直接發(fā)送到微端口驅(qū)動(dòng)或通知上層協(xié)議驅(qū)動(dòng);如果是測(cè)量數(shù)據(jù)包,則進(jìn)行以下操作:
[0072]a)調(diào)用例程GetTimeStamp例程得到時(shí)間戳time_stamp ;
[0073]b)將時(shí)間戳time_stamp插入數(shù)據(jù)包的用戶數(shù)據(jù)段;
[0074]c)重新計(jì)算校驗(yàn)和,并更新IP數(shù)據(jù)包得到新的測(cè)量數(shù)據(jù)包;
[0075]d)將新的測(cè)量數(shù)據(jù)包發(fā)送到微端口驅(qū)動(dòng)或通知上層協(xié)議驅(qū)動(dòng);
[0076]e)調(diào)用 NdisFreeMemory 例程釋放 pPacketContent 指向的數(shù)據(jù)包。
[0077]本發(fā)明可應(yīng)用于IP網(wǎng)絡(luò)測(cè)量應(yīng)用領(lǐng)域。實(shí)施方式描述如下:
[0078]1.本發(fā)明的實(shí)驗(yàn)與驗(yàn)證過程
[0079](I)實(shí)驗(yàn)設(shè)計(jì)
[0080]基于WindowsNDIS規(guī)范編程實(shí)現(xiàn)了如圖3所示的時(shí)延測(cè)量中間層驅(qū)動(dòng)程序,以下稱為DelayM-1MDriver。并改造Windows系統(tǒng)的ping程序,把時(shí)間戳記錄位置從應(yīng)用程序位置下移到DelayM-1MDriver中,改造的ping程序以下稱為IMD-ping。實(shí)驗(yàn)比較了其與應(yīng)用層記錄時(shí)間戳測(cè)量方法,如,Ping的性能差異。為避免網(wǎng)絡(luò)背景流量引起的時(shí)延變化對(duì)實(shí)驗(yàn)結(jié)果評(píng)估的影響,將兩臺(tái)PC機(jī)用Im長(zhǎng)度的5類雙絞線直連(一臺(tái)作為測(cè)量主機(jī),另一臺(tái)為目標(biāo)主機(jī)),并關(guān)閉兩臺(tái)PC上運(yùn)行的其它通信類進(jìn)程。PC機(jī)配置為:CPU Pentium(R)Dual-Core 3.2G,2GB 內(nèi)存,Intel-82567LF_Gigabit 以太網(wǎng)卡,windows XP SP3 操作系統(tǒng)。Im長(zhǎng)度雙絞線的信號(hào)傳輸時(shí)延僅為1ns,可忽略不計(jì)。MD-ping測(cè)量RTT值時(shí),兩臺(tái)PC上都安裝DelayM-MDriver驅(qū)動(dòng)程序。這樣在測(cè)量主機(jī)和目標(biāo)主機(jī)可分別得到兩組時(shí)間戳,即測(cè)量主機(jī)端的發(fā)送/接收時(shí)間戳組(ts_smd,ts_recv)和目標(biāo)主機(jī)端的接收/回應(yīng)時(shí)間戳組(td_recv,td_send)。準(zhǔn)確的 RTT 值可依據(jù)(td_recv_td_send) - (ts_send-ts_recv)計(jì)算得到,兩臺(tái) PC 間可不進(jìn)行時(shí)鐘同步。由于網(wǎng)卡中斷模式以及數(shù)據(jù)包聚集的特性,網(wǎng)卡收到數(shù)據(jù)后會(huì)延遲遞交到驅(qū)動(dòng)層,時(shí)延值約在25us左右[20]。在操作系統(tǒng)中,延遲過程調(diào)用(Deferred ProcedureCall, DPC)時(shí)延約在30us左右。因此,在中間層驅(qū)動(dòng)接收到網(wǎng)卡遞交上來的數(shù)據(jù)包約有50us左右的時(shí)延。
[0081](2)實(shí)驗(yàn)結(jié)果與評(píng)估
[0082]實(shí)驗(yàn)1:關(guān)閉兩臺(tái)PC無關(guān)的后臺(tái)進(jìn)程,在輕載條件下評(píng)估測(cè)量精度。分別對(duì)64、512和1500字節(jié)等3種典型長(zhǎng)度數(shù)據(jù)包進(jìn)行實(shí)驗(yàn)。每次實(shí)驗(yàn)分別對(duì)MD-ping和ping的RTT值連續(xù)采樣1000次,得到兩個(gè)實(shí)驗(yàn)樣本。表I為在3種典型數(shù)據(jù)包長(zhǎng)度下MD-ping和Ping的RTT均值及精確度比較。在各種數(shù)據(jù)包長(zhǎng)度下,ping與MD-ping都有較大的差值。根據(jù)標(biāo)準(zhǔn)差分析,ping結(jié)果的抖動(dòng)比IMD-ping大。IMD-ping相對(duì)ping在3種典型包長(zhǎng)度下測(cè)量誤差分別下降19.1%、14%和26.7%,且標(biāo)準(zhǔn)差小于10us。故MD-ping測(cè)量精度高于ping。圖4為IMD-ping和ping的24小時(shí)RTT測(cè)量時(shí)序(包長(zhǎng)1500字節(jié)),可觀測(cè)到IMD-ping的RTT值抖動(dòng)不大,測(cè)量結(jié)果穩(wěn)定。
[0083]表I輕載條件下IMD-ping與ping的RTT均值(us)及標(biāo)準(zhǔn)差(us)
【權(quán)利要求】
1.一種消除位置誤差的網(wǎng)絡(luò)時(shí)延值測(cè)量方法,該方法用于端到端的網(wǎng)絡(luò)時(shí)延測(cè)量,所述方法包含: 在一次往返測(cè)量過程中: 步驟101)源端主機(jī)記錄其向目的端主機(jī)發(fā)送數(shù)據(jù)包的時(shí)間戳信息tsmd s ; 步驟102)目的端主機(jī)記錄其收到源端發(fā)送的數(shù)據(jù)包的時(shí)間戳信息t_v d,然后再記錄其向發(fā)送端回應(yīng)數(shù)據(jù)包的時(shí)間戳信息t_p d ; 步驟103)源端收到目的端回應(yīng)的數(shù)據(jù)包,并記錄其受到該回應(yīng)數(shù)據(jù)包的時(shí)間戳信息t <recv_s 9 步驟104)采用如下公式計(jì)算端到端的單向和/或雙向網(wǎng)絡(luò)延時(shí)值: 路徑正向單向時(shí)延:FOWD=t


recvd ^send_s ?
路徑反向單向時(shí)延:ROWD=trecv s-trespmse d ;
路徑往返時(shí)延:RTT=(treev—d-tsend—s) + (treev—s-trespmse—d); 其中,所述步驟101)、102)和103)通過在所述源端和目的端主機(jī)的Windows操作系統(tǒng)的微端口驅(qū)動(dòng)和協(xié)議驅(qū)動(dòng)間插入NDIS中間層驅(qū)動(dòng),該驅(qū)動(dòng)層能夠記錄用于測(cè)量網(wǎng)絡(luò)延時(shí)的收/發(fā)數(shù)據(jù)包的時(shí)間戳信息。
2.根據(jù)權(quán)利要求1所述的網(wǎng)絡(luò)時(shí)延測(cè)量位置誤差消除方法,其特征在于,當(dāng)用于確定路徑正向延時(shí)值時(shí)上述方法具體包含如下子步驟: 步驟101)當(dāng)NDIS中間層驅(qū)動(dòng)截獲到一個(gè)數(shù)據(jù)封包時(shí),檢測(cè)是否是測(cè)量數(shù)據(jù)包,如果是測(cè)量數(shù)據(jù)包,進(jìn)入步驟102)進(jìn)行位置誤差處理;否則直接發(fā)往微端口層; 步驟102)對(duì)測(cè)量數(shù)據(jù)包進(jìn)行位置誤差處理,源端主機(jī)的NDIS中間層驅(qū)動(dòng)把獲得的系統(tǒng)時(shí)間戳插入到待發(fā)送數(shù)據(jù)包負(fù)載中用戶數(shù)據(jù)段的頭4個(gè)字節(jié),然后重新計(jì)算數(shù)據(jù)包校驗(yàn)和,并將該新的封包發(fā)往微端口層; 步驟103)目的端主機(jī)的NDIS中間層驅(qū)動(dòng)把獲得的系統(tǒng)時(shí)間戳減去發(fā)送端傳來的時(shí)間戳插入到數(shù)據(jù)包負(fù)載中用戶數(shù)據(jù)段的頭4個(gè)字節(jié),并調(diào)用例程通知上層協(xié)議驅(qū)動(dòng); 步驟104)目的端測(cè)量應(yīng)用程序從套接字接收緩沖區(qū)取回測(cè)量數(shù)據(jù)包,讀取頭4個(gè)字節(jié)便得到消除測(cè)量位置誤差的端到端路徑正向單向時(shí)延值。
3.根據(jù)權(quán)利要求1所述的網(wǎng)絡(luò)時(shí)延測(cè)量位置誤差消除方法,其特征在于,所述收/發(fā)數(shù)據(jù)包的時(shí)間戳信息能夠利用內(nèi)核例程返回的操作系統(tǒng)時(shí)鐘的計(jì)時(shí)獲取,或通過調(diào)用內(nèi)核例程以CPU頻率計(jì)數(shù)獲取。
4.根據(jù)權(quán)利要求1所述的消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量方法,其特征在于,所述NDIS中間層驅(qū)動(dòng)有兩種方式處理源端和目的端數(shù)據(jù)包的發(fā)送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據(jù)收到的包描述符重建一個(gè)新的包描述符,稱為重申請(qǐng); 其中,所述NDIS中間層驅(qū)動(dòng)獲得的網(wǎng)絡(luò)封包結(jié)構(gòu)是一個(gè)單向鏈表,所述包描述符相當(dāng)于整個(gè)鏈表的表頭指針。
5.根據(jù)權(quán)利要求2所述的消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量方法,其特征在于,所述步驟103)進(jìn)一步包含如下子步驟: 步驟103-1)當(dāng)目的端主機(jī)的物理網(wǎng)卡接收到一個(gè)數(shù)據(jù)包時(shí),觸發(fā)中斷,中斷處理程序接管中斷后,調(diào)用網(wǎng)卡微端口驅(qū)動(dòng)所注冊(cè)的中斷處理例程,微端口驅(qū)動(dòng)把網(wǎng)卡收到的數(shù)據(jù)拷貝到微端口驅(qū)動(dòng)緩沖區(qū)隊(duì)列; 步驟103-2)微端口驅(qū)動(dòng)程序盡可能等待更多的數(shù)據(jù)包到達(dá),并推遲一個(gè)隨機(jī)時(shí)間片后調(diào)用相應(yīng)內(nèi)核例程通知NDIS中間層驅(qū)動(dòng)處理到達(dá)的數(shù)據(jù)包; 步驟103-3) NDIS中間層驅(qū)動(dòng)把到達(dá)的數(shù)據(jù)包中的所有數(shù)據(jù)拷貝到一個(gè)連續(xù)的內(nèi)存并進(jìn)行下個(gè)步驟的封包處理; 步驟103-4) NDIS中間層驅(qū)動(dòng)獲得目的端接收數(shù)據(jù)包記錄的時(shí)間戳信息,并讀取源端傳來數(shù)據(jù)包時(shí)的時(shí)間戳信息,然后將所述兩個(gè)時(shí)間戳信息做差并將差值重新寫到待回應(yīng)的數(shù)據(jù)包; 步驟103-5)NDIS中間層驅(qū)動(dòng)通知其上層的協(xié)議驅(qū)動(dòng),從套接字接收緩沖區(qū)取回待回應(yīng)的數(shù)據(jù)包,即獲得一個(gè)消除測(cè)量位置誤差的端到端路徑正向的單向時(shí)延值。
6.一種消除位置誤差的網(wǎng)絡(luò)時(shí)延值測(cè)量系統(tǒng),該系統(tǒng)設(shè)置于網(wǎng)絡(luò)兩端的源端和目的端主機(jī)中,所述系統(tǒng)基于Windows平臺(tái),包含:設(shè)置于微端口驅(qū)動(dòng)層和協(xié)議驅(qū)動(dòng)層之間的NDIS中間層驅(qū)動(dòng)層,及位 于應(yīng)用層的測(cè)量探針模塊;其中: NDIS中間層驅(qū)動(dòng)層,用于檢測(cè)是否是測(cè)量數(shù)據(jù)包并在數(shù)據(jù)包的用戶數(shù)據(jù)段位置記錄用于測(cè)量網(wǎng)絡(luò)延時(shí)的收/發(fā)數(shù)據(jù)包的時(shí)間戳信息; 測(cè)量探針模塊,用于依據(jù)收到的NDIS中間層驅(qū)動(dòng)層記錄的時(shí)間戳信息采用如下公式計(jì)算路徑正向延時(shí)值、路徑反向延時(shí)值或路徑雙向延時(shí)值; 路徑正向單向時(shí)延:F0WD=traev—d-tsend—s ;
路徑反向單向時(shí)延:R0WD = trecv_s-tresponse d ;
路徑往返時(shí)延:RTT=(treev—d-tsend—s) + (treev—s-trespmse—d); 其中,t_v d表示源端存儲(chǔ)模塊記錄的發(fā)送時(shí)間戳,tsmd s表示目的端的存儲(chǔ)模塊記錄的接收數(shù)據(jù)包時(shí)間戳、t_p(_ d表示目的端存儲(chǔ)模塊記錄的其回應(yīng)包的時(shí)間戳,t_v s表示源端存儲(chǔ)模塊記錄的其收到回應(yīng)包的時(shí)間戳。
7.根據(jù)權(quán)利要求6所述的消除位置誤差的網(wǎng)絡(luò)時(shí)延值測(cè)量系統(tǒng),其特征在于,所述NDIS中間層驅(qū)動(dòng)層還包含: 數(shù)據(jù)包檢測(cè)模塊,用于當(dāng)NDIS中間層驅(qū)動(dòng)截獲到一個(gè)數(shù)據(jù)封包時(shí),檢測(cè)是否是測(cè)量數(shù)據(jù)包,如果是測(cè)量數(shù)據(jù)包則進(jìn)行位置誤差處理;否則直接發(fā)往微端口層。 封包模塊,用于對(duì)接收的測(cè)量數(shù)據(jù)包進(jìn)行位置誤差處理,把獲得的系統(tǒng)時(shí)間戳或者計(jì)算得到的延時(shí)值插入到數(shù)據(jù)包負(fù)載中用戶數(shù)據(jù)段的字節(jié)中,然后重新計(jì)算數(shù)據(jù)包校驗(yàn)和,并將該新的封包發(fā)往微端口層或通知上層協(xié)議驅(qū)動(dòng)。
8.根據(jù)權(quán)利要求6所述的消除位置誤差的網(wǎng)絡(luò)時(shí)延測(cè)量系統(tǒng),其特征在于,所述NDIS中間層驅(qū)動(dòng)層有兩種方式處理源端和目的端數(shù)據(jù)包的發(fā)送:一種是把收到的包描述符直接傳遞到下層,稱為重利用;另一種是根據(jù)收到的包描述符重建一個(gè)新的包描述符,稱為重申請(qǐng); 其中,所述NDIS中間層驅(qū)動(dòng)層獲得的網(wǎng)絡(luò)封包結(jié)構(gòu)是一個(gè)單向鏈表,所述包描述符為整個(gè)鏈表的表頭指針。
【文檔編號(hào)】H04L1/00GK103427935SQ201210152326
【公開日】2013年12月4日 申請(qǐng)日期:2012年5月16日 優(yōu)先權(quán)日:2012年5月16日
【發(fā)明者】陳世強(qiáng), 周旭, 覃毅芳, 王俊峰 申請(qǐng)人:中國(guó)科學(xué)院聲學(xué)研究所, 四川大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
东兰县| 洪雅县| 陆良县| 南平市| 永川市| 娱乐| 福州市| 安福县| 苍南县| 华池县| 精河县| 樟树市| 华亭县| 阳谷县| 宜兰市| 北宁市| 南召县| 平顶山市| 苏尼特左旗| 甘德县| 涞水县| 香港| 横峰县| 宁陵县| 西乌珠穆沁旗| 昌都县| 郧西县| 宕昌县| 泰顺县| 德保县| 炎陵县| 黑河市| 会同县| 花莲市| 哈密市| 手游| 贡觉县| 鹤岗市| 威宁| 绿春县| 商水县|