台湾清华大学物联网--003 物联网传感器与传感网络设计

编译成功,就可以下载到arduino开发板上。

100,是噪声门限,低于100,认为是noise,不是knock

所有的node都愿意转送封包。

node的移动速度不能太快/中低速。

所有的node都可以随时监听网络上的信号,不能进入休眠状态

有链接,表示可以监听到对方。没有链接,表示不可以监听到对方。

从S送到D,并不一定每一次传送都走相同的路,是dynamic的。

 

Route Discovery: 从source到destination到底有哪些路径。

Route Maintence:这些路径并不是一致稳定不变的,如何维护这些路径的变化?

Root cache:可以减小找路径的cost,中间过程中就在不断的记录变化

到底是谁完成路径寻找的任务?

Source送出 request packet,包含target/initiator/route record(目前已经找到的路径),request ID

每个node都会maintain一个从source来的request id。 一个node可能会受到两次以上的请求,透过request id可以识别从相同的source收到的request是否之前已经收到过?如果是,则将重复接收的request丢弃。

如果没有重复,则代表可能是第一次收到。如果W是target(destination),就代表request已经送到目的地,就return一个route reply。如果该node不是destination,只是中间的路径,而且它有有一条到达target的路径,就会将自己cache中记录的到达target的路径回送给initiator/source。

如果自己不是destination,也没有记录到达target的路径,他就必须将request转送出去。转送时,会加入自己的IP。

一开始,S会送一个广播封包

B/C/E收到S的封包,就会帮忙做转送。广播。 B送出来的封包会记录【S,B】,C送出来的封包会记录【S,C】,E

送出来的封包会记录【S,E】,会将自己的id/address加入转送的封包。

对于H,会同时收到B/C送来的封包,可能会发生collision,导致H无法收到B/C送来的封包。也许需要下次转送封包才可以收到。

A/H/G/F继续广播,每一次广播都将自己的id/地址加进去。

从S到D有【SEFJ】和【SCGK】两条路径,D会选择其中一条路径返回。

 

 

Source经过一连串的广播,从source广播到destination,destination如何将找到的路径回复给source?

 Destination will reply the 1st route it received.

reply frame: reversing the route in the route request

J-D 之间会透过hello packet周期性的维护一个link状况。如果J发现与D之间的link断开,就会发送一个route error的packet,沿着原来的路径送到souorce。

收到这个packet的node,都会移除各自透过J到达D的路径。

优点:平时不需要做route maintenannce,只要需要的时候采取寻找。而非源路由的协议,平时也会不停的维护routing table,overhead比较大。

每个node的route cache,可以减少route discover 的cost。

一个single route discovery(广播)可以得到好几个route(destination收到request后,会回第一个路径,也会回送后面收到的其它路径),也有可能是中间node回送的到达destination的路径。

实际上,链接不一定是对称的。A/B不一定要求相互听到对方。只要能绕路,实现A到达B,B到达A,这个协议就可以工作。

缺点:

Source routing:将这个路径塞到封包里面,路径越长,封包越大,对于频宽利用来说,不是很有效率。

Route request封包,因为是广播,可能会通知到所有的node,可能会造成所有node的request flooding。浪费频宽

request封包快到达目的地时,可能会有两个或三个request同时发送给同一个target,造成collision,付出太多,导致target node什么都没有收到。

每一个node都需要听封包,转发封包,不可以处于休眠状态,导致不够节能。

如果有太多的route reply,反而会造成route reply风暴,浪费频宽。 因为source只需要一个reply即可。

每个node维护自己的单调递增的sequence number。node只要发现跟邻居的链接变化,就会用不同的sequence number通知邻居

只会记录两个路径:multi-cast/uni-cast

有效期内,路径用过(有送过封包),就更新life-time

经过哪些node,那些node也会帮忙维护这个路径

 

request, from哪个ip,哪个id用来标识唯一性。

找路径的封包:control packet

sequence number:防止重复

如果到达D,D就不会继续广播

彼此之间有连线(edge):代表彼此可以听到对方,如果没有edge,表示不能听到对方。

第一步:从S开始flooding,发给BCE, route request 封包

第二步:以BCE为中心,向四方广播。 对于H,可能同时收到B/C发来的广播封包,当B/C同时发给H时,则会造成冲突,H接收失败,如果H接收失败,则H就不会继续向I广播。

A/H/I/G/F继续 广播

对于C,可能会同时收到H的广播,G的广播,因为有sequence number,就会识别出该封包之前已经处理过,就会丢弃,不做处理,即不会继续广播。

