盒子裝置介面收發包的思考1

2022-06-17 16:54:18 字數 1627 閱讀 6125

目前在處理盒子產品時,發現wan口和lan口收發報文時還在走核心路由邏輯,因為從wan口進來的包如果**只能從lan口**出去,所以此時路由查詢是個多餘動作!!

此處應該是乙個可以優化點,來試一試吧!!mark,也不想不通為啥乙個產品這麼多年都沒有人去思考這些!!!

工作中還是要多想一想為什麼?不要隨波逐流的接受!! 思考內在的原因,說不定這些看起來正確的東西實際上是錯誤!最起碼在目前場景下是錯誤的!!

從這裡進入l4傳輸層

/** ip_local_deliver_finish()將輸入資料報從網路層傳遞

* 到傳輸層。過程如下:

* 1)首先,在資料報傳遞給傳輸層之前,去掉ip首部

* 2)接著,如果是raw套接字接收資料報,則需要

* 複製乙份副本,輸入到接收該資料報的套接字。

* 3)最後,通過傳輸層的接收例程,將資料報傳遞

* 到傳輸層,由傳輸層進行處理。 */

/*ip 層處理報文過程中,回複製乙份報文到raw_socket中去;有的是ipproto_tcp/ipproto_raw

當 socket(af_inet, sock_raw, ipproto_raw)時,它會接收所有協議的資料報,並且

ip_hdrincl 是預設開啟的,即是說應用層要提供 l3 和 l4 層的頭。再如,如果是

ipproto_tcp 時,它只接收到 tcp 包。而 ip_hdrincl 是預設不開啟的,即系統會處理 l3

的頭部*/

static

int ip_local_deliver_finish(struct net *net, struct sock *sk, struct sk_buff *skb)

nf_reset(skb);

}ret = ipprot->handler(skb);//

這裡面會進入udp tcp傳輸層

if (ret < 0

) __ip_inc_stats(net, ipstats_mib_indelivers);

} else

kfree_skb(skb);

} else}}

out: rcu_read_unlock();

return0;

}可以看到:ip_rcv_finish ip_local_deliver_finish涉及到路由的邏輯主要是:

對於此時產品下:可以判定的是報文肯定會上tcp/ip協議棧,所以對transparent 流量,我們可以直接簡單的忽略掉路由系統,直接上傳報文到協議棧!!!

對於tcp l4來說 不會涉及到路由功能;

所以:可知對於tproxy 功能收包時 可以不需要路由邏輯,即可以去掉相關冗餘邏輯!!!

tcp udp收發包的機制

tcpudp 傳送安全送達 只管傳送 接收與建立連線 是 三次握手 否 有資料報,無需連線 資料大小 無限制每個資料報64k 可靠性可靠 不可靠速度 慢 三次握手才能完成連線 快 無需連線 應用流 qq 握手次數 具體情況 1建立連線時,客戶端傳送同步序列編號到伺服器,並進入傳送狀態,等待伺服器確認...

網絡卡收發包的offload總結

網絡卡的offload是指將cpu對資料報的一些處理操作轉到硬體網絡卡上進行,由此釋放出cpu的計算資源。offload也被稱為硬體解除安裝。從2012年起,offload技術開始在網絡卡上使用。發展至今,網絡卡上已經支援多種形式的offload。目前,在收發方向上,網絡卡各自支援不同的offloa...

交換晶元收發包的 DMA 實現原理

交換晶元支援 報文 計數 表項3種dma型別,其中報文dma包括系統從晶元到接收報文或傳送報文到交換晶元,計數dma用來從片上獲取統計計數,表項dma功能分為slam dma 系統記憶體dma到片上交換晶元表項內 和table dma 從晶元的表項內獲取內容dma到系統記憶體 是ram和交換晶元之間...