码迷,mamicode.com
首页 > 其他好文 > 详细

网络管理笔记

时间:2018-03-22 22:32:34      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:链接   笔记   等于   3.2   显示   规则   blog   body   art   

笔记

最近学网络管理,其中第二章是关于抽象语法表示ASN.1的,里面有个基本编码规则,本人学习能力较差,对于某一掌握的知识点如果一段时间不看就会忘记。里面关于OID的编码规则的知识点上网查过了大部分的资料,但是有点难看懂,思考了好久才稍微有所理解,担心下次会忘记,所以记下一些自己的理解,如有错误还请指出。

??首先对于给定的一串OID,前面的两个部分x.y就合成一个部分,将前两部分合成的那一部分转换为16进制就是T-L-V中value值的第一个位置,剩下的数据分两个方向解决。

1、如果这个数据小于等于127,那就简单了,占用的是1个字节,直接转换为16进制并写下来。比如200,那就是C8.

2、如果这个数据超过了127,有点改变,我自己觉得难点在这里,网上的看的不是太明白,就用自己的笨方法来解决了,对于拿到的一个大数据,我是先把它写成A1*128^n+A2*128^n-1+...+An*128^1+k(k为常量,也可能为0),然后我们将前面的A1...An以及k拿出来组成{A1,A2,...,An,k},最后一步,将这些数用二进制表示后将除了最后一个数据外的数据最高位变成1后形成新的数据{B1,B2,...,Bn,k(此时k不为0)}{B1,B2,...,An,k(此时k已经为0,这里只是显示一下)}将最后修改的数据转换为16进制写上去就ok了。

OID的标识域都为06,长度域要先算出值域占了几个字节后才能写出。

??其实说了一大堆,有例题才是最实际的,下面写一个例题:

比如OID的数据为1.7.208.133.268743

N=1*40+7=47,那就是16进制的2F208=1*128+80,那么拿出来为{1,80},将它们二进制的最高位变为1(80的最高位不用,因为它是在最后的了)得到{129,80}对应的16进制为81 50,后面的133是小于127的直接转换为16进制,得到的值为85,最后的268743经过一系列的计算后,写成16*128^2+51*128+71,拿出来{16,51,71},同理将它们二进制的最高位变为1(71的最高位不用,因为它是在最后的了)得到{144,179,71}对应的16进制为90 B3 71.(将最高位变为1时相当于加上128)。现在值域都写出来了,长度占7个字节,为07,那么这个的BER编码为

T L V
06 07 2F 81 50 85 90 B3 71

网上参考的链接:

参考链接1
参考链接2

网络管理笔记

标签:链接   笔记   等于   3.2   显示   规则   blog   body   art   

原文地址:https://www.cnblogs.com/bbshenme/p/8626757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!