I/J/K广播。 J/K广播到D,可能会造成D接收时发生collision,当发生collision时,则该轮寻找路径失败。

如果没有发生collision,则先到达D的封包,D收到以后就不会继续转发,即D不会收到。 而对于J转给M的封包,M会继续向L广播。

如果D收到封包,无论是从SEFJD,还是SCGKD, Flooding 都会结束。

不可达的节点 Y/Z 不会收到request 封包。

即使N可以到,因为N是D的下级,N也不会收到请求封包。

Flooding 可能会发送过多的封包,会造成部分频宽浪费。如SEFJML这个路径的flooding就是浪费

很多协议会做control packet flooding,而不是做data packet flooding。

control packet 为了找路径而做flooding

后面的data会沿着找到的路径传送,不需要再次flooding

control packet flooding:到底值得不值得?取决于后面的data传输的多不多,是否足够去cover control packet flooding的开销

一旦中间的node收到request,它会建立一个reverse route entry(因为路径找到后,会沿着原来找到的路径返回去,一直到souce node)。

包括 source IP,source seq number(区分新旧路径),number of hops to source node, ip address of node from which REQ was received(到底从哪个ip的node收到这个request),即往回传时,到底从谁开始送。

利用reverse route,可以回应一个route reply packet给source,但这是有条件的。reverse route entry是有时效性的。如果在TTL到期之前,该路径还没有被回应,则该路径会被清掉。

一个node要回RouteRequest需要满足两个条件:1.已经有一条路可以到达destination,则将该路径回给source,代表提早找到一条路径。2.这条路径也不能太旧(够新),sequence number要等于request上面带的sequence number。旧的路径不要。如果符合这两个条件,就透过unicast RREP(response)给source。response 的path为reverse path

如果上述两个条件没有满足,(没找到destination在哪里,或不知道destination在哪里)则node回继续广播,并将hop count增加1. 最后request经过不断的传送,到达destinaiton。

假设有5个node,S是source,D是destination。

1. node S要找一条路径到达D,会产生一个Route Request封包,会记录destinaiton IP,sequence number(前一次收到的sequence number),source IP, sequence number(destination sequence number),hotcount(刚送出来,hotcount=0). Node S broadcst RREQ to neighbors

当A收到封包后,会建立Reverse route entry for S,dest=S,nexthop=S,hopcount=1. A并没有到达D的路径,因此A继续重新广播Route Request封包。

当C收到封包后,会建立Reverse route entry for S,dest=S,nexthop=A,hopcount=2. C并没有到达D的路径。 如果C

有到达D的路径,而且sequence number刚好大于Request封包上面的D的seqneuce number,C就可以回送reply封包给Source。

如果C没有到达D的路径,或者是该路径的Sequence nunber小于 RREQ封包上面D的sequence number,C就会继续重新广播Route Request封包。 

forward path:destination IP,这个封包收到的地址是透过哪个IP送进来的,hopcount to destination,life time

建立好路径,到期还未被使用,就会被删除。

建立好forward path后,reply封包会继续向source端发送。

sensor network环境,node是移动的,更新的路径更有意义。

每个node都有自己的foward entry,到达D,下一跳是谁, 这样,每一级传送都可以找到正确的路径传送。

node之间有link,代表彼此可以听到对方。

S送广播,给周边的neighbor BCE

 BCE收到广播后,各自都会建立自己的Reverse Path,然后BCE继续广播Route Request封包

Reply封包回送时,途径的所有node就会建立自己的foward path,这样data就可以透过forward path一路传送

收到request,建立reverse。 收到reply,建立forward

假设有一个node X,它会考虑到它的neighbor。 假设它的neighbor active,则会设定一个timer,在timer timeout之前,它们正常送过封包。

如果source node本身移动,原来的路径就可能会断开,需要重新找路径

如果是中间node/destinaiton node移动,routing table需要更新。 所有active neighbor 都会被通知到该route error的信息。

Route ERR message是由该断裂link 的上游(靠近source)node来发出。而不是远离source

送给所有受到影响的destination。

ERR message里面会包含所有受影响的node,所有经过这些node的link,路径就需要重新计算。

路径失效时,将hop count 设为inf。

A会检查,如果自己到D,路径需要经过C,则删除该条路径。将距离设为inf

S会check,自己到达D的下一跳需要经过A

