asn1是一种自组织自定义的数据结构,它是自洽的,几乎不需要外界的参与就能自己解释自己,这就做到了与机器无关,与应用无关,尽可能的与环境无关,这就是它最大的优势。那么到底什么是asn结构呢,简单说它就是一个嵌套的三元组,复杂得说它可以写一本厚书,甚至好几本。所以还是简单的理解它吧,以下用asn指代其最显然的编码形式--ber格式,因为本文基于ber格式介绍,并不涉及更多抽象语法方面的asn定义,asn的三元组就是{类型,长度,值},所谓的可嵌套值得是每个三元组中的“值”同时又可以表示为新的三元组,是否表示为新的更小的三元组以及它到底是什么要看它的“类型”是什么,所谓的嵌套仅限于“值”这个字段,那么“类型”和“长度”有什么说头呢?实际上它们很有说头,这里面有好几个问题需要解决,首先就是谁来规定“类型”和“长度”的类型和长度,如果说固定化它们那么可扩展性肯定不佳,如果说靠外界程序规定那么它们就依赖了外界而不再是自洽的了,因此就需要它们本身也是可以自我解释的,也许是歌德尔的不完备性在普遍的起作用吧,想让asn完全的自恰是不可能的,必须靠外界给予硬性规定,但是这种规定必须做到最小化和标准化,因此这最小化的规定由国际标准组织来规定,于是就有了ASN.1标准。
asn1以字节为基础,定义1个字节为“类型”和“长度”的元长度,首先考虑“类型”,从高位到低位的规定:8位和7位两位定义class,一共四种,第6位表示后面的“值”是基本类型还是复合类型,再后面的5位表示一个tag,如果我们把class想象成大的类型,那么tag就是该大类中的小类,但是如果5个字节不够了怎么办,实际上如果你第5位为1,那么就说明接下来的字节还是表示tag,直到最高位不为1为止结束tag;接下来就是“长度”了,一个字节仅能表示最多一个字节的长度,如果长度超过256怎么办?解决办法就是只要“长度”的最高位为1,那么此字节表示的就是“长度”的长度,这样就可以定义更长的长度了;接下来的“值”要么是一个确定的数字要么是上面三元组的重复。
上面描述的就是asn的最基本的理念,如果问asn最成功的地方在哪里,答案就是越复杂的协议用asn定义越方便,我们知道应用层协议是最复杂的,要比底层协议复杂的多,于是很多应用层协议都是用asn1定义的,典型的如H323,snmp,ssl(osi定义在表示层),用asn而不是类似ip等底层协议的方式是因为应用层协议充满了变数。它和分层协议模型相比有何不同以及有何优势,且待下回分解。
asn浅析--简单介绍
原创
©著作权归作者所有:来自51CTO博客作者dog250的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:asn浅析--协议的设计
下一篇:实现一个可以用web配置的防火墙
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
简单介绍一下我的备份脚本
备份对每个企业的IT工程师都是逃不脱的工作。与其逃避不如主动出击,一次搞定异地备份。
备份文件 源文件 备份脚本 -
AFM 网络介绍与源码浅析
AFM 网络介绍与源码浅析前言分享一篇上上个星期看过的论文, 记录下重点吧~Attentional Factoriza
机器学习 深度学习 AFM Attention tensorflow -
AutoInt 网络介绍与源码浅析
AutoInt 网络介绍与源码浅析前言 (与正文无关可以忽略~)好几个星期没有写博客了, 表层原因是最近这
python Attention CTR tensorflow 转义 -
NFM 网络介绍与源码浅析
NFM 网络介绍与源码浅析前言OK, 周末继续肝!!! 昨晚完成了 FNN 网络介绍与
深度学习 python tensorflow NFM CTR -
DeepMCP 网络介绍与源码浅析
DeepMCP 网络介绍与源码浅析前言 (与正文无关, 请忽略~)又有一段时间没写博客了, DIEN 写了一部分, 在
python 深度学习 机器学习 推荐系统 建模 -
FiBiNet 网络介绍与源码浅析
FiBiNet 网络介绍与源码浅析前言 (与主题无关, 可以忽略)我知道这有点不太厚道, 文章不写全就发出来, 但最近
tensorflow deepctr fibinet ctr paper -
git原理浅析及命令介绍
状态描述请记住,工作目录下面的所有文件都不外乎这两种状态:已件
git 原理 操作 git 暂存区 删除文件 -
FNN 网络介绍与源码浅析
FNN 网络介绍与源码浅析前言周五晚上分享 paper !!! 感动自己一把~ ???? 感觉本周看的 Paper 还挺多的
深度学习 python 机器学习 tensorflow FNN