您的位置:首页 > 理论基础 > 计算机网络

网络协议的综合思考  及 网络体系: OSI vs TCP/IP

2017-08-04 02:18 507 查看
一、通俗地说一下网络协议的目的、主要组成内容
网络协议的作用  类似于  交通管理系统。

     一种交通管理系统的目的无非是两个:
1.提供基本能力:使人们能够把 物品(包括人在内)从一个 地点  运输到  另一个地点
2.提供优化能力:提升这种运输的效率
     它通过一些列交通规则、规范(红灯、单双号限行等),定义了车辆、行人如何协同有效地行进,来达到这一目的。如果规则定义地有问题,或者有人/载具 不遵守规则,就很可能发生交通事故。

     只要替换其中几个概念,就能说明网络协议的大体目的和作用:
1.它 把信息 从 一个网络 设备  发送到  另一个  网络设备
2.它 告诉所有的网络设备 应该遵守什么样的 协同规则,以便数据的传输过程能够高效进行
3.但它有一个重要方面,是它相对于交通系统,独有的。由于它运输的是信息,不是现实中的货物,这些信息在A设备发送之前需要按格式规则转换成一定格式,然后在到达B设备之后,再根据格式格则,解析出里面的信息。定义高效的格式规则(信息包格式),这在各类网络协议中常占据很大比重。

进一步可以归纳为,网络协议两大组成内容:
1.各种信息包(数据包、控制包等)的格式
2.传输过程中各种协同规则

交通规则有很多种,它们定义了各种不用场景下的规范,相类似的,网络协议也有很多种,针对各种不同的使用场景、使用层级。

抱歉,没有任何比喻,能够通过A事物100%地说明B事物的所有特点。
因为,宇宙间任何被我们定义为不同类别的东西,肯定有其不同之处,否则我们就把它们归为同一类东西了。
而比喻中的本体和喻体无论相似程度有多高,哪怕高达99%,也一定是不同的东西,否则我们干嘛用比喻呢?


二、网络体系:OSI vs TCP/IP

     先来说一大段自己的感思:
     人们习惯于把知识分割,分割成各个学科,学科内分割成各个方向,每个方向内分割成几个知识模块........甚至一个概念也会分割成几个子概念/层级。
     之所以分割,是因为这么做一般有好处,这一般可以降低思考的复杂度,便于人们一块一块儿的学习和理解;这便于分工合作,每个知识模块间低耦合高内聚,每个人分别有其特长的一块儿知识,然后通过分工合作来做事,最后能提高做事的效率。
     总之,之所以分割,是由人类的特点来决定的,每个人的时间和精力有限,一辈子一般只能熟练掌握一方面技能;人们习惯于一块一块地学习思考东西,由最小知识树开始,慢慢增长上面的知识,保持思考的复杂度不至于过高,超出一般人大脑的承受程度。
(其实,理论上讲,万事万物之间都有联系,每个学科、每个概念之间都有相关关联和影响,假如有万能的上帝,肯定是让他把一个问题涉及到的所有学科、所有概念,所有错综复杂的相互影响和干扰、所有细节都考虑到,这样才能得到最佳的解决方案。问题是,这样思考的复杂度一般太高,人类承受不了,而分解着来思考,一般不可避免地会因为没有充分利用其中很多概念间相互联系的最大价值,导致没有得到最好的解决方案。不过,能够分解着思考,得到一个不错的解决方案,似乎已经是人类目前的极限了,足以让相关人士欣喜若狂了,这已经是专家才能达到的成就了,即便如此成就我辈亦终生难以获取。)

     目前主流网络模型是:

1.OSI                           
ISO组织制定的,然而只存在于理论中,并没有被推广开。

各方面定义在理论上都很完善,但是相对于目前市场的需求而言,分这么多层显得有些复杂和冗余。(而且很多东西一旦形成历史传统,哪怕不够完善,也不会轻易被改掉,譬如现在的键盘布局,同样的,TCP/IP模型已经无处不在,又能满足目前需求,所以OSI很难取代它。历史惯性使然!)
既然没有被具体使用,我暂时没兴趣了解每一层的具体作用了,需要的时候,可以翻看自己本科时的网络教材。

2.TCP/IP
技术公司实际研发和推广的。

每一层的角色和作用,层级由低到高:
2.1网络接口实现层(这一层没有规范名称,我就这么叫吧)
     TCP/IP没有对该层进行详细描述,只是指出该层必须向网络层提供相关功能接口,以便网络层能够在该层数据帧基础上封装网络数据包和调用该层相应功能。

2.2网络层(我就这么叫顺嘴,咋了)
     它要求给每一台联网并在网络层工作的设备都分配一个IP地址,这个IP地址指出了设备在网络上的逻辑地址。它在整个模型中的角色就是,寻找从源设备到目的IP设备的高效逻辑通信路径,通过这些路径将信息送过去。

2.3传输层
     网络层已经能够使相关信息送到目的主机。而传输层通过在网络层数据包外面添加自己的头部,实现了对主机上具体进程的信息投放。要求为每个进行网络通信的进程都分配一个端口库号,这样[主机IP:端口号]就可以用来标示主机上对应的网络通信进程。
     同时,不同的实现协议提供不同的功能特性,如tcp协议的字节流稳定传输,或者udp协议的无连接不稳定传输。

2.4应用层
    目前个人的理解(???有待进一步查询资料,来确认!!!):
     这一层给应用程序开发者,提供了定制自己业务中具体通信协议的拓展能力。
     由于应用程序的使用场景,可以划分为几类,每一类场景都出现了很多对应的应用层协议,但经过长期的商业竞争和推广,最后几种协议成为了常用协议,用于对应场景下的网络通信程序代码编写。应用程序根据自己的使用场景来选择某一种应用层实现协议,编写自己的网络通信代码,例如web通信一般使用http协议,而文件传输一般使用ftp协议。 
     而且,每一种编程语言的sdk,对于常见的应用层协议,通常都已经封装出了成熟的对应程序包和api接口,供开发者方便的使用和编写相应代码。因此,最终对于开发者而言,不必太了解应用层协议细节,只要读懂相应api文档,就能进行对应的网络通信代码开发。
     
!!以上是每一层所扮演的角色,而它的实现有很多种协议可以选择,即有很多演员备选。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息