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

一種網(wǎng)絡設備和數(shù)據(jù)包發(fā)送方法與流程

文檔序號:12278378閱讀:1160來源:國知局
一種網(wǎng)絡設備和數(shù)據(jù)包發(fā)送方法與流程

本申請涉及互聯(lián)網(wǎng)網(wǎng)絡技術領域,尤其涉及一種Linux操作系統(tǒng)下網(wǎng)橋進行數(shù)據(jù)轉發(fā)對網(wǎng)口進行循環(huán)遍歷的技術問題。



背景技術:

在網(wǎng)絡上移動數(shù)據(jù)的過程中,需要確定在網(wǎng)絡上是否允許該數(shù)據(jù),如果允許,則需要確定數(shù)據(jù)將被傳送到哪里。當數(shù)據(jù)從源端傳送到目的端的時候,網(wǎng)絡可以確定發(fā)送端和接收端是否都是有效的和是否允許使用該網(wǎng)絡,以及將如何處理數(shù)據(jù)。傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)數(shù)據(jù)典型地是以幀的形式傳輸,所述幀包括至少兩個部分,地址首標和數(shù)據(jù)負載??梢詮奈逶M形式的地址首標中找到通常用于通過網(wǎng)絡向目的端傳輸數(shù)據(jù)的信息,所述五元組包括下述字段:源地址、目的端地址、源端口、目的端口和協(xié)議。

在一般的網(wǎng)關設備中,分為WAN側和LAN側,WAN側為接入端,負責鏈接互聯(lián)網(wǎng)或者是電信網(wǎng)絡,LAN側為用戶接入端,一般情況下,LAN側會存在多個以太網(wǎng)接口分別鏈接各種網(wǎng)關終端設備。在家庭網(wǎng)絡環(huán)境中,一般的終端設備有PC、機頂盒、網(wǎng)絡電話或全球眼等網(wǎng)絡設備,在企業(yè)應用中,組網(wǎng)更為復雜,所有的網(wǎng)絡設備都通過網(wǎng)關設備進行接入,包括各種應用服務器,網(wǎng)絡終端等等,種類復雜多樣,一旦在某個網(wǎng)絡中出現(xiàn)環(huán)路問題,或者是環(huán)路出現(xiàn)在接入網(wǎng)關內(nèi)部,都會直接影響網(wǎng)關工作和其他網(wǎng)絡設備的正常接入。但是由于網(wǎng)管終端設備過多,接線繁雜,又無法快速的知道具體是哪一處出現(xiàn)故障,只能做全面的地毯式檢查,這樣不僅費時費力,也不容易找到準確的故障出處,甚至以為全面檢查而引起新的故障。

目前Linux網(wǎng)橋中所用到的數(shù)據(jù)包轉發(fā)函數(shù)主要分為兩種,一種是數(shù)據(jù)被轉發(fā)到特定的端口,另一種是數(shù)據(jù)擴散,循環(huán)遍歷轉發(fā)擴散到所有端口。針對前者,功能實現(xiàn)主要體現(xiàn)在兩個方面:對入口流量和出口流量分別進行的數(shù)據(jù)轉發(fā)。其中,對入口流量進行數(shù)據(jù)轉發(fā)其實就是橋組中的一個網(wǎng)橋端口對數(shù)據(jù)包進行接收,經(jīng)過網(wǎng)卡驅動后,調(diào)用netif_receive_skb、handle_bridge、br_handle_frame等函數(shù),最后調(diào)用函數(shù)br_forward來實現(xiàn)數(shù)據(jù)轉發(fā)。對出口流量進行數(shù)據(jù)轉發(fā)時首先要建立路由wan連接,如果外網(wǎng)的數(shù)據(jù)想要和lan側的終端進行數(shù)據(jù)傳輸時,外網(wǎng)數(shù)據(jù)會首先會與wan接口建立連接,然后wan接口通過路由規(guī)則和arp,可以將需要的網(wǎng)絡數(shù)據(jù)從網(wǎng)橋發(fā)送出去,最后網(wǎng)橋就會調(diào)用br->netdev_ops->ndo_start_xmit,即br_dev_xmit,br_dev_xmit中會調(diào)用br_deliver、br_flood_deliver,進行出口流量的轉發(fā)。數(shù)據(jù)擴散同樣分為入口流量的擴散和出口流量的擴散,需要調(diào)用一個重要的函數(shù)br_flood,主要是循環(huán)遍歷已存在的所有端口,對于符合數(shù)據(jù)轉發(fā)條件的端口,調(diào)用函數(shù)__packet_hook進行后續(xù)處理。

