对于初学者甚至许多计算机科班出身的同学来说,学习网络和操作系统一样,感觉十分抽象,学完总有一种朦朦胧胧的感觉,因为毕竟对于绝大多数人来说,工作中都不需要接触这些东西。但是作为一个较真的程序员,还是想慢慢深入理解其中的奥秘,这也就是我想边学边写博客的原因,也希望能给初学者一些借鉴。
OSI将计算机网络可以分为七层模型,从底层网上分别是物理层,数据链路层,网络层,... ,应用层,自顶向下越来越靠近硬件,这是几乎是所有讲网络的书籍都会提到的,但是作为一个web developer来说,只需要从网络层开始学习,网络层之下太偏硬件,只需要知道原理即可。就算是在工作中,需要对web application进行优化,作为一个开发人员你也不可能像网络工程师那样去优化硬件和网络拓扑结构,那不是我们该关心的。但是我们必须要搞清楚物理层和数据链路层是在做什么。
我们都知道,计算机物理网卡里发出和接受的信号都是二进制的数字信号,所以我们必须设计一种网络,把不同的计算机连接起来,让数字信号能从一台计算机传递到另一台计算机。物理层总的来说负责二进制数字信号(比特流)的传输,当然它的实现是很复杂的。
那么问题来了,物理层只知道傻瓜式的传递比特流,它并不知道要当前host想和谁通信,只是无脑传递数据而已,更别提理解传递的数据是什么了。如果按照这种方式组成一个