最近在看谢希仁老师编写的教材《计算机网络》,真心觉得这是一本好书;基本上把计算机各个方面都讲到了:计算机网络发展的背景、不同网络层次的作用、TCP/IP协议等等,很适合作为计算机网络入门的书籍;
本文主要想聊一下TCP/IP协议中的网络模型。
通过《计算机网络》这本书又复习了一下计算机网络,尤其是介绍TCP/IP网络体系相关知识点的时候,自己有种醍醐灌顶的感觉,拍了拍自己大腿,感觉好像是这么回事;
话不多说,我们来看看网络模型是怎么演进的吧。
网络模型的演进
OSI七层网络模型
说到计算机网络模型,不得不提一下国际标准化组织ISO所制定的OSI(Open System Interconnection Reference Model)开放系统互联基本参考模型;在这个模型中网络被划分为七层,如图:
可以看到在OSI网络模型中,每一层划分的很精细、功能很聚焦,这样有利于标准化的制定。因为每一层只要关注自己那块的功能就行,层与层之间只要按照协议进行数据交互就能跑起来。
理想是丰满的,现实是骨感的。OSI模型也败在它层次划分的太过学术、太过精细,具体实施起来会存在以下问题:
- 制定OSI网络模型的专家们偏学术,缺乏商业驱动能力;
- 协议实现太过复杂,运行效率低;
- 协议多导致协议制定周期长,导致按照OSI协议实现的设备从设计到进入市场的周期太长;
- 层次划分不太合理,有些层次的功能重叠了。
TCP/IP四层网络模型
不同于OSI网络模型,在TCP/IP网络模型中,网络被划分为四层:把OSI网络模型中功能重叠、或者相似网络层次进行了合并,如图。最终,体系结构更加简单的TCP/IP网络体系结构,经过了商业化的洗礼取代了OSI网络体系结构最终成为事实上的标准。
五层网络模型
不过在学习计算机网络时,将OSI网络模型与TCP/IP网络模型进行了合并,在TCP/IP网络模型中的网络接口层按照OSI网络模型划分为数据链路层和物理层。
五层网络模型介绍
网络诞生的目的是解决不同主机上的进程通信问题。
我们来看看五层网络模型是如何分工协作进行不同主机间的进程通信的吧。
假如主机A上的进程a(在应用层)想发送到主机B上的进程b:
- 物理层(建立物理连接,传输二进制流)。那么首先摆在面前的第一个问题就是主机A与主机B之间得有一条物理链路(有线、无线)进行数据传输,否则通信无从谈起;所以物理层的作用便是在主机之间搭建一条物理链路传输二进制流(即0与1,与协议无关)。
- 数据链路层(局域网,主机间通信)。物理链路联通以后主机之间就具备了数据传输的基础能力,但是物理链路上是无协议的,传输的是二进制流;二进制流意味着没有起始标识符,接收的主机不知道什么时候开始解析数据,也不知道什么时候终止数据的接收;于是在数据链路层上对发送的数据进行了封装:分装成帧(frame);这样主机在接收二进制流时就知道什么时候开始,什么时候结束;。
- 网络层(网络路由,主机间通信)。当物理层和数据链路层准备就绪以后,另外的问题出现了:计算机网络中存在大量的主机,那么主机A如何找到主机B呢?即网络路由寻址能力;在网络层最出名的协议莫过于IP协议(Internet Protocol)。在特定的网络下,每台主机都分配了一个唯一IP地址,配合路由器的IP路由寻址,主机A就能通过IP协议找到主机B了;也就意味着主机A与主机B之间具备了数据传输能力。
- 传输层(进程间通信)。主机之间具备传输功能之后,那么更近一步把数据发送到指定端口即可完成一次不同主机间的进程通信了;记住传输层并不是数据传输的地方,而是控制数据如何传输的地方:面向连接还是无连接,传输的拥塞控制等。
- 应用层(发送&接收数据)。主机B上的进程b只要监听特定的端口号,那么就能够收到主机A上的进程a发送过来的数据了。
参考资料:
- 《计算机网络》 谢希仁