TCP/IP 系列文章
网络基础知识(-)
TCP/IP基础知识(二)
物理层(三)
数据链路层(四)
IP 协议(五)
IP 协议相关技术(六)
TCP与UDP(七)
前言
这将是一系列文章,这是笔者在读完 《图解TCP/IP》这本书后,写的一些总结。因为笔者认为好记性不如烂笔头,既然看完一本书,就有必要整理下。笔者本身是非科班出身,在计算机基础这方便稍稍有些差,所以最近一段时间在集中学习一些计算机基础相关的技术。当然这一系列文章也会对非专业开发岗位(如移动端)的工程师有所帮助,肯定比直接网上搜索来的全面。
这一系列文章不会很难,主要是想通过通熟易懂的语言,让广大读者更快的从原理上理解TCP/IP。而不是为了谋求一份工作,临时抱佛脚,在面试之前看一些简单的面试题。如果能从原理上理解网络基础,相信对开发者的未来成长也多多少少有所帮助。因为无论你从事任何 IT 相关行业,无论你掌握多少种计算机语言,但是有个永恒的道理,计算机基础基本上都是很稳定的。如果从原理上理解了计算机基础中的一些相关技术,无论学习何种计算机语言,都有利于加深你对这门计算机语言的理解程度。
协议和协议分层
协议
简单的说,协议就是计算机和计算机之间通过网络通信事先达成的一种约定。这种约定使不同厂商的设备、不同的 CPU 以及不同的操作系统之间,只要遵守相同的协议就能实现通信。反之协议不同,就不能实现相互通信。
再举个通俗易懂的例子,比如我们使用借助ProtolBuffer 把数据传送到另一台主机,规定数据的前两个自己包含的是 Code 状态码,之后是需要传输的数据,这就是一个简单的协议。因为这个简单协议的存在,接收方就能正确的解析出 code 状态码 和真实的数据,而不会出现 code 状态码当成需要的数据处理,需要的数据当成 code状态码来处理。
整个互联网世界能够运行,完全得益于各个软件、硬件厂商严格遵守现有的协议。以 IP 协议为例,你可以随便修改它,然后自己弄出一个 IP**** 协议,只不过没有人认可、遵守这个协议,所以它毫无用武之地。
协议的分层及其意义
OSI 参考模型中网络被分为七层。协议的分层就如同计算机软件中模块化开发。将网络划分为模块化,通过模块化实现网络通信,这样做的好处是即使系统中默写模块发生变化,也不会影响到其他模块。如下图是协议的分层。
OSI参考模型
OSI 模型中,网络被分为七层,由底层向高层依次是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
。如下图:
七层的各自功能一览表如下:
-
应用层
为用用程序提供服务并规定通信细节。如文件传输、电子邮件、远程登录协议。 -
表示层
将应用处理的信息转为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。如文字、声音、图像等数据格式。 -
会话层(结束此次货物运输交易)
负责建立、断开连接通信,以及数据分割等数据传输相关的管理。 -
传输层(运输到达交接)
主要起到传输作用。只在通信双方节点上进行处理,无需在路由器上处理。可靠传输,即确保数据可靠地传送到目标地址。 -
网络层(导航)
将数据传输到目标地址的过程中,目标地址可以是由多个路由器连接而成的某个地址。因此这一层主要负责地址管理和路由选择。 -
数据链路层(交通工具)
主要负责互联设备之间传送和识别数据帧。 -
物理层(道路)
负责0、1 比特流与电压的高低、光的闪灭之间的互换。
为了更好的理解 OSI 七层模型,完全可以通过交通运输来比喻最下面的 5 层模型。物理层可以看做是道路;数据链路层可以视为交通工具,由于货物一批货物比较多,可能需要多个交通工具去运输;网络层可以看做是导航仪,规划路径;传输层就是可靠的传输,运输到达货物交接;会话层就相当于货物到了,关于此次交易已经结束。另外两层表示层和应用层暂时没有想到比较好的比喻。
数据传输方式
网络数据的传输方式可以按照不同的分类方式分为多种,每种分类方式下又有不同的传输方式。这里主要讲解如下两种分类方式。
面向有连接型和面向无连接型
- 面向有连接型
在发送数据之前,需要在收发主机之间连接一条通信线路。如果对方不在线创建线路不成功,就无法发送数据,避免了无意义数据的发送;如果对方在线,创建通信线路成功,可以正常通信。 - 面向无连接型
面向无连接型不要求建立和断开连接。发送端可以自由发送数据,接收端永远不知道自己会在何时何地接收到数据,因此接收端需要时常确认自己是否收到了数据。
面向无连接型通信中,即使接收端不存在或无法接受数据,发送端也能将数据发送出去。
电路交换和分组交换
目前网络通信的方式大致分为两种:电路交换和分组交换。器拿着的历史相对救援,主要用于过去的电话网。分组交换正事TCP/IP 目前采用的技术。
- 电路交换
电路交换通信中,一条线路会被两台设备独占。如果再加入第三台通信设备就会出现问题。 - 分组交换
鉴于电路交换的缺点就出现了分组交换。分组交换将要发送的数据分成多个数据包,每个数据包的首部写入了发送端和接收端,然后按照一定的顺序排列之后发送出去。所以即使是一条线路也可以为多个用户提供服务。
分组交换中,有分组交换机(路由器)连接通信线路。过程:发送端将数据发给路由器,路由器接收到将数据后缓存到自己的缓存到自身相应的缓存队列中,然后路由器再从缓存队列中取数据按照顺序发送出去。因此分组交换也叫做储蓄交换。
地址
MAC 地址是录入到网卡 ROM 中的一串数字,长度为 48 比特,它在世界范围内唯一(不考虑虚拟机自定义 MAC 地址)。由于 MAC 地址的唯一性,它可以被用来区分不同的节点,一旦指定了 MAC 地址,就不可能出现不知道往哪个设备传输数据的情况。
网络构成
计算机网络中主机数量极其大,而且有的主机很远,如果要每个主机互相直接连接的话,不现实。所以通过交换网络互连主机,不同的主机分别跟交换网络相连。
计算机网络是有核心网(骨干网)和边缘网络组成。其中连接核心网(骨干网)和边缘网络的部分称为“接入层”或“汇聚层”。骨干网相当于高速公路,专注于如何提高业务传输性能和网络的生存性;边缘网络更专注于实际业务,常用设备多为 2 层交换机或 3 层交换机。