地址解析協(xié)議,即ARP(Address Resolution Protocol),是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議。主機發(fā)送信息時將包含目標IP地址的ARP請求廣播到網(wǎng)絡上的所有主機,并接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節(jié)約資源。地址解析協(xié)議是建立在網(wǎng)絡中各個主機互相信任的基礎上的,網(wǎng)絡上的主機可以自主發(fā)送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發(fā)送偽ARP應答報文,使其發(fā)送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用于查詢本機ARP緩存中IP地址和MAC地址的對應關系、添加或刪除靜態(tài)對應關系等。相關協(xié)議有RARP、代理ARP。NDP用于在IPv6中代替地址解析協(xié)議。

中國專利申請?zhí)枮镃N201210525155.8,該發(fā)明本發(fā)明涉及網(wǎng)絡通信技術領域,尤其涉及網(wǎng)關設備動態(tài)環(huán)路檢測、保護以及靜態(tài)環(huán)路檢測的方法。本發(fā)明的作用是:當確認存在環(huán)路,立刻關閉環(huán)路接口的接收中斷,保護網(wǎng)關設備不受攻擊,并開啟環(huán)路告警燈,告訴用戶存在環(huán)路情況,接著檢測環(huán)路是否解除,一旦環(huán)路解除,就重新開啟環(huán)路接口的接收中斷,關閉環(huán)路告警燈,由上述可以看出,一旦設備出現(xiàn)環(huán)路情況,網(wǎng)關設備會發(fā)現(xiàn)并且采用保護措施,使得其他非環(huán)路鏈路能正常工作,并且對存在環(huán)路的接口進行監(jiān)控,當環(huán)路解除后馬上就可以正常工作。

中國專利申請?zhí)枮镃N200510018238.8,該發(fā)明提供了一種MAC橋接網(wǎng)絡,例如以太網(wǎng),環(huán)路發(fā)現(xiàn)、空間重用和保護倒換的方法和裝置。環(huán)路的控制網(wǎng)橋周期性發(fā)送的拓撲發(fā)現(xiàn)消息經(jīng)過整個環(huán)路返回控制網(wǎng)橋,記錄環(huán)路中的網(wǎng)橋和鏈路情況??刂凭W(wǎng)橋通過拓撲指示將拓撲信息通告環(huán)路的其它網(wǎng)橋,并指定保護網(wǎng)橋和保護端口。保護網(wǎng)橋阻塞保護端口,避免數(shù)據(jù)在環(huán)路中循環(huán)。網(wǎng)橋根據(jù)拓撲信息選擇最短路徑,實現(xiàn)空間重用,同時使用心博消息檢測鏈路的連通性,并在發(fā)現(xiàn)鏈路故障時,通知保護網(wǎng)橋實現(xiàn)快速保護倒換。本發(fā)明可以在包含多個環(huán)路的復雜拓撲結構網(wǎng)絡中,通過配置發(fā)現(xiàn)環(huán)路拓撲或者通過生成樹協(xié)議簇中的協(xié)議自動發(fā)現(xiàn)環(huán)路拓撲,提高環(huán)路空間利用效率,實現(xiàn)50ms之內(nèi)的快速保護倒換。

以上公開的專利,未解決修改skb報文導致的會影響vlan功能的實現(xiàn),還會影響終端用戶隔離功能的實現(xiàn)。當前能解決上述問題的方法主要是重新添加一個入口函數(shù)來實現(xiàn)數(shù)據(jù)接收和轉發(fā)的功能。這種方法的缺點是增大了工作量,嚴重占用產(chǎn)品開發(fā)的時間,還有可能會引入其他未知的缺陷,具有很大的不確定性。



技術實現(xiàn)要素:
本發(fā)明提供了一種Linux操作系統(tǒng)下網(wǎng)橋數(shù)據(jù)轉發(fā)對網(wǎng)口進行循環(huán)遍歷的新技術方案。在網(wǎng)絡數(shù)據(jù)傳輸中,有時需要不同的網(wǎng)口之間進行通信,在通信的過程中會對所有存在的網(wǎng)口進行依次循環(huán)遍歷,對滿足要求的網(wǎng)口進行相應的操作,這里所說的操作最基本的就是進行ping操作,當一個網(wǎng)口去ping另外一個網(wǎng)口時,無論對傳輸報文進行怎樣的構造,都不會影響具體的功能。本發(fā)明是通過以下技術方案實現(xiàn)的:

