计算机网络,大学的时候学习过,但是学了一学期,就是记得一些模糊的概念。工作之后尝试重新学习了一边,发现还是只记得一些已经不那么陌生的概念。知道计算机网络很重要,但是就是无法理解计算机网络,这是一件很烦人的事情。一直都淹没在细节中,搞不清楚什么是重要的。
这次参加的计算机网络读书活动,至少要搞清楚一个问题,计算机网络解决的是什么问题?当然这个问题第一章没有告诉我们答案,估计后面的章节也不会告诉我们答案。可能计算机网络的书籍,更多的是材料的堆积吧,而不是告诉我们为何如此设计,面对的需求是什么。想了好一阵子,觉得,计算机网络解决的问题是远程方法调用的问题。
设想一个场景,在还没有出现什么tcp/ip协议,更没有什么http协议的时代,你接到一个需求,要实现远程方法调用,你会怎么设计代码?我们会这么思考。物理设备必须是连接的。其次,我们会设计一个管道,用于数据的流动。最后我们做一个应用方法,方法入参就是(远程机器地址,端口,方法名,参数)。就按照这个分层设计,写了三个方法,测试通过,对产品经理交差了。需求总是会变更,架构也要慢慢演化。按照这个三层模型,按照需求的驱动,慢慢就演化为现在的四层架构。
学习的话,自顶向下,我觉得对新手是友好的,但是要理解的话,还是要自己从内往外构建出架构会比较好一些。学习计算机网络,如果告诉自己,计算机网络解决的问题是远程方法调用的问题,那么应该不会迷失在细节中,所有的细节不过就是对远程调用的一个设计而已。现代计算机网络,本质上就是一个分布式系统。如果我们站在架构的角度学习计算机网络,可能会好一些。学习计算机网络,我们应该学习的是如何设计,而不是细节。
后面每一章,就按照网络系统是如何架构和设计来思考问题。
网友评论