我正在爲最近工作的網絡項目尋求幫助和意見建議。這需要Linux機器成爲被動網絡設備。來自NIC的以太網幀
網絡數據包從一個網絡接口進來並從另一個接口(net-eth0 - > Linux PC - eth1 - > net)出來,而不對數據進行任何修改。
即將在Linux系統上運行的應用程序將僅更改數據包的順序。這將是一個「愚蠢的」網絡模擬器應用程序。
第一個實現是使用RAW套接字進行的,每當數據包到達用戶空間時調用read(),並且在將以太網數據包發送到NIC時調用write()。
我想知道是否有比RAW套接字更實用,更直接的方式,繞過Linux的網絡堆棧。
你不能繞過Linux網絡堆棧,他們這樣做的方式可能是最簡單的方法。 你是什麼意思的實際? –
實用的方法是實現的技術部分。套接字的實現需要一個具有非阻塞IO的tx-rx機制,這是我在第一個地方利用select()和pthreads實現的。是否有更好的設計理念? 此外我正在尋找一種方式,中間系統不會處理所有的網絡流量。只有仿真應用程序應該在兩個接口之間運行。 – cyberrobot
你可以做的是創建一個'netfilter'鉤子並讓它接收你的數據包,然後立即發送它們。這樣你的數據包就不必傳送到用戶空間,你可以在內核空間內進行更快的處理。 –