一種數(shù)據(jù)包發(fā)送方法,所述數(shù)據(jù)包發(fā)送的網(wǎng)絡設備包括:至少二個數(shù)據(jù)收發(fā)端口、數(shù)據(jù)判斷模塊、數(shù)據(jù)處理模塊,所述方法包括如下步驟:

S100:一個所述數(shù)據(jù)收發(fā)端口接受所述數(shù)據(jù)包;

S200:當所述數(shù)據(jù)判斷模塊判斷所述數(shù)據(jù)包需要通過所述數(shù)據(jù)收發(fā)端口轉發(fā)時,所述數(shù)據(jù)處理模塊對所述數(shù)據(jù)包中的skb報文進行相應修改;

S300:所述數(shù)據(jù)處理模塊克隆修改后的所述skb報文,所述數(shù)據(jù)判斷模塊對所有所述數(shù)據(jù)收發(fā)端口進行循環(huán)遍歷;

S400:對于符合所述數(shù)據(jù)包轉發(fā)條件的所述數(shù)據(jù)收發(fā)端口,實現(xiàn)所述數(shù)據(jù)包轉發(fā)。

克隆修改后的所述skb報文,具體是指,skb_clone是linux內(nèi)核對SKB操作的一個函數(shù)。如果一個SKB會被不同的用戶獨立操作,而這些用戶可能只是修改SKB描述符中的某些字段值,則內(nèi)核沒必要為每個用戶復制一份完整的SKB描述及其相應的數(shù)據(jù)緩存區(qū),為了提高性能,只作克隆操作。

文中提到的將已經(jīng)修改后的SKB克隆就是使用skb_clone函數(shù),只是復制sk_buff結構,并不復制skb的數(shù)據(jù)緩沖區(qū)。Clone后的sk_buff結構與原始的sk_buff指向同一數(shù)據(jù)緩沖區(qū)。原始的和clone后的skb描述符的cloned值都會被置1,clone的skb描述符的users值置1,同時數(shù)據(jù)緩沖區(qū)的引用計數(shù)dataref增加1,以免共享數(shù)據(jù)被提前釋放。

進一步,所述的數(shù)據(jù)包發(fā)送方法,所述S200步驟中的相應修改為給所述數(shù)據(jù)包添加v l an頭。

進一步,所述的數(shù)據(jù)包發(fā)送方法,所述S200步驟中包括S210步驟:

S210:當所述數(shù)據(jù)判斷模判斷所述網(wǎng)絡設備狀態(tài)為forword,允許進行轉發(fā)的進一步操作。上述forward狀態(tài)指的報文符合轉發(fā)要求并且可以進行轉發(fā)的狀態(tài),具體可以分為本地轉發(fā)(local in)和集中轉發(fā)(forwarding)。本地轉發(fā)指的是發(fā)往本地協(xié)議棧,集中轉發(fā)則是端口與端口之間的轉發(fā)。

進一步,所述的數(shù)據(jù)包發(fā)送方法,所述S200步驟中包括S220步驟:

S220:當所述數(shù)據(jù)判斷模判斷數(shù)據(jù)包的容量小于所述網(wǎng)絡設備的mtu值,且支持gso,允許進行轉發(fā)的進一步操作。

上述mtu值,指一種通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)包大小(以字節(jié)為單位)。設置合適的MTU值,會提高通信效率。

上述GSO,即為通用分段延后處理。指網(wǎng)卡在支持GSO功能時,對于超大數(shù)據(jù)包(大于MTU值),內(nèi)核會將分段的工作延遲到交給驅動的前一刻。如果網(wǎng)卡不支持此功能,則內(nèi)核用軟件的方式對數(shù)據(jù)包進行分片。

進一步,所述的數(shù)據(jù)包發(fā)送方法,所述S400步驟包括S410步驟:

S410:所述數(shù)據(jù)包進行遵守規(guī)程處理,所述規(guī)程包括forword鏈上的規(guī)則、網(wǎng)橋防火墻中post鏈中的規(guī)則或者網(wǎng)橋防火墻中調(diào)用out鏈中的規(guī)則。

進一步,所述的數(shù)據(jù)包發(fā)送方法,所述S400步驟包括S420步驟:

S420:當所述數(shù)據(jù)判斷模塊判斷所述數(shù)據(jù)包符合相應規(guī)則的,修改所述skb報文指向的net dev。

