網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送方法及裝置。
【背景技術(shù)】
[0002] 在基于Linux操作系統(tǒng)的流媒體服務(wù)器應(yīng)用中,需要將大量的流媒體文件傳遞到 IP網(wǎng)絡(luò)上。流媒體報(bào)文傳輸需要很高的平穩(wěn)性,需要很高的時(shí)間精度?,F(xiàn)有傳輸方式下, 對(duì)于每一路音頻流,都需要使用網(wǎng)絡(luò)套接字,用戶進(jìn)程將音頻文件打包成RTP(Real-time TransportProtocol,實(shí)時(shí)傳送協(xié)議)數(shù)據(jù)包后,調(diào)用UDP(UserDatagramProtocol,用戶 數(shù)據(jù)包協(xié)議)數(shù)據(jù)包發(fā)送接口,將數(shù)據(jù)包發(fā)送出去。
[0003] UDP數(shù)據(jù)包的定時(shí)發(fā)送是通過(guò)用戶態(tài)的定時(shí)器實(shí)現(xiàn),由于用戶態(tài)的線程較多,W及 復(fù)雜的業(yè)務(wù)流程,用戶態(tài)定時(shí)器的高精度很難實(shí)現(xiàn)。數(shù)據(jù)包之間的時(shí)間間隔抖動(dòng)較大,嚴(yán)重 影響了流媒體報(bào)文的DF參數(shù)。
[0004] 而且,用戶進(jìn)程每發(fā)送一個(gè)音頻數(shù)據(jù)包,就需要使用一次發(fā)送系統(tǒng)調(diào)用,每次系統(tǒng) 調(diào)用需要先從用戶態(tài)切換到內(nèi)核態(tài),系統(tǒng)調(diào)用返回后,再?gòu)膬?nèi)核態(tài)切換到用戶態(tài)。在流媒體 服務(wù)器負(fù)荷較重的情況下,會(huì)觸發(fā)大量的數(shù)據(jù)拷貝和上下文切換操作,極大地消耗系統(tǒng)的 CPU資源,降低系統(tǒng)的處理能力??蒞參照?qǐng)D1,圖1是根據(jù)相關(guān)技術(shù)的流媒體文件傳遞流 程示意圖。
[0005] 由此可見(jiàn),由于用戶態(tài)的定時(shí)調(diào)用無(wú)法達(dá)到較高的時(shí)間進(jìn)度,同時(shí)業(yè)務(wù)線程之間 的調(diào)用切換也會(huì)影響到定時(shí)器的精度,每個(gè)數(shù)據(jù)包調(diào)用一次系統(tǒng)調(diào)用發(fā)送會(huì)導(dǎo)致頻繁的系 統(tǒng)調(diào)用,從而極大地消耗CPU資源,導(dǎo)致降低了整個(gè)系統(tǒng)性能和整個(gè)流媒體服務(wù)質(zhì)量。
[0006] 針對(duì)相關(guān)技術(shù)中流媒體文件傳遞方法容易降低整個(gè)系統(tǒng)性能和整個(gè)流媒體服務(wù) 質(zhì)量的問(wèn)題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明提供了一種網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送方法及裝置,W至少解決上述問(wèn)題。
[0008] 根據(jù)本發(fā)明的一個(gè)方面,提供了一種網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送方法,包括;Linux操作系 統(tǒng)的內(nèi)核空間接收用戶進(jìn)程發(fā)送的大的網(wǎng)絡(luò)數(shù)據(jù)包,其中,大的網(wǎng)絡(luò)數(shù)據(jù)包的大小大于或 等于內(nèi)核空間能夠發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包的大?。粌?nèi)核空間將大的網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小的 網(wǎng)絡(luò)數(shù)據(jù)包,其中,每個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包的大小小于或等于內(nèi)核空間能夠發(fā)送的網(wǎng)絡(luò)數(shù)據(jù) 包的大??;內(nèi)核空間利用內(nèi)核空間的定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包。
[0009] 優(yōu)選地,Linux操作系統(tǒng)的內(nèi)核空間接收用戶進(jìn)程發(fā)送的大的網(wǎng)絡(luò)數(shù)據(jù)包包括: 內(nèi)核空間的協(xié)議找接收大的網(wǎng)絡(luò)數(shù)據(jù)包,并向內(nèi)核空間的網(wǎng)卡驅(qū)動(dòng)層發(fā)送大的網(wǎng)絡(luò)數(shù)據(jù) 包;內(nèi)核空間將大的網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包包括:網(wǎng)卡驅(qū)動(dòng)層將大的網(wǎng)絡(luò) 數(shù)據(jù)包拆分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包;內(nèi)核空間利用內(nèi)核空間的定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù) 據(jù)包包括:網(wǎng)卡驅(qū)動(dòng)層利用定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包。
[0010] 優(yōu)選地,在Linux操作系統(tǒng)的內(nèi)核空間接收用戶進(jìn)程發(fā)送的大的網(wǎng)絡(luò)數(shù)據(jù)包之 前,還包括:設(shè)置內(nèi)核空間,w使內(nèi)核空間能夠接收大的網(wǎng)絡(luò)數(shù)據(jù)包。
[0011] 優(yōu)選地,在內(nèi)核空間的協(xié)議找接收大的網(wǎng)絡(luò)數(shù)據(jù)包之前,還包括:設(shè)置協(xié)議找層, W使協(xié)議找層接收大的網(wǎng)絡(luò)數(shù)據(jù)包并向網(wǎng)卡驅(qū)動(dòng)層發(fā)送接收到的大的網(wǎng)絡(luò)數(shù)據(jù)包。
[0012] 優(yōu)選地,設(shè)置協(xié)議找層包括:打開(kāi)Linux操作系統(tǒng)的UF0/GS0功能,通過(guò)UF0/GS0 功能使得協(xié)議找層接收網(wǎng)絡(luò)數(shù)據(jù)包并向網(wǎng)卡驅(qū)動(dòng)層發(fā)送接收到的數(shù)據(jù)包。
[0013] 優(yōu)選地,網(wǎng)卡驅(qū)動(dòng)層將大的網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包包括;網(wǎng)卡驅(qū) 動(dòng)層根據(jù)大的網(wǎng)絡(luò)數(shù)據(jù)包中的IP選項(xiàng)頭攜帶的時(shí)間信息,將大的網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè) 小的網(wǎng)絡(luò)數(shù)據(jù)包,其中,時(shí)間信息包括:預(yù)定時(shí)間間隔和包發(fā)送時(shí)間。
[0014] 優(yōu)選地,網(wǎng)卡驅(qū)動(dòng)層利用定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包包括:網(wǎng)卡驅(qū)動(dòng)層將多 個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包分別掛接到包發(fā)送時(shí)間的時(shí)間槽中;網(wǎng)卡驅(qū)動(dòng)層每間隔一個(gè)預(yù)定時(shí)間間 隔,按照掛接到時(shí)間槽中的順序發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包。
[0015] 優(yōu)選地,在內(nèi)核空間將網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包之前,包括;申請(qǐng)預(yù) 定數(shù)量的套接字緩存S邸用于存儲(chǔ)多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包。
[0016] 優(yōu)選地,在系統(tǒng)的CPU為多核CPU的情況下,包括;為多核CPU的每個(gè)內(nèi)核分配一 個(gè)percpu變量和一個(gè)專用隊(duì)列。
[0017] 優(yōu)選地,定時(shí)器為高精度定時(shí)器。
[0018] 根據(jù)本發(fā)明的另一方面,提供了一種網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送裝置,位于Linux操作系 統(tǒng)的內(nèi)核空間,包括:接收模塊,用于接收用戶進(jìn)程發(fā)送的大的網(wǎng)絡(luò)數(shù)據(jù)包,其中,大的網(wǎng)絡(luò) 數(shù)據(jù)包的大小大于或等于內(nèi)核空間能夠發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包的大小;拆分模塊,用于將大的 網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包,其中,每個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包的大小小于或等于內(nèi) 核空間能夠發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包的大小;發(fā)送模塊,用于利用內(nèi)核空間的定時(shí)器發(fā)送多個(gè)小 的網(wǎng)絡(luò)數(shù)據(jù)包。
[0019] 通過(guò)本發(fā)明,采用Linux操作系統(tǒng)的內(nèi)核空間將從用戶進(jìn)程接收到的大的網(wǎng)絡(luò)數(shù) 據(jù)包分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包,并利用內(nèi)核空間的定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包的方 式,解決了相關(guān)技術(shù)中流媒體文件傳遞方法容易降低整個(gè)系統(tǒng)性能和整個(gè)流媒體服務(wù)質(zhì)量 的問(wèn)題,可W大大降低系統(tǒng)調(diào)用的次數(shù),進(jìn)而達(dá)到了降低系統(tǒng)CPU的消耗、提高整個(gè)發(fā)包的 性能的效果。
【附圖說(shuō)明】
[0020] 此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā) 明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
[0021] 圖1是根據(jù)相關(guān)技術(shù)的流媒體文件傳遞流程示意圖;
[0022] 圖2是根據(jù)本發(fā)明實(shí)施例的網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送方法流程圖;
[0023] 圖3是根據(jù)本發(fā)明實(shí)施例的網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送裝置的結(jié)構(gòu)框圖;
[0024] 圖4是根據(jù)本發(fā)明優(yōu)選實(shí)施例的數(shù)據(jù)包的組織和處理流程示意圖;
[0025] 圖5是根據(jù)本發(fā)明優(yōu)選實(shí)施例的高精度時(shí)間槽位的實(shí)現(xiàn)流程示意圖。
【具體實(shí)施方式】
[0026] 下文中將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明。需要說(shuō)明的是,在不沖突的 情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可w相互組合。
[0027] 本發(fā)明實(shí)施例涉及計(jì)算機(jī)應(yīng)用領(lǐng)域的網(wǎng)絡(luò)通信領(lǐng)域,主要提供一種網(wǎng)絡(luò)數(shù)據(jù)包的 發(fā)送方法及裝置。當(dāng)然,在實(shí)際應(yīng)用中,該方法同樣可W適用于類似的計(jì)算機(jī)應(yīng)用領(lǐng)域。
[0028] 本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送方法。圖2是根據(jù)本發(fā)明實(shí)施例的 網(wǎng)絡(luò)數(shù)據(jù)包的發(fā)送方法流程圖,如圖2所示,該方法主要包括W下步驟(步驟S202-步驟 S206):
[0029] 步驟S202,Linux操作系統(tǒng)的內(nèi)核空間接收用戶進(jìn)程發(fā)送的大的網(wǎng)絡(luò)數(shù)據(jù)包,其 中,大的網(wǎng)絡(luò)數(shù)據(jù)包的大小大于或等于內(nèi)核空間能夠發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包的大?。?br>[0030] 步驟S204,內(nèi)核空間將大的網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包,其中,每個(gè)小 的網(wǎng)絡(luò)數(shù)據(jù)包的大小小于或等于內(nèi)核空間能夠發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包的大?。?br>[0031] 步驟S206,內(nèi)核空間利用內(nèi)核空間的定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包。
[0032] 通過(guò)上述各個(gè)步驟,Linux操作系統(tǒng)的內(nèi)核空間可W將從用戶進(jìn)程接收到的大的 網(wǎng)絡(luò)數(shù)據(jù)包分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包,并利用內(nèi)核空間的定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù) 包,可W大大降低系統(tǒng)調(diào)用的次數(shù),進(jìn)而降低系統(tǒng)CPU的消耗,提高了整個(gè)發(fā)包的性能。
[0033] 在本實(shí)施例中,步驟S202可W通過(guò)該樣的方式實(shí)現(xiàn);內(nèi)核空間的協(xié)議找接收大的 網(wǎng)絡(luò)數(shù)據(jù)包,并向內(nèi)核空間的網(wǎng)卡驅(qū)動(dòng)層發(fā)送大的網(wǎng)絡(luò)數(shù)據(jù)包;步驟S204可W通過(guò)該樣的 方式實(shí)現(xiàn);網(wǎng)卡驅(qū)動(dòng)層將大的網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包;步驟S206可W通過(guò) 該樣的方式實(shí)現(xiàn):網(wǎng)卡驅(qū)動(dòng)層利用定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包。
[0034] 在本實(shí)施例的一個(gè)優(yōu)選實(shí)施方式中,在內(nèi)核空間的協(xié)議找接收大的網(wǎng)絡(luò)數(shù)據(jù)包之 前,還可W先設(shè)置協(xié)議找層,W使協(xié)議找層接收大的網(wǎng)絡(luò)數(shù)據(jù)包并向網(wǎng)卡驅(qū)動(dòng)層發(fā)送接收 到的大的網(wǎng)絡(luò)數(shù)據(jù)包。具體地,設(shè)置協(xié)議找層可該樣的方式實(shí)現(xiàn):打開(kāi)Linux操作系統(tǒng) 的UF0/GS0功能,通過(guò)UF0/GS0功能使得協(xié)議找層接收網(wǎng)絡(luò)數(shù)據(jù)包并向網(wǎng)卡驅(qū)動(dòng)層發(fā)送接 收到的數(shù)據(jù)包。
[00巧]在本實(shí)施例的一個(gè)優(yōu)選實(shí)施方式中,網(wǎng)卡驅(qū)動(dòng)層將大的網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小 的網(wǎng)絡(luò)數(shù)據(jù)包包括;網(wǎng)卡驅(qū)動(dòng)層根據(jù)大的網(wǎng)絡(luò)數(shù)據(jù)包中的IP選項(xiàng)頭攜帶的時(shí)間信息,將大 的網(wǎng)絡(luò)數(shù)據(jù)包拆分成多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包,其中,時(shí)間信息包括;預(yù)定時(shí)間間隔和包發(fā)送時(shí) 間。
[0036] 優(yōu)選地,網(wǎng)卡驅(qū)動(dòng)層利用定時(shí)器發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包包括:網(wǎng)卡驅(qū)動(dòng)層將多 個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包分別掛接到包發(fā)送時(shí)間的時(shí)間槽中;網(wǎng)卡驅(qū)動(dòng)層每間隔一個(gè)預(yù)定時(shí)間間 隔,按照掛接到時(shí)間槽中的順序發(fā)送多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包。
[0037] 在本實(shí)施例中,在執(zhí)行步驟S202之前,還可W設(shè)置內(nèi)核空間,W使內(nèi)核空間能夠 接收大的網(wǎng)絡(luò)數(shù)據(jù)包。
[0038] 在本實(shí)施例中,在執(zhí)行步驟S204之前,還可W申請(qǐng)預(yù)定數(shù)量的套接字緩存S邸用 于存儲(chǔ)多個(gè)小的網(wǎng)絡(luò)數(shù)據(jù)包。
[0039] 在本實(shí)施例中,在系統(tǒng)的CPU為多核CPU的情況下,可W為多核CPU的每個(gè)內(nèi)核分 配一個(gè)percpu變量和一個(gè)專用隊(duì)列。
[0040] 在本實(shí)施例中,定時(shí)器為高精度定時(shí)器,當(dāng)然,高精度定時(shí)器的選擇僅僅是作為一 個(gè)較佳的實(shí)施方式,在實(shí)際應(yīng)用中,內(nèi)核空間的定時(shí)器還可W是精度較低的定時(shí)器
[0041] 本發(fā)明實(shí)施例還提供了一種網(wǎng)絡(luò)