專利名稱:Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)互聯(lián)網(wǎng)軟件領(lǐng)域,尤其涉及一種Windows系統(tǒng)中控制程序網(wǎng)絡(luò) 流速的裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的軟件轉(zhuǎn)向互聯(lián)網(wǎng)化,大量的需要使用網(wǎng)絡(luò)的程序 程序在用戶的計算機(jī)中運(yùn)行,它們將在后臺使用互聯(lián)網(wǎng)進(jìn)行信息收集、自動升級等工作,需 要占用很多的網(wǎng)絡(luò)帶寬,并且經(jīng)常給用戶的網(wǎng)絡(luò)帶來非常大的瞬時流量,如果用戶此時正 在做瀏覽網(wǎng)頁、聊天、玩網(wǎng)絡(luò)游戲等事情,就會感覺系統(tǒng)很卡,用戶的交互感受會非常差。因 此需要一種能夠限制這些自動進(jìn)行網(wǎng)絡(luò)訪問的程序的流速,控制他們能夠使用的最高網(wǎng)絡(luò) 帶寬,保證那些用戶經(jīng)常使用的,需要及時響應(yīng)的程序總是能夠得到一定的網(wǎng)絡(luò)帶寬。
目前常用的流速控制方法中一種方法是讓那些后臺運(yùn)行的程序在使用網(wǎng)絡(luò)時自 己控制自己的網(wǎng)絡(luò)流量,通常一些下載軟件會提供這樣的功能,如BT, Flashget等常用下 載軟件。這種方法的局限性在于依賴于使用網(wǎng)絡(luò)的程序自身的功能,其他沒有實(shí)現(xiàn)流速控 制的軟件仍然有可能給用戶帶來困擾,另一個麻煩在于沒有統(tǒng)一的管理所有的程序流速的 地方,甚至都不知道有哪些程序訪問了網(wǎng)絡(luò),即使知道了 ,用戶必須得到一個個程序中去設(shè) 置每個程序的流速控制,操作起來非常麻煩。 另外一種方法是在操作系統(tǒng)層監(jiān)控所有的網(wǎng)絡(luò)發(fā)送和接收操作,這樣可以對所有 的程序的網(wǎng)絡(luò)訪問行為進(jìn)行控制,用戶也有一個統(tǒng)一的地方進(jìn)行設(shè)置,極大的方便了用戶 的操作。這種方法通常使用的方法是,掛鉤所有網(wǎng)絡(luò)訪問的API,攔截所有訪問網(wǎng)絡(luò)的程序 的發(fā)送和接收操作,發(fā)送時對于超過了流量的發(fā)送操作,先緩存發(fā)送的數(shù)據(jù),并阻塞該程序 的發(fā)送操作,等過一段時間后,滿足了程序的流速限制,再將數(shù)據(jù)發(fā)送出去。接收時對于超 過了流速限制的接收操作,先緩存接收的數(shù)據(jù),并阻塞程序的接收操作,等過一段時間后, 滿足了程序的流速限制,再將接收的數(shù)據(jù)發(fā)給程序。使用這種方法仍然存在一定的局限性, 首先它需要緩存用戶程序發(fā)送的數(shù)據(jù)和接收的數(shù)據(jù),這無疑會占用計算機(jī)的很多資源,另 一方面在接收數(shù)據(jù)的時候仍然要使用操作系統(tǒng)提供的接收數(shù)據(jù)的方法接收數(shù)據(jù),而在操作 系統(tǒng)接收數(shù)據(jù)的過程中,并不能控制某個接收動作的瞬時流速,操作系統(tǒng)總是被動的、近可 能快的接收數(shù)據(jù),它并不能告訴數(shù)據(jù)的發(fā)送者使用較慢的速率發(fā)送數(shù)據(jù)。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)中的不足,提供一種Windows系統(tǒng)中程序網(wǎng)絡(luò)流速 控制裝置。該程序網(wǎng)絡(luò)流速控制裝置不僅可以實(shí)現(xiàn)多個程序的網(wǎng)絡(luò)流速統(tǒng)一管理,而且無 需占用額外的計算機(jī)的資源。Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,
其包括 流速控制規(guī)則設(shè)置模塊,其內(nèi)存儲有各個應(yīng)用程序的流速控制信息,該流速信息 包括應(yīng)用程序的發(fā)送流速控制信息和接收流速控制信息;
內(nèi)核TDI攔截模塊,其在應(yīng)用程序通過TCP/UDP協(xié)議訪問網(wǎng)絡(luò)時獲取本地TCP/UDP 端口號、應(yīng)用程序ID、TCP/UDP連接的ID、連接次數(shù)、發(fā)送連接信息和接收連接信息;其中發(fā) 送連接信息和接收連接信息均包含已經(jīng)傳輸字節(jié)數(shù),上次傳輸時間,傳輸速率限額,限額有 效標(biāo)志;內(nèi)核TDI攔截模塊,還可以根據(jù)上次傳輸時間、當(dāng)前系統(tǒng)時間和本次要傳輸?shù)腎P數(shù) 據(jù)包大小計算出本次IP數(shù)據(jù)包的傳輸速度; 數(shù)據(jù)包攔截模塊,其能夠攔截到從操作系統(tǒng)網(wǎng)絡(luò)協(xié)議層發(fā)往操作系統(tǒng)數(shù)據(jù)包發(fā)送 層的IP數(shù)據(jù)包,數(shù)據(jù)包攔截模塊對攔截到的IP數(shù)據(jù)包反向解析出該IP數(shù)據(jù)包所對應(yīng)的應(yīng) 用程序ID,如果從內(nèi)核TDI攔截模塊計算出的該應(yīng)用程序本次IP數(shù)據(jù)包的傳輸速度大于流 速控制規(guī)則設(shè)置模塊中設(shè)置好的該應(yīng)用程序的控制流速值,則該數(shù)據(jù)包被丟棄,否則發(fā)送 或者接收該數(shù)據(jù)包。 本發(fā)明的有益效果是本發(fā)明Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置的三大模塊 分別完成三種主要功能,簡單的說,流速控制規(guī)則設(shè)置模塊中保存的是各個應(yīng)用程序的流 速控制信息,即各個程序的最大流速值,如果某個程序的瞬時流速超過該最大流速值是不 能進(jìn)行發(fā)包或收包操作的。內(nèi)核TDI攔截模塊是獲取每個數(shù)據(jù)包的屬性信息的,比如該數(shù) 據(jù)包對應(yīng)的應(yīng)用程序、該數(shù)據(jù)包的瞬時速度等。數(shù)據(jù)包攔截模塊是用于攔截數(shù)據(jù)包的,該數(shù) 據(jù)包能否通過由流速控制規(guī)則設(shè)置模塊和TDI攔截模塊中的信息進(jìn)行比對的結(jié)果來決定。 這樣就可以實(shí)現(xiàn)對所有應(yīng)用程序的網(wǎng)絡(luò)流速的控制,而且無需占用計算機(jī)的存儲資源,同 時也實(shí)現(xiàn)了多個應(yīng)用程序網(wǎng)絡(luò)流速的統(tǒng)一管理。
附圖1為本發(fā)明Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置結(jié)構(gòu)圖;
附圖2為流速控制規(guī)則設(shè)置模塊的結(jié)構(gòu)圖;
附圖3為內(nèi)核TDI攔截模塊的結(jié)構(gòu)圖;
附圖4為數(shù)據(jù)包攔截模塊的結(jié)構(gòu)圖。
具體實(shí)施例方式
Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,
其包括 流速控制規(guī)則設(shè)置模塊,其內(nèi)存儲有各個應(yīng)用程序的流速控制信息,該流速信息 包括應(yīng)用程序的發(fā)送流速控制信息和接收流速控制信息; 內(nèi)核TDI攔截模塊,其在應(yīng)用程序通過TCP/UDP協(xié)議訪問網(wǎng)絡(luò)時獲取本地TCP/UDP 端口號、應(yīng)用程序ID、TCP/UDP連接的ID、連接次數(shù)、發(fā)送連接信息和接收連接信息;其中發(fā) 送連接信息和接收連接信息均包含已經(jīng)傳輸字節(jié)數(shù),上次傳輸時間,傳輸速率限額,限額有 效標(biāo)志;內(nèi)核TDI攔截模塊,還可以根據(jù)上次傳輸時間、當(dāng)前系統(tǒng)時間和本次要傳輸?shù)腎P數(shù) 據(jù)包大小計算出本次IP數(shù)據(jù)包的傳輸速度; 數(shù)據(jù)包攔截模塊,其能夠攔截到從操作系統(tǒng)網(wǎng)絡(luò)協(xié)議層發(fā)往操作系統(tǒng)數(shù)據(jù)包發(fā)送 層的IP數(shù)據(jù)包,數(shù)據(jù)包攔截模塊對攔截到的IP數(shù)據(jù)包反向解析出該IP數(shù)據(jù)包所對應(yīng)的應(yīng) 用程序ID,如果從內(nèi)核TDI攔截模塊計算出的該應(yīng)用程序本次IP數(shù)據(jù)包的傳輸速度大于流 速控制規(guī)則設(shè)置模塊中設(shè)置好的該應(yīng)用程序的控制流速值,則該數(shù)據(jù)包被丟棄,否則發(fā)送或者接收該數(shù)據(jù)包。 上述裝置通過在windows操作系統(tǒng)底層攔截網(wǎng)絡(luò)數(shù)據(jù)包的方式,實(shí)現(xiàn)對程序的流 速控制,通過有選擇的丟棄發(fā)送數(shù)據(jù)包和接收數(shù)據(jù)包,達(dá)到限制程序流速的目的。對被限制 了流速的使用網(wǎng)絡(luò)的程序來說,就好象計算機(jī)處于一個比較慢的網(wǎng)絡(luò)中。這種方法的原理 是,不論是數(shù)據(jù)發(fā)送的計算機(jī)和數(shù)據(jù)接收的計算機(jī),windows操作系統(tǒng)都會自動根據(jù)網(wǎng)絡(luò)協(xié) 議進(jìn)行數(shù)據(jù)發(fā)送和接收的速率進(jìn)行調(diào)整,當(dāng)檢測一個程序發(fā)送的流速超過了流速限制時, 自動丟棄當(dāng)前發(fā)送的數(shù)據(jù)包,windows操作系統(tǒng)也就收不到接收數(shù)據(jù)的windows操作系統(tǒng) 發(fā)送的接收確認(rèn)回應(yīng)包,它將等待一段時間再次重新發(fā)送該數(shù)據(jù)包,如果此時能夠符合程 序的流速限制,該數(shù)據(jù)包將被發(fā)送,重復(fù)該過程就能夠達(dá)到控制發(fā)送流速的效果。接收數(shù)據(jù) 包的時候,檢測發(fā)個該程序的流速是否超過流速限制,自動丟棄接收的數(shù)據(jù)包,這時發(fā)送數(shù) 據(jù)的windows操作系統(tǒng)檢測不到接收確認(rèn)回應(yīng)包,它將等待一段時間再次重新發(fā)送該數(shù)據(jù) 包,本機(jī)接收到該數(shù)據(jù)包后,如果此時符合程序的流速限制,該數(shù)據(jù)將被發(fā)給windows操作 系統(tǒng),重復(fù)該過程就能夠達(dá)到控制接收流速的效果,因此這種方法既可以監(jiān)控所有程序的 網(wǎng)絡(luò)訪問,又不用緩存數(shù)據(jù)占用系統(tǒng)資源,并且利用windows操作系統(tǒng)對網(wǎng)絡(luò)協(xié)議的支持 自動調(diào)整發(fā)送和接收的速率。 下面參照附圖1-4介紹上述Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置中三個模塊的 詳細(xì)結(jié)構(gòu)。 —、控制規(guī)則設(shè)置模塊,它是用來告訴用戶當(dāng)前應(yīng)用程序流速信息和讓用戶設(shè)置 應(yīng)用程序流速控制信息的模塊。它包含用戶輸入模塊,流速控制顯示模塊和流速控制信息 收集模塊。 a)用戶輸入模塊,是用戶輸入某個應(yīng)用程序流速的模塊,應(yīng)用程序的流速控制信 息由用戶通過用戶輸入模塊設(shè)定。 b)流速控制顯示模塊,用來顯示當(dāng)前正在訪問網(wǎng)絡(luò)的程序的流速和流速控制信息 的界面,該模塊作為本發(fā)明裝置的附加功能,可以使用戶直觀的看到各個程序訪問網(wǎng)絡(luò)的 情況,以及各個程序的網(wǎng)絡(luò)流速設(shè)定值。 c)流速控制信息收集模塊用來收集用戶設(shè)置的應(yīng)用程序的流速控制信息,這些 流速控制信息存儲在流速控制信息表中。流速控制信息收集模塊為內(nèi)核TDI攔截模塊提供 程序流速控制的信息;并且在控制規(guī)則設(shè)置模塊退出的時候負(fù)責(zé)將應(yīng)用程序的流速控制信 息保存起來,在控制規(guī)則設(shè)置模塊下次啟動時,自動讀取上次保存的應(yīng)用程序流速控制信 息。流速控制信息表中的每項(xiàng)數(shù)據(jù)定義為數(shù)據(jù)一,它包含應(yīng)用程序ID、發(fā)送速率限額、發(fā) 送限額有效標(biāo)志、接收速率限額、接收限額有效標(biāo)志。需要指出的是,流速控制信息表中一 般會有多項(xiàng)數(shù)據(jù)一,各項(xiàng)數(shù)據(jù)一的值是不同的,并不是說所有的數(shù)據(jù)一都代表同一個值,下 文所述的數(shù)據(jù)二到數(shù)據(jù)七也是同樣的道理。 二、內(nèi)核TDI攔截模塊,攔截應(yīng)用程序訪問網(wǎng)絡(luò)的動作,為數(shù)據(jù)包攔截模塊提供是 否允許某個數(shù)據(jù)包發(fā)送或接收的指令信息。它包含TCP過濾驅(qū)動模塊、UDP過濾驅(qū)動模塊、 流速數(shù)據(jù)管理模塊和流速計算模塊。 a) TCP過濾驅(qū)動模塊,通過實(shí)現(xiàn)windows操作系統(tǒng)標(biāo)準(zhǔn)的與TCP協(xié)議相關(guān)的TDI接 口 , TCP過濾驅(qū)動模塊能夠攔截所有通過TCP協(xié)議訪問網(wǎng)絡(luò)的應(yīng)用程序建立TCP連接和結(jié) 束TCP連接的請求,并且解析出這些請求所對應(yīng)的本地端口號,應(yīng)用程序的ID, TCP連接的ID和應(yīng)用程序的路徑等信息。實(shí)現(xiàn)標(biāo)準(zhǔn)TDI接口的方法可以參考MCR0S0FT MSDN文檔,此 文檔為本領(lǐng)域公知文檔,在此不做贅述。 b) UDP過濾驅(qū)動模塊,通過實(shí)現(xiàn)windows操作系統(tǒng)標(biāo)準(zhǔn)的與UDP協(xié)議相關(guān)的TDI接 口 ,它能夠攔截所有通過UDP協(xié)議訪問網(wǎng)絡(luò)的應(yīng)用程序建立UDP連接和結(jié)束UDP連接的請 求,并且解析出這些請求所對應(yīng)的端口號,應(yīng)用程序的ID,UDP連接的ID和應(yīng)用程序的路徑 等信息。實(shí)現(xiàn)標(biāo)準(zhǔn)TDI接口的方法可以參考MCROSOFT MSDN文檔。 c)流速數(shù)據(jù)管理模塊,管理當(dāng)前正在訪問網(wǎng)絡(luò)的應(yīng)用程序的流速信息。流速數(shù)據(jù) 管理模塊管理了如下的數(shù)據(jù)列表 i. TCP端口協(xié)議映射表表示當(dāng)前windows操作系統(tǒng)中所有通過TCP協(xié)議打開的 TCP連接的端口列表和端口所對應(yīng)的應(yīng)用程序ID,表中每項(xiàng)數(shù)據(jù)定義為數(shù)據(jù)二,它包含 TCP連接的ID、本地TCP端口,應(yīng)用程序ID。 ii. UDP端口協(xié)議映射表表示當(dāng)前windows操作系統(tǒng)中所有通過UDP協(xié)議打開 的UDP連接的端口列表和端口所對應(yīng)的應(yīng)用程序ID,表中每項(xiàng)數(shù)據(jù)定義為數(shù)據(jù)三,它包含 UDP連接的ID、本地UDP端口 ,應(yīng)用程序ID。 iii.流速控制信息表其與所述流速控制規(guī)則設(shè)置模塊中的流速控制信息表內(nèi) 容一致;是流速信息收集模塊傳遞給該模塊的流速控制信息。 iv.活動流速控制表表示當(dāng)前所有正在使用網(wǎng)絡(luò)進(jìn)行通信的應(yīng)用程序所對應(yīng)的 流速控制信息列表。表中的每項(xiàng)數(shù)據(jù)定義為數(shù)據(jù)四,它包含應(yīng)用程序ID,連接計數(shù)(有些 應(yīng)用程序可能通過不同端口多次進(jìn)行網(wǎng)絡(luò)連接),發(fā)送連接信息,接收連接信息。數(shù)據(jù)四中 的發(fā)送連接信息和接收連接信息都均包含已經(jīng)傳輸字節(jié)數(shù),上次傳輸時間,傳輸速率限額, 限額有效標(biāo)志;在此將已經(jīng)傳輸字節(jié)數(shù),上次傳輸時間,傳輸速率限額,限額有效標(biāo)志這些 信息定義為數(shù)據(jù)五。 d)流速計算模塊,計算某個數(shù)據(jù)包發(fā)送時,應(yīng)用程序當(dāng)前訪問網(wǎng)絡(luò)的流速,并能給 出是否超出流速限制的信息。 三、數(shù)據(jù)包攔截模塊,攔截所有系統(tǒng)發(fā)送和接收到的IP數(shù)據(jù)包,并能夠通過攔截 這些IP數(shù)據(jù)包達(dá)到控制應(yīng)用程序的流速的目的。數(shù)據(jù)包攔截模塊包括NDIS中間層驅(qū)動模 塊和數(shù)據(jù)包協(xié)議解析模塊。 a) NDIS中間層驅(qū)動模塊,通過實(shí)現(xiàn)windows操作系統(tǒng)標(biāo)準(zhǔn)的NDIS中間層接口 ,實(shí) 現(xiàn)對所有系統(tǒng)發(fā)送和接收的IP數(shù)據(jù)包的攔截。實(shí)現(xiàn)標(biāo)準(zhǔn)NDIS中間層接口的方法可以參考 MCROSOFTMSDN文檔。 b)數(shù)據(jù)包協(xié)議解析模塊,通過解析NDIS中間層驅(qū)動模塊攔截到的IP數(shù)據(jù)包,得 出IP數(shù)據(jù)包所對應(yīng)的網(wǎng)絡(luò)協(xié)議,端口號和數(shù)據(jù)包的大小并得到數(shù)據(jù)六,數(shù)據(jù)六包括IP數(shù)據(jù) 包ID,協(xié)議類型、協(xié)議端口號、IP數(shù)據(jù)包傳輸方向、IP數(shù)據(jù)包的大小、windows系統(tǒng)當(dāng)前的 時間。 下面介紹本發(fā)明Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置的運(yùn)行原理。 操作系統(tǒng)的網(wǎng)絡(luò)訪問體系結(jié)構(gòu)從邏輯上大致可以分成如圖1所示的3個部分操
作系統(tǒng)網(wǎng)絡(luò)訪問API層,操作系統(tǒng)網(wǎng)絡(luò)協(xié)議層,操作系統(tǒng)數(shù)據(jù)包發(fā)送層,其中操作系統(tǒng)網(wǎng)絡(luò)
訪問API層是操作系統(tǒng)提供給應(yīng)用程序訪問網(wǎng)絡(luò)的API接口,應(yīng)用程序使用這些API直接
訪問網(wǎng)絡(luò),而不需要擔(dān)心具體的硬件環(huán)境,也不需要關(guān)心使用的通訊協(xié)議的具體細(xì)節(jié)。操作系統(tǒng)網(wǎng)絡(luò)協(xié)議層為應(yīng)用程序封裝了大部分的標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn),操作系統(tǒng)在這一層也 不需要關(guān)心具體的硬件環(huán)境,僅僅實(shí)現(xiàn)通信協(xié)議,如TCP, UDP, IP等通信協(xié)議,并將封裝好 的數(shù)據(jù)包發(fā)送給數(shù)據(jù)包發(fā)送層。而操作系統(tǒng)數(shù)據(jù)包發(fā)送層則負(fù)責(zé)針對不同的硬件環(huán)境,將 數(shù)據(jù)包發(fā)送到具體的硬件網(wǎng)絡(luò)上。同時操作系統(tǒng)在網(wǎng)絡(luò)協(xié)議層建立數(shù)據(jù)包與應(yīng)用層序之間 的映射關(guān)系,操作系統(tǒng)通過協(xié)議與端口建立這種映射關(guān)系,應(yīng)用程序在訪問網(wǎng)絡(luò)的時候必 須指定一個相應(yīng)的協(xié)議類型與該協(xié)議相關(guān)的端口 ,如果沒有指定,那么操作系統(tǒng)自動指定 一個,就目前的標(biāo)準(zhǔn)來說,TCP與UDP協(xié)議都允許有65536個端口 。 如前文所述,我們需要在操作系統(tǒng)將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上之前進(jìn)行攔截,同時判斷 流速限制,因此我們也需要將數(shù)據(jù)包與應(yīng)用程序進(jìn)行關(guān)聯(lián),內(nèi)核TDI攔截模塊正是做這樣 的事情,并將應(yīng)用程序如何與數(shù)據(jù)包進(jìn)行映射的數(shù)據(jù)傳遞給數(shù)據(jù)包攔截模塊。數(shù)據(jù)包攔截 模塊攔截到數(shù)據(jù)包后,反向解析數(shù)據(jù)包的內(nèi)容,解析出數(shù)據(jù)包所對應(yīng)的協(xié)議類型與端口信 息,再根據(jù)內(nèi)核TDI攔截模塊提供的協(xié)議和端口與應(yīng)用程序之間的映射關(guān)系為數(shù)據(jù)包找到 對應(yīng)用程序ID,根據(jù)應(yīng)用程序的ID從流速控制模塊中查詢該應(yīng)用程序的流速限制,并判斷 該數(shù)據(jù)包的發(fā)送和接收是否超過了限制,如果沒有超過就發(fā)送或接收該數(shù)據(jù)包,否則直接 丟棄該數(shù)據(jù)包。 以下是本發(fā)明Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置的運(yùn)行過程。 —、操作系統(tǒng)啟動時,內(nèi)核TDI攔截模塊與數(shù)據(jù)包攔截模塊啟動。 二、內(nèi)核TDI攔截模塊啟動時,啟動TCP過濾驅(qū)動模塊、UDP過濾驅(qū)動模塊、流量數(shù)
據(jù)管理模塊和流量計算模塊。 三、數(shù)據(jù)包攔截模塊啟動時,啟動數(shù)據(jù)包解析模塊。 四、流速控制模塊啟動,并且啟動用戶輸入模塊、流量控制顯示模塊和流量控制信 息收集模塊。 內(nèi)核TDI攔截模塊運(yùn)行過程解析 A、如果某個應(yīng)用程序使用TCP協(xié)議訪問網(wǎng)絡(luò),在該應(yīng)用程序訪問網(wǎng)絡(luò)之前, windows操作系統(tǒng)為本次網(wǎng)絡(luò)訪問分配一個TCP連接,在windows系統(tǒng)中被稱為套接字 (SOCKET)。應(yīng)用程序先使用該套接字使用windows操作系統(tǒng)提供的網(wǎng)絡(luò)訪問API為該TCP 建立連接,此時TDI攔截模塊中的TCP過濾驅(qū)動模塊會攔截到應(yīng)用程序建立TCP連接的請 求,它能夠得到本次TCP連接請求的本地TCP端口 , TCP連接的ID (SOCKET所對應(yīng)的windows 操作系統(tǒng)網(wǎng)絡(luò)連接內(nèi)核對象的地址),并且能夠使用windows操作系統(tǒng)提供的內(nèi)核API根據(jù) TCP連接的ID得到本次TCP連接請求的所對應(yīng)的應(yīng)用程序ID (應(yīng)用程序的全路徑)。記得 到一項(xiàng)數(shù)據(jù)二,并將數(shù)據(jù)二傳遞給流速數(shù)據(jù)管理模塊。 B、流速數(shù)據(jù)管理模塊得到數(shù)據(jù)二后,將數(shù)據(jù)二保存到TCP端口協(xié)議映射表中,并 且根據(jù)應(yīng)用程序ID在活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng),如果找到,將數(shù)據(jù)項(xiàng)中的連接 計數(shù)加1 ;如果沒有找到,創(chuàng)建一項(xiàng)新的數(shù)據(jù)四,將本項(xiàng)新的數(shù)據(jù)四中的應(yīng)用程序ID初始化 為本步驟所述數(shù)據(jù)二中的應(yīng)用程序ID,連接計數(shù)初始化為l,發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù)信 息中的傳輸速率以及上次發(fā)送時間初始化為零。并從流速控制信息表中查找應(yīng)用程序ID 對應(yīng)的流速控制信息,如果查找不到流速控制信息就將本項(xiàng)數(shù)據(jù)四中的發(fā)送數(shù)據(jù)信息和接 收數(shù)據(jù)信息中的傳輸限額初始化為零,限額標(biāo)志都初始化為否(代表不進(jìn)行流速限制);如 果查找到,就將數(shù)據(jù)四中的發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù)信息初始化初始化為應(yīng)用程序ID所對應(yīng)的數(shù)據(jù)一中的限額信息。本項(xiàng)數(shù)據(jù)四初始化完畢后加入到活動流速控制表中。
C、應(yīng)用程序結(jié)束使用TCP協(xié)議訪問網(wǎng)絡(luò),此時TDI攔截模塊中的TCP過濾驅(qū)動模 塊會攔截到應(yīng)用程序結(jié)束TCP連接的請求,它能夠得到本次TCP連接請求的本地TCP端口 , 本次TCP連接請求的TCP連接的ID,并且能夠使用windows操作系統(tǒng)提供的內(nèi)核API根據(jù) TCP連接的ID得到本次TCP連接請求的所對應(yīng)的應(yīng)用程序ID,即得到另一項(xiàng)數(shù)據(jù)二,然后 將該另一項(xiàng)數(shù)據(jù)二傳遞給流速數(shù)據(jù)管理模塊。 D、流速數(shù)據(jù)管理模塊得到所述另一項(xiàng)數(shù)據(jù)二后,根據(jù)另一項(xiàng)數(shù)據(jù)二中的TCP連接 的ID查找到TCP端口協(xié)議映射表中的對應(yīng)的數(shù)據(jù)項(xiàng),并且從TCP端口協(xié)議映射表中刪除, 根據(jù)另一項(xiàng)數(shù)據(jù)二中的應(yīng)用程序ID,在活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng),將數(shù)據(jù)項(xiàng)中 的連接計數(shù)減l,如果數(shù)據(jù)項(xiàng)中的連接計數(shù)已經(jīng)為零,那么從活動流速控制表中刪除該數(shù)據(jù) 項(xiàng)。 a、如果某個應(yīng)用程序使用UDP協(xié)議訪問網(wǎng)絡(luò),在該應(yīng)用程序訪問網(wǎng)絡(luò)之前, windows操作系統(tǒng)為本次網(wǎng)絡(luò)訪問分配一個UDP連接,在windows系統(tǒng)中被稱為套接字 (SOCKET)。應(yīng)用程序先使用該套接字使用windows操作系統(tǒng)提供的網(wǎng)絡(luò)訪問API為該UDP 建立連接,此時TDI攔截模塊中的UDP過濾驅(qū)動模塊會攔截到應(yīng)用程序建立UDP連接的請 求,它能夠得到本次UDP連接請求的本地UDP端口 , UDP連接的ID (SOCKET所對應(yīng)的windows 操作系統(tǒng)網(wǎng)絡(luò)連接內(nèi)核對象的地址),并且能夠使用windows操作系統(tǒng)提供的內(nèi)核API根據(jù) UDP連接的ID得到本次UDP連接請求的所對應(yīng)的應(yīng)用程序ID (應(yīng)用程序的全路徑)。于是 得到數(shù)據(jù)三,并將該數(shù)據(jù)三傳遞給流速數(shù)據(jù)管理模塊。 b、流速數(shù)據(jù)管理模塊得到數(shù)據(jù)三后,將數(shù)據(jù)三保存到UDP端口協(xié)議映射表中,并 且根據(jù)應(yīng)用程序ID在活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng),如果找到,將數(shù)據(jù)項(xiàng)中的連接 計數(shù)加1 ;如果沒有找到,創(chuàng)建一項(xiàng)數(shù)據(jù)四,將本項(xiàng)數(shù)據(jù)四中的應(yīng)用程序ID初始化為數(shù)據(jù)一 中的應(yīng)用程序ID,連接計數(shù)初始化為l,發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù)信息中的傳輸速率以及 上次發(fā)送時間初始化為零。并從流速控制信息表中查找應(yīng)用程序?qū)?yīng)的流速控制信息,如 果查找不到就將本項(xiàng)數(shù)據(jù)四中的發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù)信息中的傳輸限額初始化為零, 限額標(biāo)志都初始化為否;如果查找到,就將數(shù)據(jù)四中的發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù)信息初始 化初始化為應(yīng)用程序ID所對應(yīng)的數(shù)據(jù)一中的限額信息。本項(xiàng)數(shù)據(jù)四初始化完畢后加入到 活動流速控制表中。 c、應(yīng)用程序結(jié)束使用UDP協(xié)議訪問網(wǎng)絡(luò),此時TDI攔截模塊中的UDP過濾驅(qū)動模 塊會攔截到應(yīng)用程序結(jié)束UDP連接的請求,它能夠得到本次UDP連接請求的本地UDP端口 , 本次UDP連接請求的UDP連接的ID,并且能夠使用windows操作系統(tǒng)提供的內(nèi)核API根據(jù) UDP連接的ID得到本次UDP連接請求的所對應(yīng)的應(yīng)用程序ID,即得到另一項(xiàng)數(shù)據(jù)三,并且 將該另一項(xiàng)數(shù)據(jù)三傳遞給流速數(shù)據(jù)管理模塊。 d、流速數(shù)據(jù)管理模塊得到該另一項(xiàng)數(shù)據(jù)三后,根據(jù)另一項(xiàng)數(shù)據(jù)三中的UDP連接的 ID查找到UDP端口協(xié)議映射表中的對應(yīng)的數(shù)據(jù)項(xiàng),并且從UDP端口協(xié)議映射表中刪除。根 據(jù)另一項(xiàng)數(shù)據(jù)三中的應(yīng)用程序ID,在活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng),如果找到,將數(shù) 據(jù)項(xiàng)中的連接計數(shù)減l,如果數(shù)據(jù)項(xiàng)中的連接計數(shù)已經(jīng)為零,那么從活動流速控制表中刪除 該數(shù)據(jù)項(xiàng)。 無論應(yīng)用程序使用TCP還是UDP協(xié)議訪問網(wǎng)絡(luò),流速數(shù)據(jù)管理模塊每次更新活動流速控制表,就將新的活動流速控制表傳遞給流速控制規(guī)則設(shè)置模塊。需要說明的是,活動 流速控制表不僅在應(yīng)用程序開始訪問或者結(jié)束訪問網(wǎng)絡(luò)的時候更新,在應(yīng)用程序訪問網(wǎng)絡(luò) 過程中,隨著數(shù)據(jù)包的發(fā)送和接收,活動流速控制表中的數(shù)據(jù)五中的已傳輸字節(jié)數(shù)和上次 傳輸時間信息也是在改變的,這些信息的改變就反映出應(yīng)用程序網(wǎng)絡(luò)連接的流速,因此,活 動流速控制表一般是只要有應(yīng)用程序進(jìn)行網(wǎng)絡(luò)連接都在更新的。 流速控制規(guī)則設(shè)置模塊收到活動流速控制表后,傳遞給流速控制信息收集模塊。
流速控制信息收集模塊收到活動流速控制表后,保存活動流速控制表,并且將活 動流速控制表和流速控制信息表傳遞給流速控制顯示模塊。 流速控制顯示模塊收到活動流速控制表和流速控制信息表后,保存活動流速控制 表和流速控制信息表,并且根據(jù)活動流速控制表和流速控制信息表顯示當(dāng)前系統(tǒng)中程序的 流速和流速控制信息。 數(shù)據(jù)包攔截模塊與所述內(nèi)核TDI攔截模塊交互運(yùn)行過程解析
—、NDIS中間層驅(qū)動模塊啟動后,當(dāng)windows操作系統(tǒng)需要發(fā)送和接收IP數(shù)據(jù)包 時,就會通知NDIS中間層驅(qū)動模塊,并且將要傳輸?shù)腎P數(shù)據(jù)包的內(nèi)容傳遞給NDIS中間層 驅(qū)動模塊。NDIS中間層驅(qū)動模塊收到IP數(shù)據(jù)包后將該IP數(shù)據(jù)包傳遞給數(shù)據(jù)包協(xié)議解析模 塊,并且要求數(shù)據(jù)包協(xié)議解析模塊解析IP數(shù)據(jù)包所對應(yīng)的協(xié)議和端口 ,并且生成數(shù)據(jù)六, 數(shù)據(jù)六包含IP數(shù)據(jù)包ID,協(xié)議類型、協(xié)議端口、數(shù)據(jù)包傳輸方向、數(shù)據(jù)包的大小、windows 系統(tǒng)當(dāng)前的時間。然后將數(shù)據(jù)六傳遞給TDI內(nèi)核攔截模塊,要求TDI內(nèi)核攔截模塊傳遞回 數(shù)據(jù)七,該數(shù)據(jù)七包含IP數(shù)據(jù)包ID、是否允許IP數(shù)據(jù)包發(fā)送或者接收標(biāo)志。如果數(shù)據(jù)七中 的是否允許IP數(shù)據(jù)包發(fā)送或者接收標(biāo)志為是,則發(fā)送或者接收該向數(shù)據(jù)七中IP數(shù)據(jù)包ID 所對應(yīng)的IP數(shù)據(jù)包,否則不發(fā)送或者接收該向數(shù)據(jù)七中IP數(shù)據(jù)包ID所對應(yīng)的IP數(shù)據(jù)包; 也就是根據(jù)數(shù)據(jù)七的結(jié)果來允許或者拒絕該數(shù)據(jù)包的發(fā)送或者接收。 二、 TDI內(nèi)核攔截模塊收到數(shù)據(jù)六后,將數(shù)據(jù)六傳遞給流速數(shù)據(jù)管理模塊,并且要
求流速數(shù)據(jù)管理模塊返回數(shù)據(jù)七,然后將數(shù)據(jù)七返回給NDIS中間層驅(qū)動模塊。 三、流速數(shù)據(jù)管理模塊收到數(shù)據(jù)六后,根據(jù)數(shù)據(jù)六中的協(xié)議類型從TCP端口協(xié)議
映射表或者從UDP端口協(xié)議映射表中根據(jù)數(shù)據(jù)六中的端口信息查找對應(yīng)的數(shù)據(jù)項(xiàng)。如果能
夠查找到數(shù)據(jù)項(xiàng),根據(jù)數(shù)據(jù)項(xiàng)中的應(yīng)用程序ID從活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng)數(shù)
據(jù)四。并且將數(shù)據(jù)四與數(shù)據(jù)六傳遞給流速計算模塊,并要求流速計算模塊返回數(shù)據(jù)七,將數(shù)
據(jù)七返回給TDI內(nèi)核攔截模塊。 四、流速計算模塊收到數(shù)據(jù)四和數(shù)據(jù)六后,首先根據(jù)數(shù)據(jù)六中的數(shù)據(jù)包傳輸方向 確定出是發(fā)送數(shù)據(jù)還是接收數(shù)據(jù),如果是發(fā)送數(shù)據(jù),則從數(shù)據(jù)四中取出發(fā)送數(shù)據(jù)信息,結(jié)合 數(shù)據(jù)六計算出數(shù)據(jù)七,并且根據(jù)數(shù)據(jù)六,計算出新的發(fā)送數(shù)據(jù)信息,保存到數(shù)據(jù)四中;如果 是接收數(shù)據(jù),則從數(shù)據(jù)四中取出接收數(shù)據(jù)信息,結(jié)合數(shù)據(jù)六計算出數(shù)據(jù)七,并且根據(jù)數(shù)據(jù) 六,計算出新的接收數(shù)據(jù)信息,保存到數(shù)據(jù)四中;然后將數(shù)據(jù)七返回給流速數(shù)據(jù)管理模塊, 并且將新的數(shù)據(jù)四傳遞給流速數(shù)據(jù)管理模塊,流速數(shù)據(jù)管理模塊收到新的數(shù)據(jù)四后保存到 活動流速控制表中。 流速控制規(guī)則設(shè)置模塊與所述內(nèi)核TDI攔截模塊交互運(yùn)行過程解析 —、用戶選中流速控制顯示模塊中的一項(xiàng),并且選擇設(shè)置流速控制命令,流速控制
顯示模塊將用戶選中項(xiàng)取出應(yīng)用程序ID,從流速控制信息表中對應(yīng)的數(shù)據(jù)項(xiàng)數(shù)據(jù)一,如果查找不到,就生成一個空的數(shù)據(jù)二,并且用應(yīng)用程序ID初始化數(shù)據(jù)一 ;將數(shù)據(jù)一傳遞給用戶輸入模塊。 二、用戶輸入模塊收到數(shù)據(jù)一后,將根據(jù)數(shù)據(jù)一顯示應(yīng)用程序所對應(yīng)的流速控制信息,等待用戶輸入控制信息,用戶輸入完成后,生成新的數(shù)據(jù)一,將新的數(shù)據(jù)一傳遞給流速控制信息收集模塊。 三、流速控制信息收集模塊收到用戶輸入模塊發(fā)送的數(shù)據(jù)一后,將數(shù)據(jù)一保存在流速控制信息表中。然后將新的流速控制信息表和保存的活動流速信息表傳遞給流速控制顯示模塊,并要求流速控制顯示模塊重新顯示出當(dāng)前系統(tǒng)中的程序的流速信息和流速控制信息。并且將新的流速控制信息表傳遞給TDI內(nèi)核攔截模塊。 四、TDI內(nèi)核攔截模塊收到流速控制信息收集模塊發(fā)送過來的流速控制信息表后,更新自己保存的流速控制信息表。 以上實(shí)施例描述僅用以說明而非限制本發(fā)明的技術(shù)方案。不脫離本發(fā)明精神和范圍的任何修改或局部替換,應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,其特征在于,包括流速控制規(guī)則設(shè)置模塊,其內(nèi)存儲有各個應(yīng)用程序的流速控制信息,該流速信息包括應(yīng)用程序的發(fā)送流速控制信息和接收流速控制信息;內(nèi)核TDI攔截模塊,其在應(yīng)用程序通過TCP/UDP協(xié)議訪問網(wǎng)絡(luò)時獲取本地TCP/UDP端口號、應(yīng)用程序ID、TCP/UDP連接的ID、連接次數(shù)、發(fā)送連接信息和接收連接信息;其中發(fā)送連接信息和接收連接信息均包含已經(jīng)傳輸字節(jié)數(shù),上次傳輸時間,傳輸速率限額,限額有效標(biāo)志;內(nèi)核TDI攔截模塊,還可以根據(jù)上次傳輸時間、當(dāng)前系統(tǒng)時間和本次要傳輸?shù)腎P數(shù)據(jù)包大小計算出本次IP數(shù)據(jù)包的傳輸速度;數(shù)據(jù)包攔截模塊,其能夠攔截到從操作系統(tǒng)網(wǎng)絡(luò)協(xié)議層發(fā)往操作系統(tǒng)數(shù)據(jù)包發(fā)送層的IP數(shù)據(jù)包,數(shù)據(jù)包攔截模塊對攔截到的IP數(shù)據(jù)包反向解析出該IP數(shù)據(jù)包所對應(yīng)的應(yīng)用程序ID,如果從內(nèi)核TDI攔截模塊計算出的該應(yīng)用程序本次IP數(shù)據(jù)包的傳輸速度大于流速控制規(guī)則設(shè)置模塊中設(shè)置好的該應(yīng)用程序的控制流速值,則該數(shù)據(jù)包被丟棄,否則發(fā)送或者接收該數(shù)據(jù)包。
2. 根據(jù)權(quán)利要求1所述Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,其特征在于, 流速控制規(guī)則設(shè)置模塊,其包括一流速控制信息收集模塊,流速控制信息收集模塊用來收集設(shè)置好的應(yīng)用程序的流速控制信息,流速控制信息存儲在流速控制信息表中;流速 控制信息表為所述內(nèi)核TDI攔截模塊提供應(yīng)用程序的流速控制信息,并且在流速控制規(guī)則 設(shè)置模塊退出時負(fù)責(zé)將應(yīng)用程序的流速控制信息保存起來,在流速控制規(guī)則設(shè)置模塊下次 啟動時,自動讀取上次保存的應(yīng)用程序的流速控制信息;流速控制信息表中的每項(xiàng)數(shù)據(jù)定 義為數(shù)據(jù)一,數(shù)據(jù)一包含應(yīng)用程序ID、發(fā)送速率限額、發(fā)送限額有效標(biāo)志,接收速率限額, 接收限額有效標(biāo)志;內(nèi)核TDI攔截模塊,其攔截應(yīng)用程序訪問網(wǎng)絡(luò)的動作,為下述數(shù)據(jù)包攔截模塊提供是 否允許某個數(shù)據(jù)包發(fā)送或接收的指令信息;內(nèi)核TDI攔截模塊進(jìn)一步包括TCP過濾驅(qū)動模塊,其攔截所有通過TCP協(xié)議訪問網(wǎng)絡(luò)的應(yīng)用程序建立TCP連接和結(jié) 束TCP連接的請求,并且解析出這些請求所對應(yīng)的本地TCP端口號,應(yīng)用程序的ID,應(yīng)用程 序的路徑和TCP連接的ID信息;所述本地TCP端口號,應(yīng)用程序的ID,和TCP連接的ID信 息定義為數(shù)據(jù)二;UDP過濾驅(qū)動模塊,其攔截所有通過UDP協(xié)議訪問網(wǎng)絡(luò)的應(yīng)用程序建立UDP連接和結(jié) 束UDP連接的請求,并且解析出這些請求所對應(yīng)的本地UDP端口號,應(yīng)用程序的ID,應(yīng)用程 序的路徑和UDP連接的ID信息;所述本地UDP端口號,應(yīng)用程序的ID和UDP連接的ID信 息定義為數(shù)據(jù)三;流速數(shù)據(jù)管理模塊,管理當(dāng)前正在訪問網(wǎng)絡(luò)的應(yīng)用程序的流速信息,流速數(shù)據(jù)管理模 塊管理了如下的數(shù)據(jù)列表i. TCP端口協(xié)議映射表表示當(dāng)前windows操作系統(tǒng)中所有通過TCP協(xié)議打開的TCP 連接的端口列表和端口所對應(yīng)的應(yīng)用程序ID,表中每項(xiàng)數(shù)據(jù)為數(shù)據(jù)二,即包含TCP連接的 ID、本地TCP端口 ,應(yīng)用程序ID ;ii. UDP端口協(xié)議映射表表示當(dāng)前windows操作系統(tǒng)中所有通過UDP協(xié)議打開的UDP 連接的端口列表和端口所對應(yīng)的應(yīng)用程序ID,表中每項(xiàng)數(shù)據(jù)為數(shù)據(jù)三,即包含UDP連接的 ID、本地UDP端口 ,應(yīng)用程序ID ;iii. 流速控制信息表其與所述流速控制規(guī)則設(shè)置模塊中的流速控制信息表內(nèi)容一致;iv. 活動流速控制表表示當(dāng)前所有正在使用網(wǎng)絡(luò)進(jìn)行通信的應(yīng)用程序所對應(yīng)的流速 控制信息列表;活動流速控制表中的每項(xiàng)數(shù)據(jù)定義為數(shù)據(jù)四,數(shù)據(jù)四包含應(yīng)用程序ID,連 接計數(shù),發(fā)送連接信息,接收連接信息;數(shù)據(jù)四中的發(fā)送連接信息和接收連接信息都均包含 已經(jīng)傳輸字節(jié)數(shù),上次傳輸時間,傳輸速率限額,限額有效標(biāo)志;已經(jīng)傳輸字節(jié)數(shù),上次傳輸 時間,傳輸速率限額,限額有效標(biāo)志這些信息定義為數(shù)據(jù)五;流速計算模塊,計算某個數(shù)據(jù)包發(fā)送時,應(yīng)用程序當(dāng)前當(dāng)前訪問網(wǎng)絡(luò)的流速,并能給出 是否超出流速限制的信息;數(shù)據(jù)包攔截模塊,其攔截所有Windows系統(tǒng)發(fā)送和接收到的IP數(shù)據(jù)包,數(shù)據(jù)包攔截模 塊包括NDIS中間層驅(qū)動模塊和數(shù)據(jù)包協(xié)議解析模塊;NDIS中間層驅(qū)動模塊通過實(shí)現(xiàn)windows操作系統(tǒng)標(biāo)準(zhǔn)的NDIS中間層接口 ,實(shí)現(xiàn)對所有 Windows系統(tǒng)發(fā)送和接收的IP數(shù)據(jù)包的攔截;數(shù)據(jù)包協(xié)議解析模塊通過解析NDIS中間層驅(qū)動模塊攔截到的IP數(shù)據(jù)包,得出IP數(shù) 據(jù)包所對應(yīng)的網(wǎng)絡(luò)協(xié)議類型,端口號和數(shù)據(jù)包的大小并得到數(shù)據(jù)六,數(shù)據(jù)六包括IP數(shù)據(jù)包 ID,協(xié)議類型、協(xié)議端口號、IP數(shù)據(jù)包傳輸方向、IP數(shù)據(jù)包的大小、windows系統(tǒng)當(dāng)前的時 間。
3. 根據(jù)權(quán)利要求2所述Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,其特征在于, 所述流速控制規(guī)則設(shè)置模塊還包括用戶輸入模塊,應(yīng)用程序的流速控制信息由用戶通過用戶輸入模塊設(shè)定。
4. 根據(jù)權(quán)利要求3所述Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,其特征在于, 所述流速控制規(guī)則設(shè)置模塊還包括流速控制顯示模塊,流速控制顯示模塊用來顯示當(dāng)前正在訪問網(wǎng)絡(luò)的程序的流速和流速控制信息,當(dāng)前正在訪問網(wǎng)絡(luò)的程序的流速和流速控 制信息分別由所述活動流速控制表和流速計算模塊提供。
5. 根據(jù)權(quán)利要求4所述Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,其特征在于, 所述內(nèi)核TDI攔截模塊與數(shù)據(jù)包攔截模塊在Windows操作系統(tǒng)啟動時啟動。
6. 根據(jù)權(quán)利要求4所述Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,其特征在于, 內(nèi)核TDI攔截模塊運(yùn)行過程是A、 如果某個應(yīng)用程序使用TCP協(xié)議訪問網(wǎng)絡(luò),內(nèi)核TDI攔截模塊中的TCP過濾驅(qū)動模 塊攔截到應(yīng)用程序建立TCP連接的請求,并得到本次TCP連接請求的本地TCP端口 , TCP連 接的ID和應(yīng)用程序ID,即得到一項(xiàng)數(shù)據(jù)二,然后將該項(xiàng)數(shù)據(jù)二傳遞給流速數(shù)據(jù)管理模塊;B、 流速數(shù)據(jù)管理模塊得到數(shù)據(jù)二后,將數(shù)據(jù)二保存到TCP端口協(xié)議映射表中,并且根 據(jù)應(yīng)用程序ID在活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng),如果找到,將數(shù)據(jù)項(xiàng)中的連接計數(shù) 加1 ;如果沒有找到,創(chuàng)建一項(xiàng)數(shù)據(jù)四,將本項(xiàng)數(shù)據(jù)四中的應(yīng)用程序ID初始化為本步驟所述 數(shù)據(jù)二中的應(yīng)用程序ID,連接計數(shù)初始化為l,發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù)信息中的傳輸速 率以及上次發(fā)送時間初始化為零,并從流速控制信息表中查找應(yīng)用程序ID對應(yīng)的流速控 制信息,如果查找不到流速控制信息就將本項(xiàng)數(shù)據(jù)四中的發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù)信息中 的傳輸限額初始化為零,限額標(biāo)志都初始化為否;如果查找到,就將數(shù)據(jù)四中的發(fā)送數(shù)據(jù)信 息和接收數(shù)據(jù)信息初始化為應(yīng)用程序ID所對應(yīng)的數(shù)據(jù)一中的限額信息,本項(xiàng)數(shù)據(jù)四初始化完畢后加入到活動流速控制表中;C、 應(yīng)用程序結(jié)束使用TCP協(xié)議訪問網(wǎng)絡(luò),內(nèi)核TDI攔截模塊中的TCP過濾驅(qū)動模塊會 攔截到應(yīng)用程序結(jié)束TCP連接的請求,并得到本次TCP連接請求的本地TCP端口 , TCP連接 的ID和應(yīng)用程序ID,即得到另一項(xiàng)數(shù)據(jù)二,然后將該另一項(xiàng)數(shù)據(jù)二傳遞給流速數(shù)據(jù)管理模 塊;D、 流速數(shù)據(jù)管理模塊得到另一項(xiàng)數(shù)據(jù)二后,根據(jù)另一項(xiàng)數(shù)據(jù)二中的TCP連接的ID查找 到TCP端口協(xié)議映射表中的對應(yīng)的數(shù)據(jù)項(xiàng),并且從TCP端口協(xié)議映射表中刪除,根據(jù)另一項(xiàng) 數(shù)據(jù)二中的應(yīng)用程序ID,在活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng),將數(shù)據(jù)項(xiàng)中的連接計數(shù) 減l,如果數(shù)據(jù)項(xiàng)中的連接計數(shù)已經(jīng)為零,那么從活動流速控制表中刪除該數(shù)據(jù)項(xiàng);a、 如果某個應(yīng)用程序使用UDP協(xié)議訪問網(wǎng)絡(luò),內(nèi)核TDI攔截模塊中的UDP過濾驅(qū)動模 塊攔截到應(yīng)用程序建立UDP連接的請求,并得到本次UDP連接請求的本地UDP端口 , UDP連 接的ID和應(yīng)用程序ID,即得到一項(xiàng)數(shù)據(jù)二,然后將該項(xiàng)數(shù)據(jù)二傳遞給流速數(shù)據(jù)管理模塊;b、 流速數(shù)據(jù)管理模塊得到步驟a中所述數(shù)據(jù)二后,將步驟a中所述數(shù)據(jù)二保存到UDP 端口協(xié)議映射表中,并且根據(jù)應(yīng)用程序ID在活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng),如果找 到,將數(shù)據(jù)項(xiàng)中的連接計數(shù)加1 ;如果沒有找到,創(chuàng)建一項(xiàng)數(shù)據(jù)四,將本項(xiàng)數(shù)據(jù)四中的應(yīng)用 程序ID初始化為數(shù)據(jù)二中的應(yīng)用程序ID,連接計數(shù)初始化為l,發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù) 信息中的傳輸速率以及上次發(fā)送時間初始化為零;并從流速控制信息表中查找應(yīng)用程序?qū)?應(yīng)的流速控制信息,如果查找不到就將本項(xiàng)數(shù)據(jù)四中的發(fā)送數(shù)據(jù)信息和接收數(shù)據(jù)信息中的 傳輸限額初始化為零,限額標(biāo)志都初始化為否;如果查找到,就將數(shù)據(jù)四中的發(fā)送數(shù)據(jù)信息 和接收數(shù)據(jù)信息初始化初始化為應(yīng)用程序ID所對應(yīng)的數(shù)據(jù)一中的限額信息,本項(xiàng)數(shù)據(jù)四 初始化完畢后加入到活動流速控制表中;c、 應(yīng)用程序結(jié)束使用UDP協(xié)議訪問網(wǎng)絡(luò),內(nèi)核TDI攔截模塊中的UDP過濾驅(qū)動模塊攔 截到應(yīng)用程序結(jié)束UDP連接的請求,并得到本次UDP連接請求的本地UDP端口 , UDP連接 的ID和應(yīng)用程序ID,即得到另一項(xiàng)數(shù)據(jù)三,然后將該另一項(xiàng)數(shù)據(jù)三傳遞給流速數(shù)據(jù)管理模 塊;d、 流速數(shù)據(jù)管理模塊得到另一項(xiàng)數(shù)據(jù)三后,根據(jù)另一項(xiàng)數(shù)據(jù)三中的UDP連接的ID查找 到UDP端口協(xié)議映射表中的對應(yīng)的數(shù)據(jù)項(xiàng),并且從UDP端口協(xié)議映射表中刪除;根據(jù)另一項(xiàng) 數(shù)據(jù)三中的應(yīng)用程序ID,在活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng),將數(shù)據(jù)項(xiàng)中的連接計數(shù) 減l,如果數(shù)據(jù)項(xiàng)中的連接計數(shù)已經(jīng)為零,那么從活動流速控制表中刪除該數(shù)據(jù)項(xiàng);無論應(yīng)用程序使用TCP還是UDP協(xié)議訪問網(wǎng)絡(luò),流速數(shù)據(jù)管理模塊每次更新活動流速 控制表,就將新的活動流速控制表傳遞給流速控制規(guī)則設(shè)置模塊;流速控制規(guī)則設(shè)置模塊收到活動流速控制表后,傳遞給流速控制信息收集模塊;流速控制信息收集模塊收到活動流速控制表后,保存活動流速控制表,并且將活動流 速控制表和流速控制信息表傳遞給流速控制顯示模塊;流速控制顯示模塊收到活動流速控制表和流速控制信息表后,保存活動流速控制表和 流速控制信息表,并且根據(jù)活動流速控制表和流速控制信息表顯示當(dāng)前系統(tǒng)中程序的流速 和流速控制信息。
7.根據(jù)權(quán)利要求6所述Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,其特征在于, 數(shù)據(jù)包攔截模塊與所述內(nèi)核TDI攔截模塊交互運(yùn)行過程是(1) NDIS中間層驅(qū)動模塊啟動后,當(dāng)windows操作系統(tǒng)需要發(fā)送和接收IP數(shù)據(jù)包時,通 知NDIS中間層驅(qū)動模塊,并且將要傳輸?shù)腎P數(shù)據(jù)包的內(nèi)容傳遞給NDIS中間層驅(qū)動模塊, NDIS中間層驅(qū)動模塊收到IP數(shù)據(jù)包后將該IP數(shù)據(jù)包傳遞給數(shù)據(jù)包協(xié)議解析模塊,并且要 求數(shù)據(jù)包協(xié)議解析模塊解析IP數(shù)據(jù)包所對應(yīng)的協(xié)議和端口 ,并且生成一項(xiàng)數(shù)據(jù)六,然后將 該項(xiàng)數(shù)據(jù)六傳遞給TDI內(nèi)核攔截模塊,要求TDI內(nèi)核攔截模塊傳遞回一項(xiàng)數(shù)據(jù)七,該項(xiàng)數(shù)據(jù) 七包含IP數(shù)據(jù)包ID、是否允許IP數(shù)據(jù)包發(fā)送或者接收標(biāo)志,如果數(shù)據(jù)七中的是否允許IP 數(shù)據(jù)包發(fā)送或者接收標(biāo)志為是,則發(fā)送或者接收該向數(shù)據(jù)七中IP數(shù)據(jù)包ID所對應(yīng)的IP數(shù) 據(jù)包,否則不發(fā)送或者接收該向數(shù)據(jù)七中IP數(shù)據(jù)包ID所對應(yīng)的IP數(shù)據(jù)包;(2) TDI內(nèi)核攔截模塊收到數(shù)據(jù)六后,將數(shù)據(jù)六傳遞給流速數(shù)據(jù)管理模塊,并且要求流 速數(shù)據(jù)管理模塊返回數(shù)據(jù)七,然后將數(shù)據(jù)七返回給NDIS中間層驅(qū)動模塊;(3) 流速數(shù)據(jù)管理模塊收到數(shù)據(jù)六后,根據(jù)數(shù)據(jù)六中的協(xié)議類型從TCP端口協(xié)議映射 表或者從UDP端口協(xié)議映射表中根據(jù)數(shù)據(jù)六中的端口信息查找對應(yīng)的數(shù)據(jù)項(xiàng),如果能夠查 找到數(shù)據(jù)項(xiàng),根據(jù)數(shù)據(jù)項(xiàng)中的應(yīng)用程序ID從活動流速控制表中查找對應(yīng)的數(shù)據(jù)項(xiàng)數(shù)據(jù)四, 并且將數(shù)據(jù)四與數(shù)據(jù)六傳遞給流速計算模塊,并要求流速計算模塊返回數(shù)據(jù)七,將數(shù)據(jù)七 返回給TDI內(nèi)核攔截模塊;(4) 流速計算模塊收到數(shù)據(jù)四和數(shù)據(jù)六后,首先根據(jù)數(shù)據(jù)六中的數(shù)據(jù)包傳輸方向確定 出是發(fā)送數(shù)據(jù)還是接收數(shù)據(jù),如果是發(fā)送數(shù)據(jù),則從數(shù)據(jù)四中取出發(fā)送數(shù)據(jù)信息,結(jié)合數(shù)據(jù) 六計算出數(shù)據(jù)七,并且根據(jù)數(shù)據(jù)六,計算出新的發(fā)送數(shù)據(jù)信息,保存到數(shù)據(jù)四中;如果是接 收數(shù)據(jù),則從數(shù)據(jù)四中取出接收數(shù)據(jù)信息,結(jié)合數(shù)據(jù)六計算出數(shù)據(jù)七,并且根據(jù)數(shù)據(jù)六,計 算出新的接收數(shù)據(jù)信息,保存到數(shù)據(jù)四中;然后將數(shù)據(jù)七返回給流速數(shù)據(jù)管理模塊,并且將 新的數(shù)據(jù)四傳遞給流速數(shù)據(jù)管理模塊,流速數(shù)據(jù)管理模塊收到新的數(shù)據(jù)四后保存到活動流 速控制表中。
8.根據(jù)權(quán)利要求7所述Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置,其特征在于, 所述流速控制規(guī)則設(shè)置模塊與所述內(nèi)核TDI攔截模塊交互運(yùn)行的過程是(1) 用戶選中流速控制顯示模塊中的一項(xiàng),并且選擇設(shè)置流速控制命令,流速控制顯示 模塊將從用戶選中項(xiàng)取出應(yīng)用程序ID,從流速控制信息表中找到對應(yīng)項(xiàng)的數(shù)據(jù)一,如果查 找不到,就生成一項(xiàng)空的數(shù)據(jù)一,并且用該應(yīng)用程序ID初始化數(shù)據(jù)一 ;將數(shù)據(jù)一傳遞給用 戶輸入模塊;(2) 用戶輸入模塊收到數(shù)據(jù)一后,將根據(jù)數(shù)據(jù)一顯示應(yīng)用程序所對應(yīng)的流速控制信息, 等待用戶輸入控制信息,用戶輸入完成后,生成新的數(shù)據(jù)一,將新的數(shù)據(jù)一傳遞給流速控制 信息收集模塊;(3) 流速控制信息收集模塊收到用戶輸入模塊發(fā)送的數(shù)據(jù)一后,將數(shù)據(jù)一保存在流速 控制信息表中,然后將新的流速控制信息表和保存的活動流速信息表傳遞給流速控制顯示 模塊,并要求流速控制顯示模塊重新顯示出當(dāng)前系統(tǒng)中的程序的流速信息和流速控制信 息,并且將新的流速控制信息表傳遞給TDI內(nèi)核攔截模塊;(4) TDI內(nèi)核攔截模塊收到流速控制信息收集模塊發(fā)送過來的流速控制信息表后,更新 自己保存的流速控制信息表。
全文摘要
本發(fā)明涉及一種Windows系統(tǒng)中控制程序網(wǎng)絡(luò)流速的裝置。Windows系統(tǒng)中程序網(wǎng)絡(luò)流速控制裝置包括流速控制規(guī)則設(shè)置模塊,其內(nèi)存儲有各個應(yīng)用程序的流速控制信息;內(nèi)核TDI攔截模塊,其在應(yīng)用程序通過TCP/UDP協(xié)議訪問網(wǎng)絡(luò)時獲取本地TCP/UDP端口號、應(yīng)用程序ID、TCP/UDP連接的ID、連接次數(shù)、發(fā)送連接信息和接收連接信息;數(shù)據(jù)包攔截模塊,其能夠攔截到從操作系統(tǒng)網(wǎng)絡(luò)協(xié)議層發(fā)往操作系統(tǒng)數(shù)據(jù)包發(fā)送層的IP數(shù)據(jù)包。本發(fā)明的有益效果是可以實(shí)現(xiàn)對所有應(yīng)用程序的網(wǎng)絡(luò)流速的控制,而且無需占用計算機(jī)的存儲資源,同時也實(shí)現(xiàn)了多個應(yīng)用程序網(wǎng)絡(luò)流速的統(tǒng)一管理。
文檔編號H04L12/56GK101702121SQ200910193419
公開日2010年5月5日 申請日期2009年10月29日 優(yōu)先權(quán)日2009年10月29日
發(fā)明者劉鵬 申請人:珠海金山軟件股份有限公司