路由器開啟NAT和防火牆功能後性能能下降多少?
好像會大幅下降?
CPU進程轉發
IP報文到達入介面,轉交給軟體轉發進程,查詢路由表,找到對應出口及下一跳IP,查詢下一跳MAC,完成二層封裝,從出口發送出去。
硬體快速轉發
IP 報文到達入介面,硬體晶元查詢硬體轉發表,獲得對應出口及二層封裝,從出口發送出去。
硬體轉發要遠遠快於CPU進程轉發,相差至少一個數量級。同學們會疑惑地問,既然硬體轉發那麼快,為何還用進程轉發呢?
硬體轉發晶元長於轉發流量,但是卻處理不了複雜的邏輯。
硬體轉發表是天上掉下來的餡餅嗎?不是的!
是天生就存在於硬體晶元里的嗎? 不是的!
是硬體晶元自己學習到的嗎?不是的!
既然都不是,那是從哪裡來的呢?
路由進程告訴的!
路由進程,是不是就是路由協議RIP 、OSPF、BGP之流?
對的。
路由進程跑在CPU上,路由進程和鄰居、整個網路同步完路由表,將路由表(以二層轉發表的形式)下發到硬體晶元里,然後硬體晶元就可以愉快地工作了。
當路由器配置了NAT,路由器並不能將二層轉發表提前下發到硬體晶元,為什麼呢?
每一個TCP/UDP會話的四元組(源IP,源埠,目的IP,目的埠)是動態的,這些動態的信息沒有辦法提前知曉。所以,TCP/UDP會話第一個報文到達路由器入口時,硬體晶元的轉發表(NAT表)是空的,必須交由CPU進程處理。
CPU最強大的地方,就是可以處理任何複雜的邏輯!NAT進程立馬介入,生成一個動態的NAT表條目,將IP報文的私有源IP+埠,替換成公網的IP + 埠,然後轉發出去。
完了嗎?
沒有!
NAT進程還需要將NAT轉發表下發到硬體,硬體晶元有了NAT表就變得強大了起來。如同加滿油的老司機,地板油走起,一路絕塵。。。