上述net dev是net device的簡寫,就是“網(wǎng)絡設備”的意思。對應于linux中的數(shù)據(jù)結構net_device結構體,主要功能是實現(xiàn)多種硬件在軟件層次上的統(tǒng)一。net_device結構分為全局成員、硬件相關成員、接口相關成員、設備方法成員和公用成員等五個部分。

進一步,所述的數(shù)據(jù)包發(fā)送方法,所述S400步驟包括S430步驟:

S430:對于滿足所述數(shù)據(jù)包轉發(fā)條件的所述數(shù)據(jù)收發(fā)端口,調(diào)用函數(shù)_packet_hook進行所述數(shù)據(jù)包轉發(fā)的處理。

本發(fā)明還提供了一種網(wǎng)絡設備,包括至少二個數(shù)據(jù)收發(fā)端口、數(shù)據(jù)判斷模塊、數(shù)據(jù)處理模塊,

所述數(shù)據(jù)收發(fā)端口,用于接受或者發(fā)送數(shù)據(jù)包;

所述數(shù)據(jù)處理模塊,用于修改所述數(shù)據(jù)包中的skb報文;

所述數(shù)據(jù)判斷模塊,用于對所述數(shù)據(jù)包的轉發(fā)條件進行判斷,且對所述數(shù)據(jù)收發(fā)端口進行循環(huán)遍歷,尋找符合所述數(shù)據(jù)包的轉發(fā)條件的所述數(shù)據(jù)收發(fā)端口。

進一步,所述的網(wǎng)絡設備,任一所述數(shù)據(jù)收發(fā)端口接受所述數(shù)據(jù)包后,調(diào)用網(wǎng)卡驅動函數(shù)處理所述數(shù)據(jù)包。

進一步,所述的網(wǎng)絡設備,符合所述數(shù)據(jù)包的轉發(fā)條件的所述數(shù)據(jù)收發(fā)端口為所述網(wǎng)絡設備的至少一個非接受所述數(shù)據(jù)包的所述數(shù)據(jù)收發(fā)端口。

進一步,所述的網(wǎng)絡設備,所述數(shù)據(jù)判斷模塊判斷所述轉發(fā)條件包括:網(wǎng)橋端口的狀態(tài)是否為forword、所述數(shù)據(jù)包大小是否小于所述網(wǎng)絡設備的mtu值、是否支持gso、所述數(shù)據(jù)包是否符合相應規(guī)則、發(fā)送所述數(shù)據(jù)包的所述數(shù)據(jù)收發(fā)端口是否與接受所述數(shù)據(jù)包的所述數(shù)據(jù)收發(fā)端口相同。

再進一步,所述的網(wǎng)絡設備,所述數(shù)據(jù)處理模塊根據(jù)所述數(shù)據(jù)判斷模塊判斷為不符合所述轉發(fā)條件的,對所述數(shù)據(jù)包進行分片或者丟棄操作。

上述分片操作,是指鏈路層具有最大傳輸單元MTU這個特性,它限制了數(shù)據(jù)幀的最大長度,不同的網(wǎng)絡類型都有一個上限值。如果傳輸數(shù)據(jù)包的長度超過了MTU值且可以分片傳輸,就會對數(shù)據(jù)包進行分片操作,使每一片的長度都小于或等于MTU值。這樣就可以將需要傳輸?shù)臄?shù)據(jù)報文分為若干分片進行傳輸,并在目標系統(tǒng)中進行重組。

本發(fā)明至少具有以下有益效果之一:

1.本發(fā)明克服了原先數(shù)據(jù)包轉發(fā),若修改報文,不僅會影響vlan功能的實現(xiàn),還會影響終端用戶隔離功能的實現(xiàn)的技術問題。

2.本發(fā)明賦予網(wǎng)絡設備根據(jù)數(shù)據(jù)包轉發(fā)進行自動檢測和修改報文的能力。

3.本發(fā)明極大地方便網(wǎng)橋類網(wǎng)絡設備架設工作。

4.本發(fā)明能夠做到自動、高效、便捷地完成互聯(lián)網(wǎng)中數(shù)據(jù)包的轉發(fā)工作。

5、本發(fā)明提供的自動修改報文、復制報文、網(wǎng)絡設備的網(wǎng)口循環(huán)遍歷發(fā)送對應數(shù)據(jù)包方法,可靠性高,同時執(zhí)行效率高、應用范圍廣。

附圖說明

下面結合附圖和具體實施方式對本發(fā)明作進一步詳細說明:

