Các kĩ thuật của giao thức lập trình

23 279 0
Các kĩ thuật của giao thức lập trình

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Techniques for Protocol Programming 2013 Nhóm Final : Techniques for Protocol Programming (Các kĩ thuật giao thức lập trình) Mạng cảm biến không dây thường dùng ứng dụng đo đạc, phát hiện, dự báo : đo nhiệt độ, đo độ ẩm, cảm nhận độ rung … Hầu hết nút cảm biến thường dùng sở liệu phát kiện tự nhiên, truyền thông đóng vai trò quan trọng việc xác định thời gian sống nút cảm biến, tốc độ định tuyến chất liệu truyền mạng Do mà cần quan tâm tới tính năng, giao thức sử dụng lớp phân rã IP , lớp MAC S-MAC giao thức điều khiển truy nhập trung bình mạng cảm biến, phát triển từ mạng 802.11 truyền thống có ưu điểm giảm lượng tiêu thụ khả tự cấu hình cho mạng Trong phát triển người ta xác định nguồn tiêu tốn lượng cải thiện nhằm khắc phục Hai ba nguồn tiêu thụ lượng đề cấp đến đây: - Cộng tuyến : hay nhiều nút gửi gói tin nút trung tâm, va chạm xảy làm sai hỏng gói tin Vì phải tiêu tốn - lượng vô ích để truyền lại gói tin bị hỏng Nghe lỏm : trường hợp nút nghe nhiều gói tin không dùng cho phải tiêu tốn lượng Với việc sử dụng giao thức S-MAC nút trạng thái ngủ theo lịch trình giảm I lượng nghe lỏm THE MEDIATION DEVICE PROTOCOL( thiết bị trung gian) Techniques for Protocol Programming 2013 Bây ta xem xét giao thức tiếng thiết bị hòa giải trung gian, giao thức nút A muốn truyền tải gói tin tới nút B Nút A thông báo cho thiết bị trung gian biết định kì gửi gói tin RTS (request-to-send), thiết bị trung gian bắt gói tin Nút A gửi gói RTS thay cảnh báo truy vấn Nút A sau chế độ nhận (lắng nghe ) Các thiết bị trung gian phải chờ nút B truy vấn gửi lại gói tin trả lời truy vấn nó, cho biết địa nút A khoảng thời gian bù đắp cho thời gian truyền Nút B bít B nghe lần gửi CTS tới nút A (Bây giờ, nút B biết thời gian nút A, biết thời điểm t nút A chế độ truyền xảy lần nữa.) Nút B đợi t’ để nhận dử liệu từ nút A Tại t” nút B gửi gói tin báo xác nhận (nút B biết t” với nút A có chu kỳ ) Sau nút A nút B truyền xong lại lặp lại trình phát tín II hiệu truy vấn Nút B khôi phục lại chu kì định kì tách biệt với chu kì nút A CONTENTION-BASED PROTOCOLS Giao thức contention-based đề cập đến lớp giao thức truyền thông, số quy tắc việc thu, phát sóng đề xuất cho nút cảm biến mạng bắt buộc phải tuân thủ Carrier Sense Multiple Access Protocol (CSMA): Trước có thông tin truyền đi, nút truyền phải xác nhận không hoạt động truyền đồng thời hay chia thông tin diễn Techniques for Protocol Programming 2013 III PROGRAMMING WITH LINK-LAYER PROTOCOLS( lập trình với giao thức link-layer) : Trong phần xem xét thách thức đặt việc lập trình lớp liên kết liệu, sử dụng kĩ thuật ARQ (automatic repeat request – tự động lặp lại yêu cầu) Giao thức cố gắng gửi lại gói tin có độ tin cậy cách sử dụng báo nhận gửi lại IV AUTOMATIC REPEAT REQUEST (ARQ) PROTOCOL (giao thức ARQ) Ý tưởng giao thức ARQ hiểu sau : Nút truyền liệu sử dụng giao thức link-layer chấp nhận gói liệu, tạo gói tin cách thêm vào header check sum truyền gói tin Techniques for Protocol Programming 2013 đóng gói tới máy thu Bên máy thu kiểm tra check sum có không, gửi tin ACK(báo nhận) dương tới máy phát, kiểm tra bị sai máy thu gửi môt ACK âm tới máy phát Máy phát nhận lại ACK dương biết gửi gói tin thành công nhận tin ACK âm gửi lại gói tin cho máy thu V TRANSMITTER ROLE ( kịch máy phát) Lưu ý thời gian để máy phát từ lúc gửi gói tin đến lúc thoát để vào chế độ ngủ định có giới hạn Nếu máy phát không nhận tín hiệu ACK âm tiếp gửi tin nhắn tới nút khác mạng { //Let p be a data packet coming from the MAC layer frame = Header++data packet p++check sequence (FCS); // Construct the link layer packet repeat forever { transmit (frame, to receiver node j); // Can be done using Receive.receive( ) parallel { P1: {wait-for (ack); if (ack == positive) exit repeat loop; else continue; // it is negative ack // waited long enough P2: {if time-out() exit repeat loop; } } // end of parallel } // end of repeat; sleep( ) until woken-up( ); } { Receiver node Techniques for Protocol Programming 2013 j { repeat for ever { // Can be done using Receive.receive ( ) p = receive-packet( ); result = checksum-test (p); if (result == success) {send ("success"); exit repeat loop;} else send ("failure"); } // end of repeat loop sleep ( ) until woken-up( ); } } Nút nhận(máy thu) liệu vào chế độ ngủ sau gửi tín hiệu ACK dương (nếu check sum - liệu đúng), không gửi tín hiệu ACK âm cho máy phát đợi máy phát gửi lại gói tin { TRANSMITTER(ARQ) FSM Model Transmitter: s0: frame = getFrame ( ); transmit ( frame ); go to s1; s1: receive( ); if acktype = +ve then {frame = getFrame( ); transmit (frame)} else { transmit (frame);} upon ack go to s1; // Use Receive.receive( ) for this -global: frame, acktype = +ve; booted( ): frame = getFrame( ); transmit (frame) receive( ): Techniques for Protocol Programming 2013 actype = extract ack type( ); if acktype = + ve then {frame = getFrame( ); transmit (frame)} else { transmit (frame); } } { RECEIVER fired( ): {NULL} receive( ): if checksum is valid then send +ve ack else send -ve ack; } Nếu tín hiệu ACK âm bị bên máy phát thời gian time out, bên máy thu phải chờ bên máy phát gửi lại gói tin bị hỏng bên máy phát lại tín hiệu ACK âm Để kết thúc chờ đợi mãi bên máy phát thực lệnh receive-packet() Kết lãng phí thời gian chờ đợi nhiều làm tiêu hao thời lượng pin VI ALTERNATING-BIT-BASED ARQ PROTOCOLS Một biến thể nhỏ giao thức giao thức alternating-bit-based Trong giao thức máy phát sử dụng bít gọi bit điều khiển, thiết lập luân phiên 1, để truyền tải gói tin p1, máy phát thêm vào bit đến gói tin P1 gói tin có dạng 0:P1 sau truyền tới cho máy thu, đặt thời gian s chờ đợi tín hiệu báo nhận ACK, thời gian timeout xảy trước nhận tín hiệu ACK từ máy thu máy phát gửi lại gói tin 0:P1 Khi nhận tín hiệu ACK từ máy thu máy phát gửi gói tin p2, ta thêm bit điều khiển vào trước p2 p2 có dạng 1:P2 Nếu máy thu nhận gói tin p2 báo nhận lại ta truyền tiếp gói tin p3 có dạng 0:P3 Như giao thức quản lý việc truyền liệu tín hiệu ACK Techniques for Protocol Programming 2013 { Transmitter i Control bit b = 0; REPEAT: repeat for ever { read-packet-to-send (p); RESEND: transmit (b:p); PARALLEL: P1: { wait-for-ack( ); p = p+1 mod 2;} // Receive.receive( ); no clock necessary P2: { time-out( ); goto RESEND; } } { Receiver j Control bit b = 0; repeat for ever { receive-packet (p); // Receive.receive( ); is adequate to handle this situation b1 = extract-control-bit (p); d = extract-data (p); if (b1 = b) && checksum-valid (p) then {send-ack( ); b = b+1 mod 2;}; // No -ve ack is sent // Go back and wait for the // next transmission of the same data } } { TRANSMITTER _ alternating bit FSM Model Transmitter s0: bit =1; c bit = 1; frame = getFrame( ); transmit (frame); // c bit is control bit (sent by receiver) go to s1; Techniques for Protocol Programming 2013 s1: receive( ); if c bit == bit { bit = bit + mod 2; frame = bit: packet }; transmit (frame); upon ack: goto s1; -Pseudo code for nesC: global: bit = 1, c bit = 1; booted( ): frame = getFrame( ); transmit (frame) receive( ): actype = extract acktype( ); if acktype = + ve then {frame = getFrame( ); transmit (frame)} else { transmit (frame);} } { Receiver _ alternating bit s0: control bit = 0; goto s1; s1: receive( ); b1 = extract-control-bit (p); d = extract-data (p); if (b1 = b) & checksum-valid (p) then {send-ack( ); b = b+1 mod 2;}; // No -ve ack is sent } A Generalized Version of the Previous Protocol: Chúng ta khái quát giao thức trình bày cách quay lại bước truyền n bắt đầu truyền lại chúng Chúng minh họa điều với ví dụ Ví dụ: Đặt N= e4, ta dùng đệm lưu lại gói tin Bắt đầu ta thêm vào đệm gói tin, thêm vào gói tin byte(8 bit) điều khiển, ta có đệm có dạng buff = 0:p0,1:p1,2p2,3p3,4p3,5p4,6p5,7p6, bắt đầu gửi gói tin từ trái trở Techniques for Protocol Programming 2013 0:p0,1:p1,2:p2, (cùng thời điểm), đồng thời nhận tín hiệu ACK gửi xử lí chúng, đặt b byte điều khiển gói tin gửi Bên máy thu giả sử gửi tín hiệu ACK dương ( gói tin gửi thành công) { transmitter A { // Let Nmax = repeat forever{ load buffer [0:7] = 0: packet0: 1: packet1: : 7: packet7; i = -1; // j is number of packets for which acks received go = 1; PAR P1: while (i < ) { shared: if (go) i = i +1; send (i: packet); go = 1; if (i ==7) wait( ); } P2: wait-for-ack( ); // Receive.receive( ); should solve this problem j = extract-control-digit (ack); delete j: packet j from the buffer; shared: { i = j +1; go = 0} } // for ever; { receiver B while (1) { receive ( from node a, packet p); // Receive.receive( ) contorl-digit j = extract-control-digit (from packet p); send-ack (control-digit); data = extract-data (from packet p); process (data); } } Techniques for Protocol Programming 2013 { Transmitter _ GENERALIZED VERSION Transmitter: s0: c=0, k=0; goto s1; s1: while (k < 7) { send a[ k ]; k ++; }; s2: receive( ); cbit = extract cbit( ); if (cbit == c) then (c=c+1 mod 8) else k = c; go to s1; nesC code booted( ) c=0; k =0; transmit( ); transmit( ): while (k < 7) {send a [ k ]; k ++; }; receive( ): cbit = extract cbit( ); if (cbit == c) then (c=c+1 mod 8) else k = c; call transmit( ); } { Receiver _ GENERALIZED VERSION s0: receive ( from node a, packet p); contorl-digit j = extract-control-digit (from packet p); send-ack (control-digit); data = extract-data (from packet p); process (data); } VII SELECTIVE REPEAT/SELECTIVE REJECT (lựa chọn lặp lại/ lựa chọn từ chối) Phương pháp đơn giản phương pháp nêu đó, cách truyền liệu máy phát máy thu sử dụng nhớ đệm dùng để lưu giá trị gửi đến mà chưa kịp truyền đi, hay nhớ báo nhận ACK gửi đến… Các máy phát gửi liên tiếp gói tin cho máy thu, máy thu kết thúc nhận liệu có tín hiệu +ACK (ACK dương) gói bị hỏng gửi thiếu 10 Techniques for Protocol Programming 2013 sẻ gửi cho máy phát –ACK(ACK âm), từ máy phát so sánh gửi lại gói tin bị hỏng theo số báo nhận ACK tương ứng Phương pháp có lợi phương pháp có đệm nên có bị gói tin cần gửi lại máy phát lấy đệm, song có đệm nên tiêu tốn nhiều không gian nhớ mạng, từ dẫn đến chi phí hạ tầng mạng tăng cao Transmitter A { bufer1 [0 ] = 0: p0 ++ 1: p1 ++ 2: p2 ++ ++ 7: p7; send-now [ ] = 0, , , 7; send-next [ ] = non empty junk; j = -1; end =0; // initially start sending from buffer1 [ ] while (send-next [ ] != empty) { PARALLEL: { PAR1:{ for ( i = 0, i < size; i ++) { i1 = send-now[i]; send (to node B, buffer1 [i1]); } end = 1; } PAR2:{ 11 Techniques for Protocol Programming 2013 while (end != 1) { wait-for (ack, from node B); packet-id pid = extract-control-byte (ack); ack-type = extract-ack-type (ack); if (ack-type = negative) { send-next [++ j] = pid; } } // end while send-now [ ] = send-next [ ]; size = size of send-next [ ]; } // end PAR2 } // end PARALLEL } // end while } { receiver B buffer [ ] = empty; i = 0; while (i < 7) { receive (packet p, from node A); packet-id = get-packet-id (packet p); data = get-data (packet p); if (packet-id == i) 12 Techniques for Protocol Programming 2013 { buffer [ i ] = data; i = i + 1; send (+ve ack)} else send (-ve ack, i); } } { Transmitter-Selective Repeat/Selective Reject s0: k = 0; s1: while (k < 7) send (a [k]); goto s2; s2: receive( ); c = control bit( ); if ack-for (c) is -ve then send a [c]; } { Receiver-Selective Repeat/Selective Reject s0: i =0; while (i < 7) { receive (packet p, from node A); packet-id = get-packet-id (packet p); data = get-data (packet p); if (packet-id == i) { buffer [i] = data; 13 Techniques for Protocol Programming 2013 i = i +1; send (+ve ack) } else send (-ve ack, i); } nesC code: booted( ): i = 0; receive( ): } Trong số ứng dụng thực tế, phương pháp tỏ có lợi VIII NAMING AND ADDRESSING Trong môi trường bên nút mạng cảm biến hư hỏng Vì WSN nút phân bố mạng phải gán địa nhất, việc để dể dàng việc quản lí nút phát sinh trường hợp Ví dụ nút mạng làm cầu nối(nút trung gian) hai mạng con, nút lý mà không hoạt động, hai mạng bị kết nối, việc khiến cho nút mạng không hoạt động Trong để quản lí địa vấn đề khó khăn Chúng ta tìm hiểu số kĩ thuật lập trình cách đặt tên gán địa cho nút mạng IX DISTRIBUTED ASSIGNMENT OF NETWORKWIDE ADDRESSES (phân cấp gán địa cho mạng rộng ) 14 Techniques for Protocol Programming 2013 Đây kĩ thuật đơn giản gán địa cho nút, nhiên chi phí cho kĩ thuật khó Trong kĩ thuật nút tạo địa ngẫu nhiên, sau đặt địa địa riêng mình, sau phát tín hiệu để kiểm tra nút kế cận xem có bị trùng lặp với địa riêng không Nếu có trùng lặp với địa nút bên cạnh cố gắng chọn địa ngẫu nhiên tiếp tục kiểm tra với nút bên cạnh lần Công việc lặp lại trùng lặp địa với nút bên cạnh module algorithm2C { uses interface Boot; uses interface Random; uses interface Leds; uses interface AMPacket; uses interface Packet; uses interface AMSend; uses interface ActiveMessageAddress as AMA; uses interface PacketAcknowledgements; uses interface Receive; uses interface SplitControl as RadioCont rol; uses interface Timer as Timer0; } implementation { void generateAddress( ); void broadcastAddress( ); am group t my group = 1; am addrt myaddress; bool conflict; event void Boot.booted( ) { call RadioControl.start( ); } /************************************************** Compute global addresss for each specific node and test if the address is in use **************************************************/ 15 Techniques for Protocol Programming 2013 event void RadioCont rol.startDone (error t err) { // First we generate the address of the mote generateAddress( ); // The initial address broadcast call Timer0.startOneShot (6000); // At this point, we can set the generated address call AMA setAddress (my group, my address); } event void AMSend.sendDone (message t* msg, error t err) { if (err == FAIL) { call Leds.led0On( ); } } event void Timer0.fired() { message t msg; am addr t* temp; temp = (am addr t*) call AMSend.getPayload (&msg); temp = &my address; call AMSend.send (0 x ffff, &msg, sizeof (am addr t)); } /**************************************************** A simple function that randomly generates an address for a mote ****************************************************/ void generateAddress( ) { call Leds.set (0); my address = (31071334523 % (call Random.rand16( ))); } 16 Techniques for Protocol Programming 2013 void broadcastAddress( ) { message t msg; am addr t* temp; temp = (am addr t*) (call AMSend.getPayload (&msg)); *temp = call AMA.amAddress( ); call AMSend send (0 x ffff,&msg, sizeof (am addr t)); } async event void AMA.changed( ) { } event void RadioControl.stopDone (error t err) { } event message t* Receive.receive (message t *msg, void* payload, uint8 t len) { am addr t broadcasted addr; broadcasted addr = (am addr t*) payload; call Leds.set (0); // Clear debug leds if (*broadcasted addr == (call AMA.amAddress( ))) // Generate a new // addr { call Leds.led0On( ); 17 Techniques for Protocol Programming 2013 // A collision has occured generateAddress( ); call AMA.setAddress (my group, my address); broadcastAddress( ); // Only broadcast new address // after a collision } else { call Leds.led1On( ); // No collison yet } return msg; } } Các công việc để triển khai giao thức này, giao diện sẻ khởi động thành phần như: đưa hệ số ngẫu nhiên, việc gửi nhận thông tin cho nút kế cận, tự động hẹn để phát sóng cho nút lân cận, tạo địa ngẫu nhiên… #define MOTE AM ID 10 configuration algorithm2AppC { } implementation { components MainC; components RandomC; components LedsC; components new AMSenderC(MOTE AM ID); components new AMReceiverC(MOTE AM ID); components ActiveMessageAddressC; 18 Techniques for Protocol Programming 2013 components algorithm2C; components ActiveMessageC; components new TimerMilliC( ); algorithm2C.Boot->MainC Boot; algorithm2C.Random->RandomC; algorithm2C.Leds->LedsC; algorithm2C.AMPacket->AMSenderC; algorithm2C.Packet->AMSenderC; algorithm2C.AMSend->AMSenderC; algorithm2C.AMA->ActiveMessageAddressC; algorithm2C.PacketAcknowledgements->AMSenderC; algorithm2C.Receive->AMReceiverC; algorithm2C.RadioControl->ActiveMessageC; algorithm2C.Timer0->TimerMilliC; } void generateAddress( ) { call Leds.set (0); my address = (31071334523 % (c a l l Random rand16( ))); } void broadcastAddress( ) { message t msg; am addr t* temp; temp = (am addr t*) (call AMSend getPayload (&msg)); 19 Techniques for Protocol Programming 2013 *temp = call AMA amAddress( ); call AMSend send (0 x ffff,&msg, sizeof (am addr t)); } Ngoài để kiểm soát kiến xảy trình giao tiếp mạng, ta dùng nhiều hai địa điểm để tạo địa ngẫu nhiên phát sóng địa nút lân cận event void Boot.booted( ) { call RadioCont rol.start( ); } event void RadioCont rol.startDone (error t err) { // puts the address in my address generateAddress( ); // The initial address broadcast call Timer0.startOneShot (6000); // Check once if any one else has my address // If not, at this point, we can set the generated address call AMA.setAddress (my group, my address); } Địa biến số toàn cục địa ngẫu nhiên lưu trữ, sau phát cho nút lân cận Ngay sau thành phần nêu bật lệnh RadioControl.start() thực nhiệm vụ sau Đầu tiên tạo địa ngẫu nhiên đặt vào biến toàn cục Chúng ta kiểm tra tất nút có địa với (các địa trùng lặp), trùng lặp bắt đầu one-shot (monoshot) xảy sẻ gây chậm trể (6000ms) chương trình Nếu trùng lặp ta thiết lập địa riêng cho nút 20 Techniques for Protocol Programming 2013 mạng Nhiệm vụ lại chờ đợi trả lời truy vấn có trùng lặp địa event void Timer0.fired( ) { message t msg; am addr t *temp; temp = (am addr t *) call AMSend getPayload (&msg); // storing the address of my address in temp *temp = my address; call AMSend.send (0 x ffff, &msg, sizeof (am addr t)); } event void AMSend sendDone (message t *msg, error t err) { if(err == FAIL) { // If send fails, switch on red led call Leds.led0On( ); } } event message t *Receive.receive(message t* msg, void* payload, uint8 t len) { am addr t* broadcasted addr; broadcasted addr = (am addr t*)payload; call Leds.set (0); // Clear debug leds if(*broadcasted addr == (call AMA.amAddress( ))) // Generate a new addr { call Leds.led0On( ); // A collision has occured generateAddress( ); call AMA.setAddress (my group, my address); broadcastAddress( ); // Only broadcast new address after// a collision } else { 21 Techniques for Protocol Programming 2013 call Leds.led1On( ); // No collison yet } return msg; } Các xung đột monoshot gây nên kiên fired() nơi mà gửi gói tin tới nút lân cận, ta thiết lập trọng tải lưu trữ địa phần gói tin, sau gửi gói tin Sau gửi gói tin có báo cáo lỗi gửi bật đèn LED, sau ta không cố gắng gửi lại gói tin mà nhận mốt gói tin ta tách lấy địa người gửi so sánh với địa để xem có bị trùng lặp không Nếu trùng lặp ta tự thiết lập nhớ địa đánh dấu cách đặt cờ báo( từ trở không trả lời tin nhắn từ nút khác gửi đến không thay đổi địa Điều đạt thiết lập cờ báo TRUE) Tuy nhiên ta nhận thấy địa bị trùng lặp ta tạo địa gán địa mình, sau phát báo cho nút lân cận chờ nút trả lời Ta tiếp tục tìm thấy địa Trước làm xong công việc ta cần thêm vào số chi tiết void generateAddress( ) { call Leds set (0); my address = (31071334523 \% (call Random rand16( ))); } async event void AMA.changed( ) { } event void RadioControl.stopDone (error t err) { } X IMPROVED ALGORITHMS Bây ta nói giải pháp để giải vấn đề đề cập 22 Techniques for Protocol Programming 2013 Perkin’s Solution (giải pháp Perkin’s) 23 [...]... mất kết nối, việc đó khiến cho các nút trong mạng sẽ không hoạt động được Trong khi để quản lí địa chỉ là một vấn đề khó khăn Chúng ta sẽ tìm hiểu một số kĩ thuật trong lập trình cách đặt tên và gán địa chỉ cho các nút trong mạng IX DISTRIBUTED ASSIGNMENT OF NETWORKWIDE ADDRESSES (phân cấp và gán địa chỉ cho mạng rộng ) 14 Techniques for Protocol Programming 2013 Đây là kĩ thuật đơn giản gán mỗi địa chỉ... address // after a collision } else { call Leds.led1On( ); // No collison yet } return msg; } } Các công việc để triển khai giao thức này, một bộ giao diện sẻ được khởi động các thành phần như: đưa ra các hệ số ngẫu nhiên, việc gửi nhận các thông tin cho các nút kế cận, tự động hẹn giờ để phát sóng ra cho các nút lân cận, tạo ra một địa chỉ ngẫu nhiên… #define MOTE AM ID 10 configuration algorithm2AppC... nút, tuy nhiên chi phí cho kĩ thuật này là rất khó Trong kĩ thuật này mỗi nút tạo ra một địa chỉ ngẫu nhiên, sau đó đặt địa chỉ đó như là địa chỉ riêng của mình, sau đó nó sẽ phát tín hiệu để kiểm tra các nút kế cận xem có bị trùng lặp với địa chỉ riêng không Nếu có sự trùng lặp với địa chỉ của nút bên cạnh thì nó sẽ cố gắng chọn một địa chỉ ngẫu nhiên rồi tiếp tục kiểm tra với các nút bên cạnh một lần... Địa chỉ của tôi là một biến số toàn cục trong các địa chỉ ngẫu nhiên được lưu trữ, sau đó được phát ra cho các nút lân cận Ngay sau khi các thành phần được nêu trên được bật bởi lệnh RadioControl.start() thì chúng ta sẽ thực hiện các nhiệm vụ sau đây Đầu tiên sẽ tạo ra một địa chỉ ngẫu nhiên và đặt vào trong biến toàn cục của tôi Chúng ta sẽ kiểm tra tất cả các nút có cùng địa chỉ với mình (các địa... gói tin bất kì thì ta sẽ tách lấy địa chỉ của người gửi rồi so sánh với địa chỉ của mình để xem có bị trùng lặp không Nếu không có trùng lặp ta sẽ tự thiết lập và nhớ địa chỉ của mình và đánh dấu bằng cách đặt một cờ báo( từ giờ trở đi sẽ không trả lời tin nhắn từ các nút khác gửi đến và cũng không thay đổi địa chỉ của mình nữa Điều này đạt được bằng thiết lập cờ báo TRUE) Tuy nhiên nếu ta nhận thấy... Techniques for Protocol Programming 2013 call Leds.led1On( ); // No collison yet } return msg; } Các xung đột monoshot gây nên sự kiên fired() nơi mà chúng ta gửi gói tin tới nút lân cận, ta thiết lập một trọng tải và lưu trữ địa chỉ của tôi như một phần của các gói tin, sau đó gửi các gói tin đi Sau khi gửi các gói tin nếu có bất kì báo cáo về lỗi gửi thì chúng ta sẽ bật một đèn LED, sau này ta sẽ không... Programming 2013 *temp = call AMA amAddress( ); call AMSend send (0 x ffff,&msg, sizeof (am addr t)); } Ngoài ra để kiểm soát và các sự kiến xảy ra trong quá trình giao tiếp trong mạng, khi đó ta có thể dùng nhiều hơn hai địa điểm để tạo ra các địa chỉ ngẫu nhiên và phát sóng các địa chỉ ra các nút lân cận event void Boot.booted( ) { call RadioCont rol.start( ); } event void RadioCont rol.startDone (error t... các nút có cùng địa chỉ với mình (các địa chỉ trùng lặp), các trùng lặp được bắt đầu bằng một one-shot (monoshot) xảy ra sẻ gây ra các chậm trể (6000ms) trong chương trình của tôi Nếu không có sự trùng lặp thì ta thiết lập được địa chỉ riêng cho mỗi nút 20 Techniques for Protocol Programming 2013 trong mạng Nhiệm vụ còn lại là chờ đợi và trả lời các truy vấn nếu có sự trùng lặp địa chỉ event void Timer0.fired(... tế, phương pháp này tỏ ra có lợi hơn VIII NAMING AND ADDRESSING Trong môi trường bên ngoài thì các nút trong mạng cảm biến có thể hư hỏng bất cứ khi nào Vì vậy trong một WSN thì các nút phân bố trong mạng phải được gán một địa chỉ duy nhất, việc này để dể dàng trong việc quản lí các nút trong khi phát sinh các trường hợp mới Ví dụ một nút trong mạng làm cầu nối(nút trung gian) giữa hai mạng con, và... này đạt được bằng thiết lập cờ báo TRUE) Tuy nhiên nếu ta nhận thấy địa chỉ bị trùng lặp thì ta sẽ tạo ra một địa chỉ và gán đó là địa chỉ của mình, sau đó phát đi báo cho các nút lân cận và chờ các nút đó trả lời Ta cứ tiếp tục như thế cho đến khi tìm thấy địa chỉ của mình Trước khi làm xong công việc ta cần thêm vào một số chi tiết dưới đây void generateAddress( ) { call Leds set (0); my address = ... PROTOCOLS( lập trình với giao thức link-layer) : Trong phần xem xét thách thức đặt việc lập trình lớp liên kết liệu, sử dụng kĩ thuật ARQ (automatic repeat request – tự động lặp lại yêu cầu) Giao thức. .. gói tin có độ tin cậy cách sử dụng báo nhận gửi lại IV AUTOMATIC REPEAT REQUEST (ARQ) PROTOCOL (giao thức ARQ) Ý tưởng giao thức ARQ hiểu sau : Nút truyền liệu sử dụng giao thức link-layer chấp... ALTERNATING-BIT-BASED ARQ PROTOCOLS Một biến thể nhỏ giao thức giao thức alternating-bit-based Trong giao thức máy phát sử dụng bít gọi bit điều khiển, thiết lập luân phiên 1, để truyền tải gói tin p1,

Ngày đăng: 10/04/2016, 14:08

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan