路由器开启NAT和防火墙功能,性能会下降吗?

来自:车小胖谈网络 (微信号:chexiaopangnetwork),作者:车小胖谈网络

最近在思考一个问题,图书馆里书越来越多,书店的书也越来越多,人类的问题非但没有减少,反而越来越多?


我从事计算机网络行业,谈谈我的观点。


计算机网络技术发展特别快,有些技术从诞生到消失可能只有几年的时间,所以还没有来得及出书,技术就消失得无影无踪。

 

还有一些技术,比如NAT技术,尽管很常用也有技术标准,但是各个厂家的实现方式并不统一。技术标准是先有产品后来才有的技术标准,所以这种技术标准并没有多大的用处,因为产品已经成型了。

 

但是,NAT技术并不需要不同厂家平台的交互,所以不会有什么问题。不像路由协议需要交互信息,如果没有严格遵照标准,可能就无法通信了。

 

所以像这些技术很难去出书,不像路由协议那么有广泛性、代表性。厂家更愿意出一些配置文档、白皮书供用户参阅。

 

这些内容会告诉用户如何配置、以及简单的工作原理,但是很难找到这个问题的答案,这就是为何知乎等问答平台可以诞生的原因。

 

问题来了,答主辛辛苦苦写的文字,一分钱没有,这种依赖雷锋式奉献精神的模式到底能走多远?所以,我很不看好这个平台,除非让优质内容的输出者得到自己应得的那一份。

 

听闻Oracle关闭中国研发中心,波及1000多人,对于有扎实技术的骨干人员,重新找一份类似工作不难,但是没有核心技术的人员,短期内可能会备受煎熬。


学好一门技术,可以拯救自己于危难时刻!

 

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表就变得强大了起来。如同加满油的老司机,地板油走起,一路绝尘。。。


有乘客会问,TCP的第二个报文是CPU转发还是硬件转发?

 

老司机冷笑一声,我都有了NAT表,可以独自开车,为什么要劳烦CPU大神!

 

话音未落,老司机一个地板油,风驰电掣开始飙车,乘客发出鬼哭狼嚎的尖叫声。。。

 

归纳一下

配置NAT之后,会对CPU有影响。至于影响多少,取决于有多少个全新的TCP/UDP会话数目。

 

相信这篇回答不会在任何教科书,或者厂家的配置文档、白皮书里找到。如果喜欢这篇文章,请点赞支持,谢谢!

推荐↓↓↓
程序员的那点事
上一篇:二层交换机会识别IP地址吗? 下一篇:为什么多线程下载能加速?