圖1為本發(fā)明第一實施例流程示意圖;

圖2為本發(fā)明第一實施例模塊示意圖;

圖3為本發(fā)明第三實施例流程示意圖。

附圖標記說明

1000-網(wǎng)絡設備;100-數(shù)據(jù)收發(fā)端口;200-數(shù)據(jù)判斷模塊;300-數(shù)據(jù)處理模塊。

具體實施方式

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,以下說明和附圖對于本發(fā)明是示例性的,并且不應被理解為限制本發(fā)明。以下說明描述了眾多具體細節(jié)以方便對本發(fā)明理解。然而,在某些實例中,熟知的或常規(guī)的細節(jié)并未說明,以滿足說明書簡潔的要求。

在本申請一個典型的計算硬件配置中,客戶端/終端、網(wǎng)絡設備和可信方均包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡接口和內(nèi)存。

本發(fā)明中的客戶端、移動終端或網(wǎng)絡設備包括處理器,含單核處理器或多核處理器。處理器也可稱為一個或多個微處理器、中央處理單元(CPU)等等。更具體地,處理器可為復雜的指令集計算(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實現(xiàn)其他指令集的處理器,或實現(xiàn)指令集組合的處理器。處理器還可為一個或多個專用處理器,諸如專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、數(shù)字信號處理器(DSP)、網(wǎng)絡處理器、圖形處理器、網(wǎng)絡處理器、通信處理器、密碼處理器、協(xié)處理器、嵌入式處理器、或能夠處理指令的任何其他類型的邏輯部件。處理器用于執(zhí)行本發(fā)明所討論的操作和步驟的指令。

本發(fā)明中的客戶端、移動終端或網(wǎng)絡設備包括存儲器,用于存儲大數(shù)據(jù),可包括一個或多個易失性存儲設備,如隨機存取存儲器(RAM)、動態(tài)RAM(DRAM)、同步DRAM(SDRAM)、靜態(tài)RAM(SRAM)或其他類型的存儲設備。存儲器可存儲包括由處理器或任何其他設備執(zhí)行的指令序列的信息。例如,多種操作系統(tǒng)、設備驅動程序、固件(例如,輸入輸出基本系統(tǒng)或BIOS)和/或應用程序的可執(zhí)行代碼和/或數(shù)據(jù)可被加載在存儲器中并且由處理器執(zhí)行。

本發(fā)明中的客戶端、移動終端或網(wǎng)絡設備的操作系統(tǒng)可為任何類型的操作系統(tǒng),例如微軟公司的Windows、Windows Phone,蘋果公司IOS,谷歌公司的Android,以及Linux、Unix操作系統(tǒng)或其他實時或嵌入式操作系統(tǒng)諸如VxWorks等。

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,以下說明和附圖對于本發(fā)明是示例性的,并且不應被理解為限制本發(fā)明。以下說明描述了眾多具體細節(jié)以方便對本發(fā)明理解。然而,在某些實例中,熟知的或常規(guī)的細節(jié)并未說明,以滿足說明書簡潔的要求。本發(fā)明的具體設備及方法參見下述實施例:

現(xiàn)有解決方案中主要實現(xiàn)函數(shù)br_flood的代碼塊如下:

從代碼中可以看出:該函數(shù)的邏輯是先循環(huán)遍歷網(wǎng)橋下的所有端口,對于符合數(shù)據(jù)轉發(fā)條件的端口,會復制一份skb后調(diào)用函數(shù)_packet_hook進行后續(xù)處理。另外,從代碼中可以看出函數(shù)循環(huán)的過程,prev端口號總是滯后p端口號(比如:p為ath31時,prev為NULL、p為ath30時,prev為ath31、p為ath29時,prev為ath30,以此類推一直遍歷到eth0端口)。這種邏輯實現(xiàn)方式的好處是能很好的保證循環(huán)遍歷網(wǎng)口的有序性,但是這種方法必須有個前提,在數(shù)據(jù)轉發(fā)的過程中不能對skb進行相應的修改,如果修改了(比如:添加相應的報文頭)再進行網(wǎng)口循環(huán)遍歷,會出現(xiàn)一些端口識別不了對應的報文,導致端口與端口之間不能進行通信,進而影響具體功能的實現(xiàn)。

文中所提到到的eth0為無線AP的以太網(wǎng)接入口,ath0、ath1、ath2等指的是Atheros芯片所包含的無線網(wǎng)絡接口。一般,有線接入口為eth0口,無線網(wǎng)絡接入口為athx口(x為0~31)

在產(chǎn)品開發(fā)的過程中,根據(jù)需求添加具體新功能時,會在函數(shù)should_deliver中添加對數(shù)據(jù)報文的處理函數(shù),而在該處理函數(shù)中經(jīng)常會有對skb修改的操作,比如在添加業(yè)務vlan功能時,會在發(fā)送端口為eth0時給skb添加VLAN頭。這時,當連接到ath0端口的終端去ping連接到其他端口上的終端的過程中,會對端口進行循環(huán)遍歷,在p遍歷到ath0時,會出現(xiàn)跳過發(fā)送處理的情況,因為當循環(huán)遍歷到ath0時,函數(shù)中br_flood中should_deliver(p,skb)不為真(原因:不會往入端口發(fā)送一份復制本身的報文),所以不執(zhí)行if(should_deliver(p,skb))體內(nèi)的代碼,而此時prev為ath1。當遍歷到eth0時,根據(jù)上面的描述should_deliver處理過程中會給報文添加vlan頭,這導致接下來的skb_clone復制了一個帶VLAN頭的報文從ath1接口發(fā)出。而連接端口ath1的終端不識別帶vlan信息的報文,所以會出現(xiàn)ping不通的情況。

另外,當連接到athx(x不等于0)接口的終端去ping連接到其他接口上的終端時,在端口p遍歷到eth0時,prev為端口ath0,同時又因為should_deliver處理過程中會給報文添加vlan頭,所以會出現(xiàn)ping發(fā)送的報文添加vlan信息的情況。所以無論是連接到哪個端口(ath0除外),去ping連接到ath0的終端,都會出現(xiàn)ping不通的情況。

由以上描述,不僅會影響vlan功能的實現(xiàn),還會影響終端用戶隔離功能的實現(xiàn),所以應該修改循環(huán)遍歷網(wǎng)口轉發(fā)數(shù)據(jù)的流程來改善。

第一實施例

本實施例提供一種數(shù)據(jù)包發(fā)送方法,用以解決上述問題,所述數(shù)據(jù)包發(fā)送的網(wǎng)絡設備包括:至少二個數(shù)據(jù)收發(fā)端口、數(shù)據(jù)判斷模塊、數(shù)據(jù)處理模塊,所述方法包括如下步驟:

S100:一個所述數(shù)據(jù)收發(fā)端口接受所述數(shù)據(jù)包;

S200:當所述數(shù)據(jù)判斷模塊判斷所述數(shù)據(jù)包需要通過所述數(shù)據(jù)收發(fā)端口轉發(fā)時,所述數(shù)據(jù)處理模塊對所述數(shù)據(jù)包中的skb報文進行相應修改;

S300:所述數(shù)據(jù)處理模塊克隆修改后的所述skb報文,所述數(shù)據(jù)判斷模塊對所有所述數(shù)據(jù)收發(fā)端口進行循環(huán)遍歷;

S400:對于符合所述數(shù)據(jù)包轉發(fā)條件的所述數(shù)據(jù)收發(fā)端口,實現(xiàn)所述數(shù)據(jù)包轉發(fā)。

克隆修改后的所述skb報文,具體是指,skb_clone是linux內(nèi)核對SKB操作的一個函數(shù)。如果一個SKB會被不同的用戶獨立操作,而這些用戶可能只是修改SKB描述符中的某些字段值,則內(nèi)核沒必要為每個用戶復制一份完整的SKB描述及其相應的數(shù)據(jù)緩存區(qū),為了提高性能,只作克隆操作。

文中提到的將已經(jīng)修改后的SKB克隆就是使用skb_clone函數(shù),只是復制sk_buff結構,并不復制skb的數(shù)據(jù)緩沖區(qū)。Clone后的sk_buff結構與原始的sk_buff指向同一數(shù)據(jù)緩沖區(qū)。原始的和clone后的skb描述符的cloned值都會被置1,clone的skb描述符的users值置1,同時數(shù)據(jù)緩沖區(qū)的引用計數(shù)dataref增加1,以免共享數(shù)據(jù)被提前釋放。

優(yōu)選地,所述的數(shù)據(jù)包發(fā)送方法,所述S200步驟中的相應修改為給所述數(shù)據(jù)包添加vlan頭。

本實施例還提供一種網(wǎng)絡設備,包括至少二個數(shù)據(jù)收發(fā)端口、數(shù)據(jù)判斷模塊、數(shù)據(jù)處理模塊,

所述數(shù)據(jù)收發(fā)端口,用于接受或者發(fā)送數(shù)據(jù)包;

所述數(shù)據(jù)處理模塊,用于修改所述數(shù)據(jù)包中的skb報文;

所述數(shù)據(jù)判斷模塊,用于對所述數(shù)據(jù)包的轉發(fā)條件進行判斷,且對所述數(shù)據(jù)收發(fā)端口進行循環(huán)遍歷,尋找符合所述數(shù)據(jù)包的轉發(fā)條件的所述數(shù)據(jù)收發(fā)端口。

第二實施例

在實施例一的基礎上,優(yōu)選的所述的數(shù)據(jù)包發(fā)送方法,所述S200步驟中包括S210步驟:

S210:當所述數(shù)據(jù)判斷模判斷所述網(wǎng)絡設備狀態(tài)為forword,允許進行轉發(fā)的進一步操作。上述forward狀態(tài)指的報文符合轉發(fā)要求并且可以進行轉發(fā)的狀態(tài),具體可以分為本地轉發(fā)(local in)和集中轉發(fā)(forwarding)。本地轉發(fā)指的是發(fā)往本地協(xié)議棧,集中轉發(fā)則是端口與端口之間的轉發(fā)。

進一步優(yōu)選地,所述的數(shù)據(jù)包發(fā)送方法,所述S200步驟中包括S220步驟:

S220:當所述數(shù)據(jù)判斷模判斷數(shù)據(jù)包的容量小于所述網(wǎng)絡設備的mtu值,且支持gso,允許進行轉發(fā)的進一步操作。

上述mtu值,指一種通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)包大小(以字節(jié)為單位)。設置合適的MTU值,會提高通信效率。

