最近在思考一个问题,图书馆里书越来越多,书店的书也越来越多,人类的问题非但没有减少,反而越来越多?
我从事计算机网络行业,谈谈我的观点。
计算机网络技术发展特别快,有些技术从诞生到消失可能只有几年的时间,所以还没有来得及出书,技术就消失得无影无踪。
还有一些技术,比如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会话数目。
相信这篇回答不会在任何教科书,或者厂家的配置文档、白皮书里找到。如果喜欢这篇文章,请点赞支持,谢谢!