zoukankan      html  css  js  c++  java
  • 【大话存储】学习笔记(13章),协议融合

    协议融合

    TCP/IP满足了Internet范围的网络通信,FC满足了后端存储的专用高速公路,而SCSI不适合Internet的通信。这就如同火车或者汽车,同样是运输货物,但是它们都适应了不同的需要。

    对于SCSI而言,如果要跨越大范围的通信,就要将其承载到TCP/IP上,形成了ISCSI协议。TCP不用关心SCSI协议的什么,只需要封装和传输。

    同样的道理,以太网是面向无连接的,没有握手过程,也没有终端认证机制,没有NCP(PPP用来协商上层参数的),而PPP却有,所以PPP适合ISP对接入终端进行认证。但是PPP不如以太网广泛,所以可以融合成为PPPoE

    网络通信协议的四级结构

    网络通信协议一般可以分为:Payload 层、信息表示层、交互逻辑层、寻址层
    其中最重要的是交互逻辑层

    Payload层

    payload指的是与本协议逻辑无关的最终数据,它可以是最终应用的数据,也可以是另一种协议的信息表示层+Payload

    协议A封装了协议B的 “信息表示层+Payload数据”,可以说协议A封装了协议B,或者A承载了B,或者说B is over A( BoA )

    AmB则是一种彻底的协议转换,而不是仅仅做隧道封装,描述一种协议被Map到另一种协议。

    信息表示层

    信息表示层是附加到Payload数据之外的一段数据,是协议开销。就如同在信封上的姓名一样

    比如运行在通信双方的通信协议用来交互各自的状态,比如信封上的姓名等。

    交互逻辑层

    交互逻辑层其实就是运行在通信双方协议系统上的动作程序代码逻辑,它根据对方传送来的信息表示层数据作出动作。返回自己的信息表示层。

    交互逻辑层是协议的设计思想,是协议的灵魂。

    寻址层

    寻址层顾名思义是找到目标的一套编址和寻址机制。不同协议的寻址层可以互相映射翻译。

    总结一下,

    • Payload和信息表示层就是报文要承载的部分,
    • 交互逻辑是协议的规范,规定了协议如何进行交互。
    • 寻址层是协议的编址方式,用于区分不同的节点。

    协议融合的三种方式

    协议与协议相互作用有三种方式:

    • 调用:一种协议完全利用另一种协议

    • 隧道封装(Tunnel):一种协议将另一种协议完整打包

    • 映射(Map):一种协议对另一种协议进行翻译,只将原来协议的Payload层数据提取,重新打包到新的协议数据包中。这种方式最彻底

    下面将就这几种方式进行一一讲解。

    调用

    因为协议自身没有某些功能,所以需要调用其他协议的某些功能。

    比如

    • TCP需要调用IP,因为TCP没有寻址的功能。IP调用以太网,因为IP没有链路传输的功能。

    • IP调用PPP:就是上层协议为了达到通信目的,使用另一种协议来服务。

    隧道

    将一种协议的完整数据包(包括Payload和协议开销)作为另一种协议的Payload进行封装。

    也就是说协议转换的设备只是将数据包通通打包即可,不需要关心内层协议是什么。此时需要与上面的调用进行区别,如果一种协议在某方面的功能,另一协议没有实现,就是调用。比如IPoE,IP没有链路层功能,所以是IP协议调用底层的以太网协议。不过值得注意的是IP与以太网之间的编址逻辑是映射而不是使用关系,因为我们是把IP地址映射到MAC地址上的。

    Tunnel主要用于内层协议和外层协议都在某方面有相似的功能,但是在某些条件下,外层协议更优秀的情况下。比如用船来装火车箱,这样就可以在水路上走了。或者说还可以用于伪装内层存协议。

    ISCSI 和PPPoE是典型的Tunnel。何以见得,在ISCSI中,TCP/IP可以实现寻址和传输保障,而SCSI协议也可实现寻址和传输保障。他们都可以实现同样的功能,但是在两种协议融合以后,SCSI协议的寻址传输保障功能就不用了,完全只使用TCP/IP的。

    上面还说过Tunnel另一个作用是伪装,也就是两种协议实现的功能、适用 的环境都相同,但是我们还是可以通过隧道进行伪装,这样对外就可以屏蔽内部细节。比如IP协议中的GRE(通用路由封装)

    那么这种伪装有什么作用呢?它将IP协议承载到IP协议本身上面,因为多封装了一层,可以使得一些不能在公网路由的IP包,封装到可以在公网进行路由的IP包里面。

    这又有什么用呢?比如总部和分支不在一个地方,所以中间可能会跨越Internet网络,但是我们又希望总部和分支在一个内网下。此时有两种方案:

    • 使用专线,也就是向运营商租用专用网络,好处是稳定,缺点是太贵。
    • 直接使用Internet网络。但是我们知道,Internet网络的IP地址和企业内部的IP地址完全不同。那么此时Tunnel就有用了,可以在内网报文外面再封装一层,这样两端就像在一个内网里面一样,经过Internet的时候,使用公网地址封装内网的IP包,还可以对IP包进行加密、反修改等,这就形成了IPSec

    下面举一个例子来说明Tunnel的过程,同样以寄信为例

    • 寄信人将信件(Payload)装入信封(表示层数据)

    • 填好收信人的地址、邮编等(通信协议的信息表示层、寻址层)

    • 交给邮局(网络交换路由设备)

    • 物流业借助水陆空等“链路层”。建立了自己的流程体系(协议交互逻辑)

    • 用户可把信件封装到邮政普通的信封直接发,也可以封装到快递公司的信封发送,

    • 把邮政协议Tunnel到快递公司的可以获得快速、优质的服务。

    若A快递公司在北京没有送货机构,但是青岛需要向北京送货?

    可以让有送货机构的B快递公司代送,到目的地以后B的送货员剥开了信封,用户收到了快递A的信封,以为是A送过来的,这就是伪装。

    映射关系

    Map比Tunnel更复杂,更融合。

    Map就是将一种协议逻辑翻译成另一种协议逻辑,Payload数据完全不变。

    内层的Payload层在Map里面不会改动,因为只有两端的通信应用程序才能理解。

    比如A将青岛地区的送货外包给B,但是表面上必须保持A的原样。

    起初:客户信件放入A信封,再封装成B,这就是Tunnel。

    现在:

    • 让B的取件人了解寄件人提供的信息,取代了A公司的角色,用户按照A公司的协议将信封头信息告诉取件人。

    • 取件人直接将信件装入了B的信封,但是将A的信封头转换为了B的信封头。

    • B转发以后,送货员将B的信封头转换为A的信封头。

    不过两端的用户感受不到,因为中间是有B完成的。

    Map方式最大的好处在于开销变小。

    比如IP地址必须要映射到MAC地址才能享受以太网服务
    image.png

  • 相关阅读:
    Entity Framework 学习 Code First(1)
    CLR via C# 读书笔记 运行时序列化
    Entity Framework 学习 Model First
    轻量级开发工具 SharpDevelop
    bit加载失败
    [Reminder] 影响EMIF16异步读写性能因素
    Field Alert: Initial Voltage Level Setting of CVDD rail power supplies
    PHP函数Imap电子邮件系统函数
    PHP函数PHP选项及相关信息函数
    PHP函数Soap函数
  • 原文地址:https://www.cnblogs.com/dy2903/p/8426597.html
Copyright © 2011-2022 走看看