`学习`分类下的文章

学习

G3-PLC 学习历程

Context

好像很久很久没有更新博客了,最近事情确实太多了。新产品的app,教研室新项目,两个大头。还有毕业设计的开题,虽然我想好了题目,但是,磨人的开题报告,也是个很头疼的东西。

这次教研室的项目是电力线通信,使用G3-PLC协议,这也是第一次做一个偏硬件的项目了,一开始老师在问大家有没有兴趣的时候,还是蛮犹豫的,但是还是因为兴趣,决定搞一下试试。

花了几周的时间好好的熟悉了一下这个协议。在电力线通信的场景中,会有很多意想不到的情况。比如A->B是直连的,B->A就不能直连,需要绕一条路走。而且电力线网络的拓扑结构是会随时随刻在改变的,这一时刻你和他直连,下一时刻他就不见了。

对于这种物理层这么不可靠的连接,需要在它的基础上构建一个相对可靠的网络,还是比较麻烦的。G3-PLC借鉴了ZigBee的技术,并且引入了6LowPan技术,使得这个网络的可靠通信成为可能。

ZigBee?

ZigBee不是无线的嘛?

这电力线是有线连接的,竟然还需要用无线的协议。其实他们还是挺像的,ZigBee每个节点的发射功率有限,为了与不在射程范围内的节点进行通信,就只能通过其他节点来帮助它传递消息。电力线虽然说大家都是有线连接在一根主线(总线)(插线板)上,但是他的衰减比较严重,那么中间节点就需要充当一下”中继”,将收到的消息进行转发,以实现全网的通信。

6LowPan?

这个概念倒是很有意思,大家都知道ipv4的地址就要分配完了,所以赶紧推广ipv6是非常重要的,而物联网时代,网络节点的数量会比互联网时代大的更多,毕竟每个物联网外设都很便宜,他们要入网也需要一个地址来标识。大概是出于这一点的考虑,G3-PLC在设计的时候就引入了6LowPan,是一种有超大地址空间的一个协议。这个名字很奇特6LowPan,他的意思就是低功耗的,ipv6的,个域网。

为了低功耗,它甚至省去了很多数据,通过减少数据量来降低功耗,真是很拼。

Router

网络通信,最重要的一个部分,莫过于路由了。

G3-PLC的适配层用了LAODng协议,这个东西的资料比较的少。不过另一个东西的资料我在图书馆里找到了很多——AODV,是Ad Hoc网络中的按需询问的路由协议。LAODng是,新一代轻量级按需路由协议。

怎么个轻量级,我现在还真是说不准,按照我自己的猜想,这个轻量级只是减少了一些操作,少维护一些内容,数据发送频率低一些。

比如说,在刚加入网络的时候,AODV协议里需要节点对整个网络进行一下”摸索”,比如发送RREQ询问一下距离本节点x跳的各位节点,维护一张路由表。中间节点也会根据这个RREQ请求,自己建立一张表,在未来出现链路中断现象的时候可以发送RERR信息告诉上游节点,路线断了。

不过,按照我的理解,以及我对官方给的非常简略的协议的理解,以及我对借的各种书的理解,我觉得这个低功耗大概是第一次获取路由的时候只获取一跳的节点、出现断路不通知、之类的操作。通过这一系列的优化来达到轻量级低功耗的目的。

Oops…

其实在理解这个协议的时候还是走了不少弯路的,比如我一直无法理解自己的地址是怎么来的,直到我明白了这个系统有coordinator和device两种设备。我一直不知道我怎么获取别人的地址,知道我想明白,这个地址不用我们获取,而是上层指使就好了。

这个项目从最早的无从下手,到现在感觉有把握了。我觉得自己还是学到了不少新东西,说明自己还没有老。作为一个学生还是要有这种学习能力的嘛~

下面大概要好好研究一下Keil和嵌入式开发了!

阅读剩下更多

学习

缓冲区为啥不溢出

软件安全性分析课,里面花了很多时间讲缓冲区溢出的故事.

大一为了加入凝聚工作室,我也是查过相关的资料,也做过类似的实验,但都是瞎搞.

在老师给出例子之前,我一直把失败归结于自己的代码有问题,或者攻击方式有问题.

在看了老师的例子之后,我觉得我好像没写错什么…

Run directly

现在内核牛逼了呢!

检查到了pc指向非法地址,就直接被内核终止了,所以,我也没办法

Debug with GDB

GDB真是个牛逼的东西,可以反编译,可以打断点,可以查看堆栈地址数据……

只要我在执行非法内存之前加个断点,看看栈数据是不是变得乱七八糟了,我的实验目的就达到了.

根据老师说的

char c[20];
char a;

这玩意儿运行的时候,在栈上面的顺序是ca

所以只要用不安全的函数,冲破c的长度,就可以覆盖a的数据.

然而gdb断点的时候,我惊奇的发现顺序是ac…

于是乎我就换了个代码

char a;
char c[20];
char b;

发现,栈里面是abc…

这,这你让我怎么溢出??

还要再研究研究…不论我是否使用优化编译,结果都是这样的…

等我找到答案,再来更新这一篇!

阅读剩下更多

学习

啥都不懂…

这学期好像做了个死,选了一堆学不会的课~

什么机器学习啊(全是数学,全是概率,已弃疗)

什么Linux内核啊(除了学会了装内核,使用gdb,和装逼,别的都没听懂)

什么软件安全性分析啊(我自己实验永远做不出老师的效果)

安全通信啊(这个我还听得懂……)

报名了华为软件挑战赛(也弃疗了)

为了要听懂Linux内核的课和一部分软件安全性分析的课,我借了买了一些计算机组成原理,编译原理,Binary Hack的书.

好像也没咋看懂~

然后要做推荐算法,就看数据挖掘,好像还是没咋看懂~

所以我承认我笨了…

阅读剩下更多

返回顶部