上述GSO,即為通用分段延后處理。指網(wǎng)卡在支持GSO功能時,對于超大數(shù)據(jù)包(大于MTU值),內(nèi)核會將分段的工作延遲到交給驅動的前一刻。如果網(wǎng)卡不支持此功能,則內(nèi)核用軟件的方式對數(shù)據(jù)包進行分片。

優(yōu)選地,所述的數(shù)據(jù)包發(fā)送方法,所述S400步驟包括S410步驟:

S410:所述數(shù)據(jù)包進行遵守規(guī)程處理,所述規(guī)程包括forword鏈上的規(guī)則、網(wǎng)橋防火墻中post鏈中的規(guī)則或者網(wǎng)橋防火墻中調(diào)用out鏈中的規(guī)則。

優(yōu)選地,所述的數(shù)據(jù)包發(fā)送方法,所述S400步驟包括S420步驟:

S420:當所述數(shù)據(jù)判斷模塊判斷所述數(shù)據(jù)包符合相應規(guī)則的,修改所述skb報文指向的net dev。

上述net dev是net device的簡寫,就是“網(wǎng)絡設備”的意思。對應于linux中的數(shù)據(jù)結構net_device結構體,主要功能是實現(xiàn)多種硬件在軟件層次上的統(tǒng)一。net_device結構分為全局成員、硬件相關成員、接口相關成員、設備方法成員和公用成員等五個部分。

