网络基础一
从今天开始我们将要从系统横跨到网络的学习了,因此有些书我们就可以读起来了。
操作系统
原理:
《操作系统精髓与设计原理》、《现代操作系统》
Linux原理方面的书:
《Linux内核设计与实现》–陈莉君、《深入理解Linux内核》(选读–不作为重点)
Linux编程方面的书:
《Linux高性能服务器编程》、《Unix环境高级编程》
体系结构:
《深入理解计算机系统》
对于系统学过前面的知识建议读书顺序:先编程,后原理
1.计算机网络背景
1.1 网络发展
下面的网络的发展有一个逻辑链条,计算机本质是为了给人提供计算任务,而人之间是要相互协作的,注定计算机之间也必须相互协作。计算机一定是通过相通数据来相互协作的。所以网络的发展有它的必然性。
独立模式:计算机之间相互独立
网络互联: 多台计算机连接在一起, 完成数据共享
比如说清华大学实验室和贝尔实验室是两个不同的局域网,它们各自内部可以互相通信,并且它们之间还想互相通信。
而且学习网络一定不能忘记一个角色:运营商, 建基站,拉网线等等都是他们做的。
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起
路由器左边是一个局域网,右边也是一个局域网,用路由器连接已经属于跨网络了。
广域网WAN: 将远隔千里的计算机都连在一起
所谓 “局域网” 和 “广域网” 只是一个相对的概念。 比如,我们有 “天朝特色” 的广域网,也可以看做一个比较大的局域网。
假设有一台主机里面有很多设备CPU、显卡等等,我们知道这些都是用一条总线连接起来的。所以,一台计算机内部本质也是一个小型网络结构。并且计算机内部也有协议,驱动程序访问硬件就是通过协议来访问的。所以每一个硬件都是自己的协议。
现在假设把主机里的硬件拿出去,主机在浙江,硬盘在贵州,两个通过网线连接起来,以前我们写数据写到本地,现在无非就是通过网络写到远端。这里就相当于一台大型计算机。
总之:计算机体系结构中网络,网络中有体系结构。
1.2 认识 “协议”
可能我们所知道的 “协议” 是一种约定。那为什么要有协议呢?这个约定是什么呢?
假设两个人近距离沟通时,沟通不会有太大的障碍,毕竟离的近说话都能听到,有什么事情可以当面解决。
但是当两个人一个在桥头一个在桥尾距离500m,有可能这句话整体没听到,部分没听到。因为距离较远连对方的脸都看不到因此确定不了对方有没有收到。
因为通信距离变长了,可能会引入新的通信问题。所以我们要尽可能地减少通信成本:因此需要定制协议!
尽可能地减少通信成本:定制协议
所有网络的问题:本质都是传输距离变长了!
上面说了这么多只回答了为什么要有协议,下面我们谈谈什么是协议。
假如张三考上大学了但是家里比较一般,因此打电话的时候能省就省。当时打电话不通不要钱,通了没接不要钱,因此他走的时候和他父亲这样说,我在外面会给家里打电话,我们做个约定电话来了不要着急接,电话响一声就挂代表我到学校了,电话响两声就挂代表你该给我生活费了,电话响三声及以上代表我有事要和你说需要你接电话。当张三上学走了它和家人的距离就拉远了。然后在外地上学就通过这样打电话的方式和家里人互相交流。
这个故事我们抓住重点,电话响一声、两声、三声都代表不同的含义。而这个含义不用解释,双方早就已经有了共识了。-------->这就是我们的约定,而这种约定就是协议。而这种协议的约定是为了减少通信成本!
如果刚才的故事用计算机语言来表达, 这个就是计算机协议!
计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。
只要通信的两台主机, 约定好协议就可以了么?
比如一个土匪寨今天夜里的口号是天王盖地虎,对应的口号是宝塔镇河妖!下面的人都觉得这个约定很好。并且也知道这回事了。但是这个寨子不是同一个地方的人,有北京的、上海的、浙江的、河南的。他们的口音不一样。所以当守夜的人说天王盖地虎的时候,另一个人虽然知道回答宝塔镇河妖,但是用的是方言。因此守夜的人根本听不懂,认为你说错了。
所以说协议虽然约定好了,但是执行上不太一样,那可能也不太行!
- 计算机生产厂商有很多;
- 计算机操作系统, 也有很多;
- 计算机网络硬件设备, 还是有很多;
- 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议;
就好比上面的故事,寨主都让用普通话来进行口号的提问与回答。
2.网络协议初识
协议一定要有配套的数据结构,还有对应的算法来支持。所以协议我们依旧可以认为是软件。后面我们也能看见协议是按照层状结构来划分的。既软件是按照层状结构划分的。
2.1 协议分层
下面以打电话的例子来说明协议为什么要分层
当你在和你朋友打电话的时候,你认为你在和你的朋友在直接沟通吗?
理论上是这样,但实际上你和对方并不是直接沟通的,而是把你说的内容给电话,电话通过相关的协议交给另一部电话,另一部电话把你说的话解码语音播报让对方听到。这就是一种分层。一个语言层,一个通信设备层必须搭配使用,不然相隔百里之外就不能进行交流。
软件在层状结构中,一旦分层的好处:
可以对任意一层左任意的修改并不影响其他层,从而达到一定解耦的过程。
就如下面的图片所示。