專利名稱:一種計(jì)算機(jī)網(wǎng)絡(luò)端主機(jī)系統(tǒng)精確標(biāo)記數(shù)據(jù)包時(shí)間戳的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別涉及一種計(jì)算機(jī)網(wǎng)絡(luò)端主機(jī)系統(tǒng)精確標(biāo)記數(shù)據(jù)包時(shí)間戳的方法,尤其是使用多任務(wù)操作系統(tǒng)的端主機(jī)系統(tǒng)精確標(biāo)記數(shù)據(jù)包時(shí)間戳的方法。
2、多任務(wù)操作系統(tǒng)多任務(wù)操作系統(tǒng)中多個(gè)任務(wù)并發(fā)執(zhí)行,由操作系統(tǒng)協(xié)調(diào)多個(gè)任務(wù)共享CPU。當(dāng)前,大多數(shù)多任務(wù)操作系統(tǒng)的實(shí)現(xiàn)是采用多進(jìn)程并發(fā)的方法。
3、進(jìn)程(process)進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上的一種動(dòng)態(tài)執(zhí)行過(guò)程。
4、進(jìn)程的并發(fā)執(zhí)行指多個(gè)進(jìn)程在同一計(jì)算機(jī)系統(tǒng)中的并發(fā)執(zhí)行,由操作系統(tǒng)協(xié)調(diào)多個(gè)進(jìn)程共享CPU。
5、進(jìn)程切換指處理機(jī)從一個(gè)進(jìn)程的運(yùn)行轉(zhuǎn)到另一個(gè)進(jìn)程上運(yùn)行。
6、用戶模式是處理機(jī)的一種執(zhí)行模式,又叫非特權(quán)模式,用戶程序在這種模式下運(yùn)行,僅有有限的特權(quán),用來(lái)保障操作系統(tǒng)的安全性。
7、系統(tǒng)模式是處理機(jī)的一種執(zhí)行模式,又叫做特權(quán)模式、核心模式,操作系統(tǒng)核心程序在這種模式下運(yùn)行且能夠獲得更多的特權(quán)。
8、時(shí)間戳計(jì)算機(jī)系統(tǒng)中標(biāo)記某種事件的發(fā)生的時(shí)間信息。
在目前廣泛使用的傳統(tǒng)時(shí)間戳標(biāo)記方法中,為網(wǎng)絡(luò)數(shù)據(jù)包標(biāo)記發(fā)送/接收時(shí)間戳信息的任務(wù)運(yùn)行在用戶模式下,由于操作系統(tǒng)多任務(wù)并發(fā)的特性,為了提高整機(jī)的資源利用率,系統(tǒng)的不同任務(wù)之間存在頻繁的切換,影響了時(shí)間戳信息的精確性。
對(duì)于端主機(jī)系統(tǒng)發(fā)送出去的數(shù)據(jù)包,利用傳統(tǒng)時(shí)間戳標(biāo)記方法獲得發(fā)送時(shí)間戳的方式通常包含以下步驟步驟1應(yīng)用進(jìn)程產(chǎn)生待發(fā)送數(shù)據(jù)包;步驟2應(yīng)用進(jìn)程通過(guò)系統(tǒng)調(diào)用獲得當(dāng)前時(shí)間,作為數(shù)據(jù)包的發(fā)送時(shí)間戳;步驟3應(yīng)用進(jìn)程發(fā)送數(shù)據(jù)包;步驟4數(shù)據(jù)包被發(fā)送到物理鏈路上。
如果步驟1到步驟4連續(xù)不間斷執(zhí)行,系統(tǒng)可以獲得比較精確的數(shù)據(jù)包發(fā)送時(shí)間戳。但是由于多任務(wù)操作系統(tǒng)具有并發(fā)性,在用戶模式運(yùn)行的應(yīng)用進(jìn)程經(jīng)常由于中斷、系統(tǒng)調(diào)用等原因進(jìn)入操作系統(tǒng)核心,并發(fā)生進(jìn)程切換。對(duì)于上述記錄時(shí)間戳信息并發(fā)送數(shù)據(jù)包的應(yīng)用進(jìn)程而言,如果進(jìn)程切換發(fā)生在步驟2、3之間,也即在系統(tǒng)記錄時(shí)間戳信息之后,由于進(jìn)程切換使得該數(shù)據(jù)包并未立即被發(fā)送出去,記錄時(shí)間戳信息與發(fā)送數(shù)據(jù)包之間存在一定的延遲時(shí)間,則該時(shí)間戳沒(méi)有準(zhǔn)確的反映出數(shù)據(jù)包被發(fā)送到鏈路上的時(shí)間信息。附
圖1是進(jìn)程切換對(duì)現(xiàn)有給發(fā)送數(shù)據(jù)包打時(shí)間戳方法的影響示意圖,應(yīng)用進(jìn)程在時(shí)刻t1創(chuàng)建數(shù)據(jù)包,在時(shí)刻t2打時(shí)間戳,但此后由于進(jìn)程切換被掛起,直到時(shí)刻t3該應(yīng)用進(jìn)程被喚醒,將數(shù)據(jù)包發(fā)送出去,而由于進(jìn)程切換導(dǎo)致的延遲(t3-t2)可能達(dá)到數(shù)十個(gè)毫秒甚至數(shù)百毫秒,因而大大降低了時(shí)間戳的精度。此外,即使步驟2、3之間沒(méi)有發(fā)生進(jìn)程切換,由于步驟3是在用戶模式執(zhí)行的操作,步驟4是在系統(tǒng)模式執(zhí)行的操作,二者之間可能存在較大延遲,這也將影響數(shù)據(jù)包發(fā)送時(shí)間戳的精確度,如附圖1中的延遲(t4-t3)。
對(duì)于端主機(jī)系統(tǒng)接收的數(shù)據(jù)包,獲得接收時(shí)間戳的方式通常包含以下步驟步驟1運(yùn)行在系統(tǒng)內(nèi)核中的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序從鏈路接口上接收數(shù)據(jù)包并暫存在內(nèi)核緩沖中;步驟2應(yīng)用進(jìn)程得到處理器資源,獲得數(shù)據(jù)包;步驟3應(yīng)用進(jìn)程通過(guò)系統(tǒng)調(diào)用獲得當(dāng)前時(shí)間,作為該數(shù)據(jù)包的接收時(shí)間戳;如果步驟1與步驟2之間或者步驟2與步驟3之間由于進(jìn)程切換造成較大延遲,則應(yīng)用進(jìn)程獲得的數(shù)據(jù)包接收時(shí)間戳將非常不精確,這將直接影響到網(wǎng)絡(luò)性能參數(shù)計(jì)算的準(zhǔn)確度。附圖2是進(jìn)程切換對(duì)現(xiàn)有給接收數(shù)據(jù)包打時(shí)間戳方法的影響示意圖,應(yīng)用進(jìn)程在時(shí)刻t0由于進(jìn)程切換被掛起,數(shù)據(jù)包1、2分別于時(shí)刻t1,t2到達(dá)。由于應(yīng)用進(jìn)程沒(méi)有獲得處理機(jī),兩數(shù)據(jù)包被存儲(chǔ)在系統(tǒng)緩沖中,在時(shí)刻t3,應(yīng)用進(jìn)程獲得處理機(jī)被重新執(zhí)行,分別在時(shí)刻t3,t4標(biāo)記數(shù)據(jù)包1、2的時(shí)間戳信息。如果該應(yīng)用進(jìn)程用于估計(jì)網(wǎng)絡(luò)帶寬,對(duì)于該應(yīng)用進(jìn)程而言,數(shù)據(jù)包1、2到達(dá)的時(shí)間間隔真實(shí)值應(yīng)為t2-t1,但是由于多進(jìn)程并發(fā)帶來(lái)的緩存的影響,該時(shí)間間隔變?yōu)閠4-t3,應(yīng)用程序會(huì)錯(cuò)誤的將系統(tǒng)緩沖到用戶進(jìn)程緩沖的內(nèi)存拷貝速率(數(shù)據(jù)包2的包長(zhǎng)/(t4-t3))當(dāng)作數(shù)據(jù)包從網(wǎng)絡(luò)到達(dá)的速率,其直接影響是把網(wǎng)絡(luò)帶寬估計(jì)過(guò)高。
目前,大多數(shù)端主機(jī)操作系統(tǒng)中都提供了包過(guò)濾器(Packet Filter),如Linux,BSD,Soloris,HP-UNIX,Windows等系統(tǒng)。附圖3是現(xiàn)有端主機(jī)操作系統(tǒng)中的包過(guò)濾器示意圖,所謂包過(guò)濾器是操作系統(tǒng)內(nèi)核中負(fù)責(zé)捕獲進(jìn)出端主機(jī)系統(tǒng)網(wǎng)絡(luò)數(shù)據(jù)包的一個(gè)內(nèi)核模塊,該模塊可以由用戶設(shè)置特定的過(guò)濾條件進(jìn)行數(shù)據(jù)包過(guò)濾操作,從而只將滿足過(guò)濾條件需要的數(shù)據(jù)包及相關(guān)信息傳送給用戶進(jìn)程。包過(guò)濾器在捕獲一個(gè)數(shù)據(jù)包時(shí),會(huì)給數(shù)據(jù)包標(biāo)記相應(yīng)的發(fā)送/接收時(shí)間戳,該時(shí)間戳與數(shù)據(jù)包實(shí)際的發(fā)送/接收時(shí)間非常近似,并且由于這些操作由系統(tǒng)核心在系統(tǒng)模式下執(zhí)行,因此不會(huì)受到多進(jìn)程并發(fā)的影響。雖然包過(guò)濾器標(biāo)記的時(shí)間戳與理想的數(shù)據(jù)包時(shí)間戳之間存在著一定的誤差,但這一誤差非常小,可近似忽略。因此可以利用包過(guò)濾器來(lái)標(biāo)記網(wǎng)絡(luò)數(shù)據(jù)包的精確時(shí)間戳,使之不受多進(jìn)程并發(fā)的影響。
同時(shí),為解決接收數(shù)據(jù)包時(shí)可能遇到的時(shí)間戳與數(shù)據(jù)包之間不匹配的問(wèn)題,提出時(shí)間戳回退方法。
步驟1中時(shí)間戳存取模塊設(shè)置兩個(gè)先進(jìn)先出時(shí)間戳隊(duì)列,一個(gè)存放發(fā)送數(shù)據(jù)包時(shí)間戳信息,一個(gè)存放接收數(shù)據(jù)包時(shí)間戳信息;時(shí)間戳存取模塊從包過(guò)濾器獲得一個(gè)數(shù)據(jù)包時(shí)間戳信息后,根據(jù)該數(shù)據(jù)包是用戶進(jìn)程發(fā)送的數(shù)據(jù)包,還是用戶進(jìn)程接收的數(shù)據(jù)包,將時(shí)間戳信息相應(yīng)地放入發(fā)送時(shí)間戳隊(duì)列或接收時(shí)間戳隊(duì)列的隊(duì)尾;在用戶請(qǐng)求從時(shí)間戳存取模塊獲得一個(gè)時(shí)間戳?xí)r,如果用戶請(qǐng)求獲得發(fā)送時(shí)間戳,則時(shí)間戳存取模塊從與該用戶請(qǐng)求對(duì)應(yīng)的發(fā)送時(shí)間戳隊(duì)列隊(duì)頭取出一個(gè)時(shí)間戳并將其返回給用戶;如果用戶請(qǐng)求獲得接收時(shí)間戳,則時(shí)間戳存取模塊從與該用戶請(qǐng)求對(duì)應(yīng)的接收時(shí)間戳隊(duì)列隊(duì)頭取出一個(gè)時(shí)間戳并將其返回給用戶。
步驟4中,用戶進(jìn)程發(fā)送一個(gè)數(shù)據(jù)包之后,在發(fā)送另一個(gè)數(shù)據(jù)包之前,必須且只能從時(shí)間戳存取模塊取回一個(gè)發(fā)送時(shí)間戳,用戶進(jìn)程接收一個(gè)數(shù)據(jù)包之后,在接收另一個(gè)數(shù)據(jù)包之前,必須且只能從時(shí)間戳存取模塊取回一個(gè)接收時(shí)間戳。
步驟4為解決接收數(shù)據(jù)包時(shí)可能遇到的時(shí)間戳與數(shù)據(jù)包之間不匹配的問(wèn)題,提出的時(shí)間戳回退檢查,包括步驟步驟1判斷接收的數(shù)據(jù)包是否符合包過(guò)濾器過(guò)濾條件,如果符合,進(jìn)入步驟2,否則將時(shí)間戳退回給時(shí)間戳存取模塊;步驟2如果接收的數(shù)據(jù)包不是用戶進(jìn)程想要打時(shí)間戳的數(shù)據(jù)包,則丟棄該數(shù)據(jù)包和本次獲得的時(shí)間戳,否則,該時(shí)間戳就是用戶需要的時(shí)間戳。
步驟1中退回的時(shí)間戳將插入到時(shí)間戳存取模塊中接收時(shí)間戳隊(duì)列隊(duì)頭。
只要為包過(guò)濾器設(shè)置的過(guò)濾條件能唯一地確定應(yīng)用進(jìn)程發(fā)送的數(shù)據(jù)包,則通過(guò)上述方法得到的發(fā)送時(shí)間戳與發(fā)送數(shù)據(jù)包能正確地一對(duì)應(yīng)。
只要為包過(guò)濾器設(shè)置的過(guò)濾條件能全部覆蓋應(yīng)用進(jìn)程需要接收的數(shù)據(jù)包,且滿足過(guò)濾條件的到達(dá)數(shù)據(jù)包均能被應(yīng)用進(jìn)程接收,則通過(guò)本發(fā)明提出的精確時(shí)間戳方法得到的接收時(shí)間戳與接收數(shù)據(jù)包能正確地一一對(duì)應(yīng)。
圖4是本發(fā)明利用包過(guò)濾器為用戶進(jìn)程網(wǎng)絡(luò)數(shù)據(jù)包打時(shí)間戳方法的示意圖。
發(fā)明實(shí)施方式本發(fā)明調(diào)用操作系統(tǒng)內(nèi)核中的包過(guò)濾器獲取用戶進(jìn)程數(shù)據(jù)包時(shí)間戳并將此信息放入時(shí)間戳存取模塊的相應(yīng)時(shí)間戳隊(duì)列中,用戶進(jìn)程在發(fā)送或者接收一個(gè)數(shù)據(jù)包后,必須立即從時(shí)間戳模塊中取得相應(yīng)時(shí)間戳。附圖4是本發(fā)明利用包過(guò)濾器為用戶進(jìn)程網(wǎng)絡(luò)數(shù)據(jù)包打時(shí)間戳方法的示意圖,針對(duì)每一個(gè)需要網(wǎng)絡(luò)數(shù)據(jù)包精確時(shí)間戳的應(yīng)用進(jìn)程,設(shè)置一個(gè)時(shí)間戳存取模塊,它負(fù)責(zé)與操作系統(tǒng)內(nèi)核的包過(guò)濾器交互以獲得其捕獲的網(wǎng)絡(luò)數(shù)據(jù)包時(shí)間戳信息并將該信息存儲(chǔ)在時(shí)間戳隊(duì)列中,根據(jù)需要返回給用戶進(jìn)程。時(shí)間戳存取模塊中維護(hù)兩個(gè)時(shí)間戳先入先出隊(duì)列發(fā)送時(shí)間戳隊(duì)列和接收時(shí)間戳隊(duì)列,其中前者存放由用戶進(jìn)程發(fā)往其他目的地的數(shù)據(jù)包時(shí)間戳信息,后者存放用戶進(jìn)程收到的其他主機(jī)發(fā)來(lái)的數(shù)據(jù)包的時(shí)間戳信息。根據(jù)用戶進(jìn)程設(shè)置的包過(guò)濾條件,時(shí)間戳存取模塊向包過(guò)濾器請(qǐng)求指定數(shù)據(jù)包的時(shí)間戳信息,并根據(jù)該數(shù)據(jù)包是用戶進(jìn)程發(fā)送的數(shù)據(jù)包,還是用戶進(jìn)程接收的數(shù)據(jù)包,將時(shí)間戳信息相應(yīng)地放入發(fā)送時(shí)間戳隊(duì)列或接收時(shí)間戳隊(duì)列的隊(duì)尾。在用戶請(qǐng)求從時(shí)間戳存取模塊獲得一個(gè)時(shí)間戳?xí)r,如果用戶請(qǐng)求獲得發(fā)送時(shí)間戳,則時(shí)間戳存取模塊從與該用戶請(qǐng)求對(duì)應(yīng)的發(fā)送時(shí)間戳隊(duì)列隊(duì)頭取出一個(gè)時(shí)間戳并將其返回給用戶;如果用戶請(qǐng)求獲得接收時(shí)間戳,則時(shí)間戳存取模塊從與該用戶請(qǐng)求對(duì)應(yīng)的接收時(shí)間戳隊(duì)列隊(duì)頭取出一個(gè)時(shí)間戳并將其返回給用戶。用戶進(jìn)程在獲取時(shí)間戳信息時(shí),必須遵守以下規(guī)則用戶進(jìn)程發(fā)送一個(gè)數(shù)據(jù)包之后,在發(fā)送另一個(gè)數(shù)據(jù)包之前,必須且只能從時(shí)間戳存取模塊取回一個(gè)發(fā)送時(shí)間戳,用戶進(jìn)程接收一個(gè)數(shù)據(jù)包之后,在接收另一個(gè)數(shù)據(jù)包之前,必須且只能從時(shí)間戳存取模塊取回一個(gè)接收時(shí)間戳。這樣規(guī)定的目的是保證時(shí)間戳信息與數(shù)據(jù)包之間正確的對(duì)應(yīng)關(guān)系。性質(zhì)1 只要為包過(guò)濾器設(shè)置的過(guò)濾條件能唯一地確定應(yīng)用進(jìn)程發(fā)送的數(shù)據(jù)包,則通過(guò)本發(fā)明提出的精確時(shí)間戳方法得到的時(shí)間戳與發(fā)送數(shù)據(jù)包能正確地一一對(duì)應(yīng)。證明因?yàn)榘^(guò)濾器設(shè)置的過(guò)濾條件能唯一地確定應(yīng)用進(jìn)程發(fā)送的數(shù)據(jù)包,所以包過(guò)濾器能夠捕獲的發(fā)送數(shù)據(jù)包就是應(yīng)用進(jìn)程發(fā)送的數(shù)據(jù)包,且捕獲的數(shù)據(jù)包之間的相對(duì)順序就是應(yīng)用進(jìn)程發(fā)送數(shù)據(jù)包的相對(duì)順序。此外,包過(guò)濾器將數(shù)據(jù)包的時(shí)間戳信息傳遞給時(shí)間戳存取模塊的順序是按數(shù)據(jù)包被捕獲的順序,時(shí)間戳存取模塊將時(shí)間戳以先入先出的方式放入發(fā)送時(shí)間戳隊(duì)列,因此用戶進(jìn)程發(fā)送完一個(gè)數(shù)據(jù)包,立即從時(shí)間戳存取模塊獲得的發(fā)送時(shí)間戳,就是對(duì)應(yīng)于該數(shù)據(jù)包的時(shí)間戳。證畢。
在某些特殊的情況下,特別是在一些網(wǎng)絡(luò)測(cè)量應(yīng)用中,往往不能構(gòu)造出100%精確地描述需要打時(shí)間戳的接收數(shù)據(jù)包流的過(guò)濾條件,或者過(guò)濾條件雖然100%精確地描述了需要打時(shí)間戳的接收數(shù)據(jù)包流,但用戶進(jìn)程可能收到額外的數(shù)據(jù)包,這時(shí)用戶進(jìn)程得到的時(shí)間戳與收到的數(shù)據(jù)包之間就可能存在錯(cuò)誤的對(duì)應(yīng)關(guān)系。例如,在因特網(wǎng)(Internet)中最常用的測(cè)量工具ping,它通過(guò)發(fā)送因特網(wǎng)控制消息協(xié)議(ICMP)回聲請(qǐng)求包(EchoRequest)并收集相應(yīng)的ICMP回聲應(yīng)答包(Echo Reply)來(lái)計(jì)算網(wǎng)絡(luò)通路的往返延遲等性能參數(shù),在ping發(fā)送了一個(gè)ICMP回聲請(qǐng)求包后,它可能收到其他類型的ICMP數(shù)據(jù)包甚至屬于其他進(jìn)程的ICMP數(shù)據(jù)包。為此本發(fā)明提出一種時(shí)間戳回退技術(shù),用以解決上述在為接收數(shù)據(jù)包打時(shí)間戳?xí)r遇到的問(wèn)題。時(shí)間戳存取模塊提供接收時(shí)間戳回退功能,即將退回的時(shí)間戳重新插入到接收時(shí)間戳隊(duì)列的隊(duì)列頭部。在實(shí)際使用時(shí),盡可能將過(guò)濾條件設(shè)置得嚴(yán)格一些(當(dāng)然,該條件應(yīng)當(dāng)覆蓋所有應(yīng)用進(jìn)程想要打時(shí)間戳的進(jìn)出數(shù)據(jù)包),在接收一個(gè)數(shù)據(jù)包并得到一個(gè)時(shí)間戳后,執(zhí)行如下步驟步驟1判斷接收的數(shù)據(jù)包是否符合過(guò)濾條件,如果符合,進(jìn)入步驟2,否則將時(shí)間戳退回給時(shí)間戳存取模塊;步驟2如果接收的數(shù)據(jù)包不是用戶進(jìn)程想要打時(shí)間戳的數(shù)據(jù)包,則丟棄該數(shù)據(jù)包和得到的時(shí)間戳,否則,得到的時(shí)間戳就是用戶需要的時(shí)間戳。
性質(zhì)2 只要為包過(guò)濾器設(shè)置的過(guò)濾條件能全部覆蓋應(yīng)用進(jìn)程需要接收的數(shù)據(jù)包,且滿足過(guò)濾條件的到達(dá)數(shù)據(jù)包均能被應(yīng)用進(jìn)程接收,則通過(guò)本發(fā)明提出的精確時(shí)間戳方法得到的時(shí)間戳與接收數(shù)據(jù)包能正確地一一對(duì)應(yīng)。
證明假設(shè)得到的時(shí)間戳與應(yīng)用進(jìn)程接收到的需要打時(shí)間戳的數(shù)據(jù)包之間可能存在不匹配的情況。由于有時(shí)間戳回退機(jī)制,接收時(shí)間戳隊(duì)列中的時(shí)間戳不可能由于應(yīng)用進(jìn)程收到不滿足過(guò)濾條件的數(shù)據(jù)包而被消耗,也就是說(shuō)接收時(shí)間戳隊(duì)列中時(shí)間戳的總數(shù)等于應(yīng)用進(jìn)程接收到的滿足過(guò)濾條件的數(shù)據(jù)包總數(shù)。那么,錯(cuò)誤匹配的原因是時(shí)間戳隊(duì)列中時(shí)間戳之間的相對(duì)順序不同于它們對(duì)應(yīng)的數(shù)據(jù)包被應(yīng)用進(jìn)程接收的相對(duì)順序。而這是不可能的,因?yàn)榘^(guò)濾器將數(shù)據(jù)包的時(shí)間戳信息傳遞給時(shí)間戳存取模塊的順序是按數(shù)據(jù)包被捕獲的順序,時(shí)間戳存取模塊將時(shí)間戳以先入先出的方式管理發(fā)送時(shí)間戳隊(duì)列,用戶進(jìn)程也是發(fā)送或接收一個(gè)數(shù)據(jù)包,立即從時(shí)間戳隊(duì)列中取出一個(gè)時(shí)間戳。因此,通過(guò)本發(fā)明提出的精確時(shí)間戳方法得到的時(shí)間戳與應(yīng)用進(jìn)程接收到的需要的數(shù)據(jù)包之間不可能存在不匹配的情況。證畢。
本發(fā)明方法可以在多任務(wù)并發(fā)的端主機(jī)系統(tǒng)中獲得穩(wěn)定、精確的網(wǎng)絡(luò)數(shù)據(jù)包時(shí)間戳信息,可應(yīng)用于網(wǎng)絡(luò)性能測(cè)量以及適應(yīng)性(Adaptive)網(wǎng)絡(luò)應(yīng)用等領(lǐng)域。
權(quán)利要求
1.一種計(jì)算機(jī)網(wǎng)絡(luò)端主機(jī)系統(tǒng)精確標(biāo)記數(shù)據(jù)包時(shí)間戳的方法,包括步驟步驟1設(shè)置包過(guò)濾器過(guò)濾條件,該過(guò)濾條件能精確地定義用戶進(jìn)程將要發(fā)送和接收的數(shù)據(jù)包,為每一個(gè)用戶進(jìn)程設(shè)置一個(gè)時(shí)間戳存取模塊,該模塊向包過(guò)濾器請(qǐng)求其捕獲的每一個(gè)數(shù)據(jù)包時(shí)間戳信息,并返回給用戶進(jìn)程;步驟2用戶進(jìn)程發(fā)送或者接收數(shù)據(jù)包;步驟3包過(guò)濾器根據(jù)過(guò)濾條件在系統(tǒng)內(nèi)部捕獲用戶進(jìn)程發(fā)送或者接收的數(shù)據(jù)包,同時(shí)記錄時(shí)間戳信息,并將時(shí)間戳信息送給時(shí)間戳存取模塊;步驟4用戶進(jìn)程發(fā)送或接收一個(gè)數(shù)據(jù)包后,立即從時(shí)間戳存取模塊取回一個(gè)時(shí)間戳,將其作為該數(shù)據(jù)包的發(fā)送/接收時(shí)間戳;在接收數(shù)據(jù)包時(shí),要執(zhí)行時(shí)間戳回退檢查。
2.根據(jù)權(quán)利要求1的方法,其特征在于,步驟1中時(shí)間戳存取模塊設(shè)置兩個(gè)先進(jìn)先出時(shí)間戳隊(duì)列,一個(gè)存放發(fā)送數(shù)據(jù)包時(shí)間戳信息,一個(gè)存放接收數(shù)據(jù)包時(shí)間戳信息;時(shí)間戳存取模塊從包過(guò)濾器獲得一個(gè)數(shù)據(jù)包時(shí)間戳信息后,根據(jù)該數(shù)據(jù)包是用戶進(jìn)程發(fā)送的數(shù)據(jù)包,還是用戶進(jìn)程接收的數(shù)據(jù)包,將時(shí)間戳信息相應(yīng)地放入發(fā)送時(shí)間戳隊(duì)列或接收時(shí)間戳隊(duì)列的隊(duì)尾;在用戶請(qǐng)求從時(shí)間戳存取模塊獲得一個(gè)時(shí)間戳?xí)r,如果用戶請(qǐng)求獲得發(fā)送時(shí)間戳,則時(shí)間戳存取模塊從與該用戶請(qǐng)求對(duì)應(yīng)的發(fā)送時(shí)間戳隊(duì)列隊(duì)頭取出一個(gè)時(shí)間戳并將其返回給用戶;如果用戶請(qǐng)求獲得接收時(shí)間戳,則時(shí)間戳存取模塊從與該用戶請(qǐng)求對(duì)應(yīng)的接收時(shí)間戳隊(duì)列隊(duì)頭取出一個(gè)時(shí)間戳并將其返回給用戶。
3.根據(jù)權(quán)利要求1的方法,其特征在于,步驟4中,用戶進(jìn)程發(fā)送一個(gè)數(shù)據(jù)包之后,在發(fā)送另一個(gè)數(shù)據(jù)包之前,必須且只能從時(shí)間戳存取模塊取回一個(gè)發(fā)送時(shí)間戳,用戶進(jìn)程接收一個(gè)數(shù)據(jù)包之后,在接收另一個(gè)數(shù)據(jù)包之前,必須且只能從時(shí)間戳存取模塊取回一個(gè)接收時(shí)間戳。
4.根據(jù)權(quán)利要求1的方法,其特征在于,步驟4為解決接收數(shù)據(jù)包時(shí)可能遇到的時(shí)間戳與數(shù)據(jù)包之間不匹配的問(wèn)題,提出的時(shí)間戳回退檢查,包括步驟步驟1判斷接收的數(shù)據(jù)包是否符合包過(guò)濾器過(guò)濾條件,如果符合,進(jìn)入步驟2,否則將時(shí)間戳退回給時(shí)間戳存取模塊;步驟2如果接收的數(shù)據(jù)包不是用戶進(jìn)程想要打時(shí)間戳的數(shù)據(jù)包,則丟棄該數(shù)據(jù)包和本次獲得的時(shí)間戳,否則,該時(shí)間戳就是用戶需要的時(shí)間戳。
5.根據(jù)權(quán)利要求4的方法,其特征在于,步驟1中退回的時(shí)間戳將插入到時(shí)間戳存取模塊中接收時(shí)間戳隊(duì)列隊(duì)頭。
6.根據(jù)權(quán)利要求1和2和3所述方法,其特征在于,只要為包過(guò)濾器設(shè)置的過(guò)濾條件能唯一地確定應(yīng)用進(jìn)程發(fā)送的數(shù)據(jù)包,則通過(guò)上述方法得到的發(fā)送時(shí)間戳與發(fā)送數(shù)據(jù)包能正確地一對(duì)應(yīng)。
7.根據(jù)權(quán)利1和2和3和4和5所述方法,其特征在于,只要為包過(guò)濾器設(shè)置的過(guò)濾條件能全部覆蓋應(yīng)用進(jìn)程需要接收的數(shù)據(jù)包,且滿足過(guò)濾條件的到達(dá)數(shù)據(jù)包均能被應(yīng)用進(jìn)程接收,則通過(guò)本發(fā)明提出的精確時(shí)間戳方法得到的接收時(shí)間戳與接收數(shù)據(jù)包能正確地一一對(duì)應(yīng)。
全文摘要
一種計(jì)算機(jī)網(wǎng)絡(luò)通信中端主機(jī)系統(tǒng)精確標(biāo)記數(shù)據(jù)包時(shí)間戳的方法,包括步驟步驟1設(shè)置包過(guò)濾器過(guò)濾條件。為每一個(gè)用戶進(jìn)程設(shè)置一個(gè)時(shí)間戳存取模塊;步驟2用戶進(jìn)程發(fā)送或者接收數(shù)據(jù)包;步驟3包過(guò)濾器根據(jù)過(guò)濾條件在系統(tǒng)內(nèi)部捕獲用戶進(jìn)程發(fā)送或者接收的數(shù)據(jù)包,同時(shí)記錄時(shí)間戳信息,并將時(shí)間戳信息送給時(shí)間戳存取模塊;步驟4用戶進(jìn)程發(fā)送或接收一個(gè)數(shù)據(jù)包后,立即從時(shí)間戳存取模塊取回一個(gè)時(shí)間戳,將其作為該數(shù)據(jù)包的發(fā)送/接收時(shí)間戳(在接收數(shù)據(jù)包時(shí),要執(zhí)行時(shí)間戳回退檢查)。本發(fā)明方法可以在多任務(wù)并發(fā)的端主機(jī)系統(tǒng)中獲得穩(wěn)定、精確的網(wǎng)絡(luò)數(shù)據(jù)包時(shí)間戳信息,可應(yīng)用于網(wǎng)絡(luò)性能測(cè)量以及適應(yīng)性(Adaptive)網(wǎng)絡(luò)應(yīng)用等領(lǐng)域。
文檔編號(hào)G06F9/48GK1456977SQ0314273
公開(kāi)日2003年11月19日 申請(qǐng)日期2003年6月16日 優(yōu)先權(quán)日2003年6月16日
發(fā)明者王愷, 黃靖, 楊峰 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所