认知 | 互联网体系结构

笔者最近在收拾书籍的时候,又翻到了之前读研的笔记,所以针对之前读研的笔记进行了对于互联网体系结构的认知。

认知 | 互联网体系结构

首先,笔者认为计算机网络体系结构就是计算机网络的各层及其协议的集合,比如说我们熟悉的ISO的OSI/RM(开放系统互连/参考模型)和IETF的TCP/IP,还有IBM的SNA(系统网络体系结构),DEC的DNA(分布式网络体系结构)。

我们知道,开发一个软件需要经历需求分析、概要设计、详细设计、编码、单元测试、集成测设、系统测试、运行维护这几个阶段。同样,开发一个协议同样需要经历一个分析、设计、描述、验证、实现、测试、维护的过程。

首先我们要了解一下协议设计十大原则:

协议设计十大原则

1. 在开始设计协议之前,确保已清楚、完整地了解了所要解决的问题,包括所有的设计标准、要求和限制等。

2. 在定义服务之前不要考虑用什么样的结构去实现这些服务,即在考虑如何做之前先考虑做什么。

3. 在设计模块的内部功能之前先设计模块的外部功能,即先考虑它与外部的接口。

4. 尽量用简单地方法来解决问题。奇巧的协议比简单的协议更容易出错、更难实现验证,通常还效率低。复杂的问题通常是由简单地问题构成的,设计者的任务是将复杂的问题划分成简单的问题,然后分而治之。

5. 不要将无关的功能混在一起。

6. 不要太多限制。一个好的设计应该是可扩展的,能解决一类问题而不是某一特殊问题。

7. 在实现一个设计之前,先建立原型,并进行验证。

8. 实现协议,并进行性能分析,如果有必要,进行性能优化。

9. 检查最后的实现是否与协议设计中的要求一致,即进行协议的一致性测试。

10. 不要跳过原则1到7,这一条也是最常被违反的一条规则。

计算机网络协议设计遵循着自顶向下的方法:

认知 | 互联网体系结构

那么笔者本文主要说一下分析阶段与设计阶段的流程。

分析与设计流程

01 协议分析

一、用户需求

在分析阶段,首先我们要知道考虑用户的需求,比如说是有连接的服务、无连接的服务还是永久连接的服务,是单播、广播还是组播,是同步方式还是异步方式,还要考虑到吞吐率、时延、抖动、差错率等服务质量(Qos)要求。

二、通道性质

在设计协议的时候我们还要考虑到底层的通道性质,比如说是独占、共享还是无连接的连接方式,通道中数据队列的平均队列长度、最大队列长度,是单工、半双工、全双工的工作方式。

三、工作模式

考虑是点对点或者是多点工作模式,主从模式或者是平等模式等等。

02 协议设计

在分析完后,我们就可以设计协议了,跟设计软件一样,在设计协议时,先要设计好协议的结构,然后再设计协议的内容。协议的结构可以从3个方面来考虑:分层、分阶段、分类。

一、分层

笔者觉得分层,可以使复杂协议的结构变得清晰,有利于协议的设计、验证、实现、测试。但划分子层后,由于增加了子层间的通信,协议效率会受到一点影响,因此当用户对协议的效率要求很高时,应尽可能避免划分子层。协议分层的例子如数据链路层协议,通常,数据链路层协议都再分成逻辑链路控制(LLC)和媒体访问控制(MAC)两个子层。ARPANET的研制经验表明,对于非常复杂的计算机网络协议,其结构应采用层次式的。

二、分阶段

协议分阶段是指协议分成多个运行阶段,每个阶段只需要部分协议功能在工作,原因是协议的运行过程具有明显的阶段性,比如说传输层协议分成三个阶段:建立连接阶段、数据传输阶段、释放连接阶段。协议分阶段同样有利于协议的设计、验证、实现和测试。

三、分类

协议分类是指当n层协议需要满足不同用户要求或需要适应不同的下层通道时,把n层协议分成不同的类别,每层协议只适用于一定用户和一定通道。协议分类可以起到简化协议的作用,比如说传输层的TCP、UDP、SCTP。

在完成了结构的设计之后,我们就要进行相应的机制设计,也就是设计实现协议功能的方法、策略、算法等。由于协议功能多种多样,不可能有统一的方法或算法来实现这些功能,因而协议机制的设计也就不可能有统一的方法,设计协议机制时,除了保证实现协议功能外,还应注意以下几点:运行效率、资源利用率、异常处理。

一、运行效率

有些协议需要实时性要求,比如说通信协议,如果协议机制运行效率低下,不能满足协议的实时性要求,也就难以实现协议的功能。

二、资源利用率

协议运行期间都会用到存储缓冲区,缓冲区大小的设计关系到协议的运行效率和吞吐量。

三、异常处理

相对来说,实现协议功能要比考虑异常情况容易得多。在协议运行期间,什么样的异常情况都可能出现,正确处理这些异常情况,才能保证协议的可靠运行。

层次间关系

01 物理层和数据链路层协议

物理层和数据链路层主要处理通信线路引起的传输错误,这类错误大多是随机偶然性错误,一般通过检测、重传的方式来纠正。考虑到物理层一般主要依靠硬件实现,重传纠错比较困难,所以原则上把差错恢复的任务交给数据链路层来解决。在数据链路层通常以帧为单位构造CRC检验和,接收方发现CRC检验有错时,发送确认信息或丢弃出错帧导致发方超时使其重传出错的帧。同时,通过帧序号来发现因重传导致的帧重复,通过以上的差错控制后,数据链路层向上层(一般是网络层)提供的无差错的数据传输服务(按序、无丢失、不重复)。

02 网络层

网络层的主要任务是提供路由选择和网络互连功能。对于路由转发过程中由于拥塞、缓存溢出、死锁、老化以及非法格式等引起的报文丢失、失序等差错,网络层一般只做差错检测而不作纠错处理,只是把不能接收或过期非法的分组简单丢弃或向发送方报告。纠错则放在运输层进行处理。但是,如果网络层提供虚电路服务,由于虚电路服务保证报文无差错、不丢失、不重复且按序地进行交付,因此网络层就需要实现纠错功能。

03 运输层

运输层向应用进程提供的端到端的无差错的数据传输服务。如果通信子网(只包括网络层、数据链路层和物理层)所提供的服务越多,运输层协议就可以做得越简单。例如,网络层提供虚电路服务时,运输层协议就很简单。但是,即使网络层提供的是虚电路服务,某些用户仍可能怀疑下面的网络是否100%可靠,因而在网络层上面加上用户自己的端到端差错控制和流量控制。运输层通常需要解决的差错包括:丢失、重复、失序,采取的差错控制措施包括:序号、确认、超时、重传等。

04 应用层

通过数据链路层、网络层及运输层的上述检测纠错措施后,一般地说,运输层逻辑链路提供给应用层端用户的服务将是一条无差错的可靠的数据传输通道。应用层一般可不考虑传输上的错误,但应用层仍然有它自己的差错控制问题。这主要是协议类型不一致、文本或文件系统属性的不匹配、消息包格式错误、程序设计同步关系错误以及程序执行中的错误等。差错控制的基本思想与前面讨论是相似的。

结 语

其实,纵观计算机网络的发展,特别是协议的生成过程,我们可以看到它就是用户需求的结果,所以用软件设计的思想,完全可以设计协议。以上是读研是笔者的认知,还望各位指教。

业界动态

以产品经理的金科玉律,设计伟大的产品

2019-12-6 12:43:05

业界动态

设计师需要了解的用户体验通用原则

2019-12-6 12:57:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索