優(yōu)選地,所述的數(shù)據(jù)包發(fā)送方法,所述S400步驟包括S430步驟:

S430:對于滿足所述數(shù)據(jù)包轉發(fā)條件的所述數(shù)據(jù)收發(fā)端口,調(diào)用函數(shù)_packet_hook進行所述數(shù)據(jù)包轉發(fā)的處理。

在實施例一提供的網(wǎng)絡設備基礎上,優(yōu)選的所述的網(wǎng)絡設備,任一所述數(shù)據(jù)收發(fā)端口接受所述數(shù)據(jù)包后,調(diào)用網(wǎng)卡驅動函數(shù)處理所述數(shù)據(jù)包。

優(yōu)選地,所述的網(wǎng)絡設備,符合所述數(shù)據(jù)包的轉發(fā)條件的所述數(shù)據(jù)收發(fā)端口為所述網(wǎng)絡設備的至少一個非接受所述數(shù)據(jù)包的所述數(shù)據(jù)收發(fā)端口。

優(yōu)選地,所述的網(wǎng)絡設備,所述數(shù)據(jù)判斷模塊判斷所述轉發(fā)條件包括:網(wǎng)橋端口的狀態(tài)是否為forword、所述數(shù)據(jù)包大小是否小于所述網(wǎng)絡設備的mtu值、是否支持gso、所述數(shù)據(jù)包是否符合相應規(guī)則、發(fā)送所述數(shù)據(jù)包的所述數(shù)據(jù)收發(fā)端口是否與接受所述數(shù)據(jù)包的所述數(shù)據(jù)收發(fā)端口相同。