A透过ERROR message告诉经A到达D的路径error,于是S删除该路径。可能要重启route discover的过程。 如果该阶段data传送已经结束,不需要继续传送data到D,则不会启动toute discovery, 路径是有需要才会去建立。

Node X回送Error message时,会将到达D的sequence number增加(增加到N)。目的是代表更新的路径。

当S收到Route ERR,建立新的路径时,则需要建立一个比N更大的sequence number

当D收到request时,会对比sequence number,sequence number大者优先。 确保一直用最新的路径资讯

Hello message:有点像heart beat information

IEEE802.11,送封包给对方,一定要在TTL之前回ACK,超时未收到,则认为已经断开,或未收到。

两种不同的监测node状态的方式。 Hello Message/MAC level ACK

假设:A有一条路径到达D。 假设Route Error message丢失,A就不知道C-D断开。 

C重新发route discover到达D,则request回发给C/E。 E回转发给A,A会发送一条ABCE这一条路径信息给C。 这样就会形成loop

当使用sequence number时,C发出的request应该具有更新的sequence number(相比较旧的ABCD这一条路径),A收到request时,对比sequence number,发现ABC这条老路的sequence number比较小,就不会继续回送ABC这一条路径.

AODV 的route并不需要包含在packet header中(DSR:dynamic source routing的封包里面会带整个路径上的每一个节点的IP)。header越长,传输效率越低

node只维护active use(正在使用)的路径,TTL到达,则路径会被删除。因为网络是移动的,没有用到的路径维护也没有多大意义(传统的路由协议,如OSPF,会建立自己到所有node的routing table,不管有没有在用)

每个node中只要维护到达某一目的路径的next hop即可,而不需要维护整个路径(对于DSR,可能会维护到达某一目的地的多条路径)。

即使路径(拓扑)本身没有改变,当超时未用,路径则会被删除

Sequence number避免loop

Route discover cycle: request 建立reverse path,reply时建立forward path

传统的AODV/RPL适用于AD hoc网络

在sensor network中做routing,更复杂。

Lower power & lossy environments

Traffic pattern包括point-to-point,point-to-multipoint,multipoint-to-point

node的信息,一路透过Border Router传给远端的PC/Host。 相反,透过Border Router给这些sendor node控制指令

Directed Acylic :有向的无环的

 上图中,绿色的节点就是root,DAG图中,可也有多个root(destination)。

如果这个DAG只有一个root,就是Dodag,这个root就相当于是gateway。 所有的路径都是指向root

Many-to-one:multiple nodes to root, such as collecting all sensor thermal data.

One to many: root send control commands to muliple nodes

point-to-point:可能需要透过root,先upwards,然后downwards,透过大圈达到point-to-point的通信。

只要将ranking 定义好,路径就已经被定义

中间的node可以向左/右走,到达root,选择左边右边无所谓,只要是向上送(高rank到达低rank),这个向上送就合法。

这三个control message用于构建DAG的拓扑

DIO:收集网络上的不同的RPL instance,给他们不同的id,了解它的配置参数,选择DOAG parents(构建拓扑)

DIS:can inform DODAG information object to sendback their informaiton'

DAO: send message through DODAG route to root.

 DIO message: RPL instance current status, send to link-local(neighbor) periodically

Node collect DIOs, and decide join which DODAG, or update it`s version(keep curent dodag)

Node can solicit a DIO according to it`s DIS message

upward: from bigger rank to lower rank, no loop

downward: from lower rank to bigger rank, no loop

Assume all nodes(from 1-46) are sensor nodes,

with link means they can hear eachother.

their is a number(the number with grey sequare background), means link quality,biiger digits means higher quality.

no number(the number with grey sequare background) means the quality level is 1.

each node have a route to root. optimized algorthm is to find highest link quality for each node to build the DODAG

COAP: 一个高阶(应用层)的协议,可以实现机器之间通信。 类似于Restful里面的http set/get,直接去node中获取想要的data 。 web transfer。 从物联网中获取数据更简单

资源有限的node

网络有限制:速度不快,网络环境不佳,容易掉包

CON:送资料给对方,必须回ACK或reset

NON:送资料给对方,不需要回复

ACK:表示CON收到了,回ACK同时,携带data

RST:表示CON收到了,data还没有准备好,等一下再回data

tourhg CON, submit a request, to get. through ACK, carried data to response the request.

response code:比如404. 类似于http

哪个scheme,user information,host,port,path,query,fragment

 

猜你喜欢

转载自blog.csdn.net/f2157120/article/details/81037691