一種tcp協(xié)議棧延時(shí)的統(tǒng)計(jì)方法、裝置及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)方法、裝置及系 統(tǒng)。
【背景技術(shù)】
[0002] TCP (Transmission Control Protocol,傳輸控制協(xié)議)/IP (Internet Protocol, 網(wǎng)絡(luò)之間互連的協(xié)議)是互聯(lián)網(wǎng)的核心協(xié)議,也是大多數(shù)網(wǎng)絡(luò)應(yīng)用的核心協(xié)議,TCP協(xié)議棧 的處理延時(shí)會(huì)極大地影響網(wǎng)絡(luò)傳輸速度和用戶體驗(yàn),所以對(duì)協(xié)議棧延時(shí)的統(tǒng)計(jì)是極為必要 的。但是,現(xiàn)在沒有技術(shù)可以精確統(tǒng)計(jì)一個(gè)TCP數(shù)據(jù)報(bào)文在協(xié)議棧中所消耗的時(shí)間。
[0003] 現(xiàn)在沒有技術(shù)可以統(tǒng)計(jì)一個(gè)TCP數(shù)據(jù)報(bào)文在協(xié)議棧中各個(gè)階段所消耗的具體時(shí) 間,只能根據(jù)各函數(shù)所消耗的CPU(Central Processing Unit,中央處理器)時(shí)間,來從宏觀 上對(duì)消耗時(shí)間進(jìn)行估算,由于協(xié)議棧會(huì)同時(shí)有大量的TCP數(shù)據(jù)流,統(tǒng)計(jì)出來的CPU時(shí)間反應(yīng) 的是宏觀的平均時(shí)間,因此對(duì)于具體的某一條數(shù)據(jù)流,就沒法分開進(jìn)行分析。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明實(shí)施例提供一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)方法、裝置及系統(tǒng),以實(shí)現(xiàn)對(duì)任一 TCP數(shù)據(jù)流中每個(gè)TCP報(bào)文數(shù)據(jù)在協(xié)議棧中的時(shí)延統(tǒng)計(jì)。
[0005] -方面,本發(fā)明實(shí)施例提供了一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)方法,所述方法包括:在 TCP握手時(shí),接收客戶端發(fā)送的同步SYN請(qǐng)求;根據(jù)所述SYN請(qǐng)求,判斷是否支持TCP協(xié)議 棧延時(shí)TDM ;若支持TDM,則當(dāng)來自所述客戶端的TCP報(bào)文數(shù)據(jù)傳輸時(shí),在所述TCP報(bào)文數(shù)據(jù) 的TDM選項(xiàng)中記錄各個(gè)時(shí)間點(diǎn)的時(shí)間戳,以便所述客戶端確定所述TCP報(bào)文數(shù)據(jù)的TDM。
[0006] 另一方面,本發(fā)明實(shí)施例提供了一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)裝置,所述裝置包括: 接收單元,用于在TCP握手時(shí),接收客戶端發(fā)送的同步SYN請(qǐng)求;判斷單元,用于根據(jù)所述 SYN請(qǐng)求,判斷是否支持TCP協(xié)議棧延時(shí)TDM ;記錄單元,用于若支持TDM,則當(dāng)來自所述客 戶端的TCP報(bào)文數(shù)據(jù)傳輸時(shí),在所述TCP報(bào)文數(shù)據(jù)的TDM選項(xiàng)中記錄各個(gè)時(shí)間點(diǎn)的時(shí)間戳, 以便所述客戶端確定所述TCP報(bào)文數(shù)據(jù)的TDM。
[0007] 再一方面,本發(fā)明實(shí)施例提供了一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)系統(tǒng),所述系統(tǒng)包括: 客戶端和服務(wù)器,其中,所述服務(wù)器包括上述TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)裝置,所述客戶端根據(jù) 記錄的所述各個(gè)時(shí)間點(diǎn)時(shí)間戳,獲取所述TCP報(bào)文數(shù)據(jù)的TDM。
[0008] 上述技術(shù)方案具有如下有益效果:實(shí)現(xiàn)了對(duì)任一 TCP數(shù)據(jù)流中每個(gè)TCP報(bào)文數(shù)據(jù) 在協(xié)議棧中的時(shí)延統(tǒng)計(jì),并且不需要對(duì)用戶程序進(jìn)行修改,只需要在內(nèi)核協(xié)議棧中添加時(shí) 間統(tǒng)計(jì)代碼即可,對(duì)使用者是完全透明的??梢愿鶕?jù)不同的五元組,分別獨(dú)立統(tǒng)計(jì)一條TCP 數(shù)據(jù)流在協(xié)議棧中的處理時(shí)間,相比傳統(tǒng)方式更加精確,并且避免了對(duì)無用數(shù)據(jù)流的CPU 消耗;可以根據(jù)客戶端協(xié)商來觸發(fā)統(tǒng)計(jì),在不開啟的時(shí)候不會(huì)增加系統(tǒng)的CPU負(fù)載;時(shí)間統(tǒng) 計(jì)精度高,可以到毫秒級(jí)別,而現(xiàn)有的統(tǒng)計(jì)是根據(jù)一秒時(shí)間內(nèi)各個(gè)函數(shù)的處理次數(shù)來估算 處理時(shí)間,無法保證精確度。
【附圖說明】
[0009] 為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0010] 圖1為本發(fā)明實(shí)施例一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)方法流程圖;
[0011] 圖2為本發(fā)明實(shí)施例一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0012] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0013] 如圖1所示,為本發(fā)明實(shí)施例一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)方法流程圖,所述方法包 括:
[0014] 101、在TCP握手時(shí),接收客戶端發(fā)送的同步SYN請(qǐng)求;
[0015] 102、根據(jù)所述SYN請(qǐng)求,判斷是否支持TCP協(xié)議棧延時(shí)TDM ;
[0016] 103、若支持TDM,則當(dāng)來自所述客戶端的TCP報(bào)文數(shù)據(jù)傳輸時(shí),在所述TCP報(bào)文數(shù) 據(jù)的TDM選項(xiàng)中記錄各個(gè)時(shí)間點(diǎn)的時(shí)間戳,以便所述客戶端確定所述TCP報(bào)文數(shù)據(jù)的TDM。
[0017] 優(yōu)選的,所述根據(jù)所述SYN請(qǐng)求,判斷是否支持TCP協(xié)議棧延時(shí)TDM,具體包括:根 據(jù)所述SYN請(qǐng)求中的TCP選項(xiàng)擴(kuò)展協(xié)商類型字段,判斷是否支持TCP協(xié)議棧延時(shí)TDM。
[0018] 優(yōu)選的,所述TCP報(bào)文數(shù)據(jù)的TDM選項(xiàng)中包括四個(gè)時(shí)間點(diǎn)的時(shí)間戳:??ΜΕΑ、??ΜΕΒ、 HMEC、HMED ;其中,??ΜΕΑ用于記錄所述TCP報(bào)文數(shù)據(jù)交付給TCP傳輸層時(shí)的時(shí)間戳; ??ΜΕΒ用于記錄所述TCP報(bào)文數(shù)據(jù)交付給網(wǎng)絡(luò)層的時(shí)間戳;HMEC用于記錄所述TCP報(bào)文數(shù) 據(jù)交付給鏈路層的時(shí)間戳;HMED用于如果所述TCP報(bào)文數(shù)據(jù)是重發(fā)的報(bào)文數(shù)據(jù),則記錄最 后一次網(wǎng)絡(luò)層重發(fā)給鏈路層的時(shí)間戳。
[0019] 優(yōu)選的,所述時(shí)間戳使用服務(wù)器端的中央處理器CPU內(nèi)核的jiffies變量來記錄, jiffies變量是一個(gè)32位無符號(hào)型整數(shù)。
[0020] 優(yōu)選的,所述方法還包括:所述客戶端根據(jù)記錄的所述各個(gè)時(shí)間點(diǎn)的時(shí)間戳,確定 所述TCP報(bào)文數(shù)據(jù)的TDM。
[0021] 對(duì)應(yīng)于上述方法實(shí)施例,如圖2所示,為本發(fā)明實(shí)施例一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì) 裝置結(jié)構(gòu)示意圖,所述裝置包括:
[0022] 接收單元21,用于在TCP握手時(shí),接收客戶端發(fā)送的同步SYN請(qǐng)求;
[0023] 判斷單元22,用于根據(jù)所述SYN請(qǐng)求,判斷是否支持TCP協(xié)議棧延時(shí)TDM ;
[0024] 記錄單元23,用于若支持TDM,則當(dāng)來自所述客戶端的TCP報(bào)文數(shù)據(jù)傳輸時(shí),在所 述TCP報(bào)文數(shù)據(jù)的TDM選項(xiàng)中記錄各個(gè)時(shí)間點(diǎn)的時(shí)間戳,以便所述客戶端確定所述TCP報(bào) 文數(shù)據(jù)的TDM。
[0025] 優(yōu)選的,所述判斷單元22,具體用于根據(jù)所述SYN請(qǐng)求中的TCP選項(xiàng)擴(kuò)展協(xié)商類型 字段,判斷是否支持TCP協(xié)議棧延時(shí)TDM。
[0026] 優(yōu)選的,所述TCP報(bào)文數(shù)據(jù)的TDM選項(xiàng)中包括四個(gè)時(shí)間點(diǎn)的時(shí)間戳:??ΜΕΑ、??ΜΕΒ、 HMEC、HMED ;其中,??ΜΕΑ用于記錄所述TCP報(bào)文數(shù)據(jù)交付給TCP傳輸層時(shí)的時(shí)間戳; ??ΜΕΒ用于記錄所述TCP報(bào)文數(shù)據(jù)交付給網(wǎng)絡(luò)層的時(shí)間戳;HMEC用于記錄所述TCP報(bào)文數(shù) 據(jù)交付給鏈路層的時(shí)間戳;HMED用于如果所述TCP報(bào)文數(shù)據(jù)是重發(fā)的報(bào)文數(shù)據(jù),則記錄最 后一次網(wǎng)絡(luò)層重發(fā)給鏈路層的時(shí)間戳。
[0027] 優(yōu)選的,所述時(shí)間戳使用服務(wù)器端的中央處理器CPU內(nèi)核的jiffies變量來記錄, jiffies變量是一個(gè)32位無符號(hào)型整數(shù)。
[0028] 另外,本發(fā)明實(shí)施例還提供一種TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)系統(tǒng),所述系統(tǒng)包括:客戶 端和服務(wù)器,其中,所述服務(wù)器包括上述TCP協(xié)議棧延時(shí)的統(tǒng)計(jì)裝置,所述客戶端根據(jù)記錄 的所述各個(gè)時(shí)間點(diǎn)的時(shí)間戳,確定所述TCP報(bào)文數(shù)據(jù)的TDM。
[0029] 例如,本發(fā)明應(yīng)用實(shí)例可以由以下幾個(gè)部分組成:
[0030] I. TCP協(xié)議的擴(kuò)展:
[0031] 處理時(shí)延信息會(huì)被寫入到TCP頭的選項(xiàng)部分,信息分兩種,一種標(biāo)識(shí)是否支持tcp delaytime measure (以下簡(jiǎn)稱TDM),在TCP握手時(shí)發(fā)送;另一種是具體的TDM信息。
[0032] 首先,需要在TCP option擴(kuò)展協(xié)商中增加一個(gè)類型。
[0034] 類型值為10,該選項(xiàng)只允許在有SYN(synchronous,同步的,是TCP/IP建立連接時(shí) 使用的握手信號(hào))標(biāo)志的TCP包中,也即TCP握手的前兩個(gè)包中,分別表示各自是否支持 TDM,客戶端通過此選項(xiàng)用來激活服務(wù)器端相應(yīng)的TCP數(shù)據(jù)流進(jìn)行時(shí)延的記錄,這樣可以保 證只在需要的時(shí)候,TCP協(xié)議棧才需要進(jìn)行時(shí)延統(tǒng)計(jì),平時(shí)不會(huì)浪費(fèi)CPU的資源。
[0035] 其次,TDM選項(xiàng),類型值為11
[0037] 整個(gè)選項(xiàng)長(zhǎng)度為18個(gè)字節(jié),一共可以攜帶四個(gè)時(shí)間戳,分別記錄了四個(gè)時(shí)間,時(shí) 間戳直接使用內(nèi)核的jiffies變量,jiffies變量是一個(gè)32位無符號(hào)型整數(shù),全局變量 jiffies用來記錄自系統(tǒng)啟動(dòng)以來產(chǎn)生的節(jié)拍的總數(shù)。啟動(dòng)時(shí),內(nèi)核將該變量初始化為0, 此后,每次時(shí)鐘中斷處理程序都會(huì)增加該變量的值。一秒內(nèi)時(shí)鐘中斷的次數(shù)等于Hz,所 以jiffies -秒內(nèi)增加的值也就是Hz,Hz是內(nèi)核編譯時(shí)使用的宏變量,一般為1000,將 jiffies轉(zhuǎn)化為以秒為單位的時(shí)間jiffies/Hz。
[0038] ??ΜΕΑ記錄的是用戶數(shù)據(jù)交付給TCP傳輸層時(shí)的時(shí)間戳;??ΜΕΒ記錄的是數(shù)據(jù)交付 給網(wǎng)絡(luò)層的時(shí)間戳;HMEC記錄的是數(shù)據(jù)交付給鏈路層的時(shí)間戳;HMED記錄的是此數(shù)據(jù)報(bào) 文如果是重發(fā)的數(shù)據(jù)報(bào)文,則記錄最后一次網(wǎng)絡(luò)層重發(fā)給鏈路層的時(shí)間戳。
[0039] 對(duì)于接收方來說,OlMEA-HMEBVjiffies就是數(shù)據(jù)在傳輸層所花費(fèi)的時(shí)間, (??ΜΕΒ-??ΜΕΟ /jiffies就是網(wǎng)絡(luò)層所花費(fèi)的時(shí)間,(HMED-HMEC) /jiffies就是TCP協(xié)議 棧由于超時(shí)重傳所花費(fèi)的時(shí)間。
[0040] 2.內(nèi)核TCP協(xié)議棧的修改:
[0041] 如上所述,如果要記錄上面的4個(gè)時(shí)間點(diǎn),則需要對(duì)TCP協(xié)議棧進(jìn)行相應(yīng)的修改, 包括對(duì)TCP選項(xiàng)協(xié)商字段的判斷,和各個(gè)時(shí)間點(diǎn)時(shí)間戳的寫入:
[0042] a)在 tcp_v4_conn_request/tcp_v6_conn_request 函數(shù)中對(duì)客戶端發(fā)來的 TCP 選 項(xiàng)協(xié)商進(jìn)行響應(yīng),并在對(duì)應(yīng)的tcp sock中記錄開啟時(shí)間統(tǒng)計(jì)功能,此兩個(gè)函數(shù)是tcp協(xié)商 完成的函數(shù);
[0043] b)在sk_buff結(jié)構(gòu)中增加4個(gè)統(tǒng)計(jì)時(shí)間的變量,sk_buff是Iinux內(nèi)核TCP/IP協(xié) 議棧最重要的結(jié)構(gòu),它是網(wǎng)絡(luò)數(shù)據(jù)報(bào)在內(nèi)核中的表現(xiàn)形式;
[0044] c)在tcp_sendmsg函數(shù)是用戶態(tài)數(shù)據(jù)發(fā)送給傳輸層的函數(shù),在此函數(shù)中將用戶發(fā) 到網(wǎng)絡(luò)層的負(fù)載所在的sk_buff結(jié)構(gòu)中記錄下TIMEA的值;
[0045] d)在ip_push_pending_frames函數(shù)是傳輸層發(fā)送給網(wǎng)絡(luò)層的函數(shù),在此函數(shù)中, 在sk_buff結(jié)構(gòu)中記錄下TIMEB的值;
[0046] e) dst_output函數(shù)是網(wǎng)絡(luò)層發(fā)送給數(shù)據(jù)鏈路層的函數(shù),在此函數(shù)中記錄