進一步優(yōu)選地,所述的網(wǎng)絡設備,所述數(shù)據(jù)處理模塊根據(jù)所述數(shù)據(jù)判斷模塊判斷為不符合所述轉發(fā)條件的,對所述數(shù)據(jù)包進行分片或者丟棄操作。

上述分片操作,是指鏈路層具有最大傳輸單元MTU這個特性,它限制了數(shù)據(jù)幀的最大長度,不同的網(wǎng)絡類型都有一個上限值。如果傳輸數(shù)據(jù)包的長度超過了MTU值且可以分片傳輸,就會對數(shù)據(jù)包進行分片操作,使每一片的長度都小于或等于MTU值。這樣就可以將需要傳輸?shù)臄?shù)據(jù)報文分為若干分片進行傳輸,并在目標系統(tǒng)中進行重組。

第三實施例

本實施例主要優(yōu)化完善Linux網(wǎng)橋數(shù)據(jù)轉發(fā)的流程。如圖3本發(fā)明第三實施例流程示意圖所示,具體步驟如下:

(a)網(wǎng)橋端口接收數(shù)據(jù)包,經(jīng)網(wǎng)卡驅動后,調(diào)用函數(shù)br_forward,實現(xiàn)數(shù)據(jù)轉發(fā)。

(b)在函數(shù)br_forward中,會對端口進行相應的判斷,是否符合數(shù)據(jù)包轉發(fā)功能。并且需要判斷網(wǎng)橋端口的狀態(tài)是否為forword,如果都符合,進行下一步轉發(fā)流程。

(c)轉發(fā)過程中需要判斷數(shù)據(jù)包大小是否小于設備的mtu值,支持gso,如果成立,則調(diào)用dev_queue_xmit,傳輸數(shù)據(jù)包,如果不成立,則釋放。

(d)如果以上條件成立,則可以對skb進行相應修改,主要在should_deliver函數(shù)中進行,并判斷是否符合轉發(fā)條件,如果符合則說明數(shù)據(jù)包入口端口和出口端口不同,且網(wǎng)橋端口狀態(tài)為forward,則進行下一步轉發(fā)流程。

(e)調(diào)用br_flood函數(shù)實現(xiàn)數(shù)據(jù)包轉發(fā),主要是對skb和轉發(fā)流程進行相應操作,具體方法是先克隆已經(jīng)修改的skb,后對轉發(fā)端口進行循環(huán)遍歷,避免數(shù)據(jù)包接收端口識別不了已修改的報文。對于符合轉發(fā)條件的端口,調(diào)用函數(shù)_packet_hook進行后續(xù)處理。

(f)在數(shù)據(jù)包向其他端口轉發(fā)之前,需要在函數(shù)br_deliver中判斷端口是否符合轉發(fā)數(shù)據(jù)包的具體規(guī)則。

(g)在以上的操作中,需要調(diào)用NF_HOOK處理相應規(guī)則,比如:forword鏈上的規(guī)則、網(wǎng)橋防火墻中post鏈中的規(guī)則進行匹配處理以及網(wǎng)橋防火墻中調(diào)用out鏈中的規(guī)則,在此基礎上修改skb指向的net dev,對允許通過的數(shù)據(jù)包調(diào)用br_forward_finish進行后續(xù)處理。

對于本領域技術人員而言,顯然本發(fā)明不限于上述示范性實施例的細節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本發(fā)明。因此,無論從哪一點來看,均應將實施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權利要求而不是上述說明限定,因此旨在將落在權利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本發(fā)明內(nèi)。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復數(shù)。裝置權利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
灯塔市| 科尔| 扎囊县| 弥渡县| 开远市| 灵璧县| 嘉义县| 潮州市| 阿拉善盟| 西吉县| 平江县| 苗栗市| 高州市| 涿州市| 青川县| 贵南县| 荃湾区| 尼勒克县| 顺义区| 颍上县| 邛崃市| 江川县| 邯郸市| 卢湾区| 临漳县| 荆州市| 甘肃省| 邳州市| 万载县| 蚌埠市| 万州区| 西青区| 曲周县| 庆云县| 新余市| 洞口县| 常德市| 舞钢市| 化德县| 龙海市| 赤水市|