博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络协议设计的一点思考
阅读量:5924 次
发布时间:2019-06-19

本文共 709 字,大约阅读时间需要 2 分钟。

分层协议一般都提供一种或几种固定的服务,这些服务中高层一些的大多数都是通过“握手”动作来协商的,另外一些比较底层的服务则是协议本身提供的,比如udp服务,ip服务等。下层的握手过程对上层不可见,握手其实就是协商一条带有一定功能(可以提供一定服务)的虚拟链路,握手完成之后,下层也就承诺了那种服务,之后服务的实现完全在本层完成。可是基于消息协议一般不这么做,没有握手之类的固定过程,因为基于消息的协议所完成的功能各不一致,因此也就难以抽象出共同点来完成固定的握手协商。

     对于分层协议来说,下层为上层提供服务,比如tcp的序列号机制就是为上层提供的数据包按序服务,上层协议可以完全信任tcp传过来的数据一定是按序的,再比如ssl为上层提供安全加密服务,最终的应用可以相信ssl提供上来的数据都是安全的,不管是按序服务还是安全服务,都是两端协商出来的结果,而协商的过程就是我们熟悉的握手过程。层间服务的控制数据大多数都在协议头当中。

     对于基于消息的平坦模型的协议,并不分层,没有谁能提供承诺的透明的服务,应用可以认为下面就是物理线路了,因此必须自己维护状态机,也就是说得到一条消息后根据消息体的内容来自行控制下一步的做法,注意不是协议头,而是消息体,基于消息的协议的协议头的重要性没有分层协议的协议头的重要性大。协议头几乎都是格式固定的,对于灵活多变的应用消息来说,固定化的控制并不可取,正确的做法应该是定义符合ASN.1标准的消息体,应用在解析消息的同时,见机行事,见什么消息做什么事,这样比较好。

 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271795

转载地址:http://rssvx.baihongyu.com/

你可能感兴趣的文章
Kafka消费的几种方式--low-level SimpleConsumer
查看>>
解决mysql数据库不能支持中文的问题
查看>>
VMware14虚拟机秘钥
查看>>
JVM -verbose参数详解
查看>>
CentOS LInux启动关闭和服务管理
查看>>
Eclipse中10个最有用的快捷键组合
查看>>
java与xml
查看>>
Redis Sentinel机制与用法(二)
查看>>
ls命令实际使用
查看>>
磁盘及磁盘阵列系统选择
查看>>
Javascript异步数据的同步处理方法
查看>>
9. Palindrome Number(回文数)(leetcode)
查看>>
MySQL之自定义函数实例讲解
查看>>
用.htaccess获取文件夹和文件名
查看>>
自我提升mysql
查看>>
步步为营之——建造者模式(Builder)
查看>>
快速排序——Java
查看>>
unity游戏与我
查看>>
187. Repeated DNA Sequences
查看>>
避免头文件重复包含
查看>>