Professional Documents
Culture Documents
WSN (Demo) (Recovered)
WSN (Demo) (Recovered)
HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN VIỄN THÔNG
---------------o0o---------------
11
.................................................................................................................................71
Kiểm tra bằng trình duyê ̣t web: Truy câ ̣p vào trình duyê ̣t web, nhâ ̣p địa chỉ
của 1 node. Trình duyê ̣t sẽ hiển thị kết quả như bên dưới.......................................71
10 | W i r e l e s s S e n s o r N e t w o r k
Cấu trúc bản tin DIS:
11 | W i r e l e s s S e n s o r N e t w o r k
Hình 3. Các sub-option
13 | W i r e l e s s S e n s o r N e t w o r k
Hình 4. Cấu trúc gói tin DAO
DAO Sequence: số gói tin DAO được một node gửi vào mạng.
DAO rank: rank của node tạo gói tin DAO.
RPL Instance ID: Instance của node tham gia định tuyến.
Route Tag: được sử dụng để cung cấp thứ tự ưu tiên khi lưu thông tin các
prefix.
Prefix length: chiều dài prefix.
RRcount: cho biết số mục trong Reverse Route Stack – ngăn xếp lưu các mục
định tuyến theo hướng downward.
DAO lifetime: thời gian sống hiệu lực của prefix, phục vụ cho việc xác định khả
năng sống của prefix.
Destination Prefix: là một trường có chiều dài thay đổi, được sử dụng để nhận
dạng một địa chỉ đích, một prefix, hoặc một nhóm địa chỉ multicast trong mạng.
Reverse Route Stack: là trường có chiều dài có thể thay đổi, được sử dụng để lưu
thông tin của những prefix tham gia định tuyến. Khi một node thêm vào Reverse
Route Stack, prefix của node được thêm vào danh sách, đồng thời tăng giá trị của
RR count.
Các sub-option được sử dụng nhằm mở rộng các thành phần của gói tin DAO, tùy
theo mục đích nghiên cứu và triển khai.
Nguyên lý truyền gói tin DAO:
14 | W i r e l e s s S e n s o r N e t w o r k
Các gói tin Dao được truyền từ các node ở rank cao đến những node ở rank thấp
nhằm quảng bá các trạng thái định tuyến downward cho từng prefix của những
nhóm hoặc những Sub-DAG bên trong DAG. Cơ chế định tuyến với DAO chỉ có
thể hoạt động khi node đã tham gia ít nhất một DAG trong mạng.
Cơ chế định tuyến với DAO chỉ có thể được sử dụng trong từng DAG, được bởi
DAG ROOT. Việc xác định cơ chế này thông qua Flag A của gói tin DIO truyền
đi từ ROOT DAG.
Khi cơ chế này được sử dụng, trong DAG phải có ít nhất một số các node có khả
năng lưu những thông tin từ DAO, bao gồm DAG ROOT. Khi cơ chế này không
được sử dụng, các node không được phép tạo và xử lý các gói tin DAO.
Gói tin DAO được gửi từ node đến một hoặc một nhóm các DAG parent của node
trong DAG. Những node có khả năng tham gia định tuyến, thực hiện lưu các thông
tin trạng thái lấy được từ Reverse Route Stack vào bảng định tuyến. Mỗi mục
trong bảng định tuyến cho biết những thông tin trạng thái của prefix như: địa chỉ
IPv6, địa chỉ Interface, DAO sequence, DAO rank, DAO lifetime,.. Nhờ đó, một
node có thể xác định trạng thái của những prefix.
Thông qua việc quản lý trạng thái kết nối của các prefix được cập nhật bởi DAO,
các node rank thấp có thể định tuyến nhằm phục vụ cho những ứng dụng kiểu
P2MP hoặc P2P.
1.2 Quá trình định tuyến
1.2.1 Quá trình khởi tạo mạng
Khi triển khai một mạng RPL, mỗi RPL Instance được thiết lập với một hoặc một
số DAG ROOT. Các thông số định tuyến được thiết lập phù hợp với mục đích
triển khai. Những DAG ROOT tự động thiết lập rank bằng 1(ROOT RANK), sau
đó chúng định thời quảng bá các bản tin DIO đến các node xung quanh để xây
dựng DAG của bản thân.
Trong pha khởi tạo, những node trong mạng có thể lựa chọn một trong hai chế độ
hoặc chúng giữ trạng thái im lặng và không gửi bất kì gói tin DIO nào cho đến khi
chúng tham gia và một DAG xác định; hoặc ngay lập tức thiết lập là DAG ROOT
của một floating DAG, sau đó gửi multicast các bản tin DIO đến các node khác
trong mạng.
Trong quá trình này, mỗi node cũng có thể gửi multicast DIS đến các node xung
quanh hoặc chờ nhận những gói tin DIO được gửi đến. Khi triển khai mạng, cần
thiết kế để các node trong mạng có khả năng đáp ứng được các yêu cầu trên.
Những node gần root nhất khi nhận được DIO từ DAG ROOT sẽ tham gia vào
DAG, cập nhật thông tin trong DIO và xác định rank của bản thân trong DAG.
Node định thời chuyển tiếp các gói tin DIO đến những node xung quanh, quảng bá
vị trí và DAG mà nó đang tham gia.
15 | W i r e l e s s S e n s o r N e t w o r k
Quá trình trên được các thành viên trong DAG lặp đi lặp lại liên tục tại những thời
điểm định thời. Do đó, quy mô DAG được mở rộng tới những node ở xa DAG
ROOT và những node trong DAG cập nhật được thông tin của những thành viên
xung quanh trong DAG.
Một node ở trạng thái tự do (chưa tham gia vào DAG) sẽ định kỳ gửi các gói tin
DIS tới các neighbor để quảng bá Instance mà nó có khả năng tham gia, đồng thời
yêu cầu những node đáp ứng được phần hồi thông tin về DAG (DIO) mà chúng
tham gia.
Khi một neighbor nhận được bản tin DIS, nếu đã tham gia vào một DAG phù hợp
với instance trong DIS, nó sẽ phản hồi bằng một bản tin DIO tới node gửi DIS. Sự
phản hồi này sẽ diễn ra ngay sau khi thời điểm xử lý bản tin DIS mà không chờ
đến thời điểm định thời DIO tiếp theo. Bên cạnh đó, nếu DIS chứa địa chỉ
multicast, node sẽ khởi động lại bộ định thời DIO để giảm thời gian gửi DIO tiếp
theo. Cơ chế này giúp sự quảng bá DAG linh động và hiệu quả hơn.
1.2.2 Các quy tắc trong quá trình lựa chọn DAG
Cơ chế lựa chọn DAG là sự kết hợp giữa cơ chế so sánh độ ưu tiên của các DAG
và các luật được quy định trong Object function. Độ ưu tiên của các DAG được
thể hiện thông qua trường DAG preferred trong gói tin DIO được gửi bởi
DAGROOT. Nhờ đó, mỗi node trong mạng đều có thể lựa chọn những DAG được
ưu tiên nhất và thỏa mãn tốt nhất những yêu cầu định tuyến được đưa ra.
DAG tham gia phải đáp ứng instance của một node.
DAG tham gia phải có độ ưu tiên cao nhất và node có rank thấp nhất.
DAG tham gia phải thỏa mãn các object function của node.
Sau quá trình khám phá và tham gia DAG trong mạng, mỗi node xử lý các thông
tin trong DIO à chúng nhận được, cập nhật rank và chọn những parent từ những
node thành viên xung quanh của DAG.
1.2.3 Tính toán rank và sự di chuyển của các node trong DAG
Lựa chọn rank là quá trình xác định vị trí tương đối của node so với DAGROOT
trong DAG, đồng thời có ảnh hưởng đến mối quan hệ của node với các node khác
trong mạng. Quy tắc tính toán rank được quy định trong các hàm Object function
ứng với mỗi Instance cụ thể.
Rank của node phải đảm bảo các quy tắc sau:
Rank của node trong mạng luôn lớn hơn 1 và nhỏ hơn giới hạn lớn nhất
(RANK MAX) được quy định tùy theo quy mô và mục đích triển khai.
Rank của node phải luôn lớn hơn rank của tất cả các parent của node.
Node có thể quảng bá rank thấp hơn hoặc cao hơn rank mà nó quảng bá
trong các gói tin trước đó. Sự thay đổi đó phụ thuộc vào rank của các parent
trong DAG.
16 | W i r e l e s s S e n s o r N e t w o r k
Node có thể quảng bá rank bằng RANK MAX tại mọi thời điểm. Khi một
node quảng bá rank bằng RANK MAX, tương đương với sự kiện node
không là thành viên của DAG nào trong mạng.
Tại mọi thời điểm, node có thể tham gia vào một DAG mới trong cùng RPL
Instance và thay đổi rank phù hợp. Trong thời gian trước khi quảng bá các
gói tin DIO cho DAG mới, node vẫn tiếp tục gửi các gói tin đến các parent
trong DAG cũ.
1.2.4 Truyền dữ liệu
Sau quá trình xây dựng DAG, các node trong DAG tạo các gói dữ liệu và bắt đầu
gửi gói tin đến DAGROOT. Để gửi gói đến DAGROOT, node phải lựa chọn một
node trong route table làm next-hop và gửi gói đến next-hop được lựa chọn. Việc
lựa chọn next-hop phải tuân theo các quy luật cụ thể, nhằm mục đích truyền gói
hiệu quả, giảm khả năng mất gói, tránh các vòng lặp và các xung đột trong mạng.
Các quy tắc lựa chọn next-hop:
Next-hop là một node đã tham gia vào một DAG đáp ứng được RPL
Instance ID trong header của gói tin được forward.
Nếu một node hoạt động với giao thức định tuyến được ưu tiên hơn RPL
(OSPF,EIGRP,…) thì node đó được chọn làm next-hop.
Nếu node là thành viên của một DAG và có một parent là default route thì
chọn parent đó là next-hop.
Nếu node là thành viên của một DAG và tất cả các parent tạm thời không
thể kết nối được, node chọn một trong số các sibling làm next-hop. Nếu
không có sibling, gói sẽ bị hủy.
Node không được chọn các node có rank cao hơn làm next-hop.
Khi truyền gói, tham số Time to live(TTL) được sử dụng để theo dõi và loại
bỏ những gói tin không thể truyền được tới đích, đồng thời hạn chế các
vòng lặp có thể xảy ra. Tại mỗi node gói tin được forward, TTL được giảm
1 đơn vị. Khi TTL bằng 0, gói sẽ bị hủy mà không được truyền đến DAG
ROOT.
17 | W i r e l e s s S e n s o r N e t w o r k
Hình 5. Kiến trúc giao thức mạng Contiki RPL
18 | W i r e l e s s S e n s o r N e t w o r k
Hình 6. Cấu trúc Contiki RPL
19 | W i r e l e s s S e n s o r N e t w o r k
Hình 8. Cơ chế điều khiển sự kiêṇ của DAGROOT
2.2.2 Quá trình hoạt động của các node thành viên
Trong pha khởi tạo, những UDP-client thực hiện quá trình thiết lập địa chỉ IPv6 và
khởi động bộ định thời handle-periodic-timer có chức năng định thời gửi các bản
tin DIS tới các node khác trong khi node chưa tham gia vào bất kỳ DAG nào.
20 | W i r e l e s s S e n s o r N e t w o r k
Hình 9. Pha khởi tạo của những note UDP-client
21 | W i r e l e s s S e n s o r N e t w o r k
Hình 20. Cơ chế xử lý bản tin DIO
Cơ chế xử lý bản tin DIO dựa trên một số nguyên tắc cơ bản như sau:
Bản tin DIO phải có Instance ID được node hỗ trợ thì mới được tiếp tục xử
lý.
Khi node chưa tham gia vào bất kỳ DAG nào thì tham gia vào DAG của
node gửi DIO
Nếu nhận được bản tin DIO của một DAG mà node không phải thành viên
và nếu việc tham gia vào DAG này khiến node có rank thấp hơn thì node sẽ
gia nhập DAG mới.
Nếu DIO đến từ một node trong cùng một DAG và sequence number đã
được tăng lên thì node tham gia quá trình sửa chữa DAG.
22 | W i r e l e s s S e n s o r N e t w o r k
Nếu DIO trong cùng DAG, quảng bá rank thấp hơn rank của node nhưng
chưa có trong danh sách parent thì thêm node gửi DIO đó làm parent, sau
đó cập nhật vị trí của node trong DAG.
Nếu DIO từ một parent trong DAG, trước hết cần phải cập nhật thông tin
của parent, sau đó tùy thuộc vào sự thay đổi của các parent đưa ra hành
động phù hợp.
Khi rank thay đổi, phải reset bộ định thời DIO.
Chỉ chuyển lên rank cao hơn theo một parent khi không còn parent nào thay
thế.
Best parent là node thuộc DAG có thứ tự ưu tiên cao nhất và có rank thấp
nhất.
2.2.4 Cơ chế điều khiển sự kiện của UDP-client
Sau pha khởi tạo, mỗi node đã thiết lập được những thông tin ban đầu và bắt đầu
nhận và xử lý những bản tin ICMP trong mạng. Khi đ1o node tham gia những
DAG hỗ trợ và hoạt động theo cơ chế điều khiển sự kiện. Các hoạt động của node
theo những sự kiện đến như: nhận các bản tin ICMP, nhận gói từ node khác trong
mạng, các sự kiện định thời.
23 | W i r e l e s s S e n s o r N e t w o r k
Hình 31. Cơ chế điều khiển sự kiêṇ UDP-client
3. Border Router
Border router (hay edge router) thường là thiết bị nằm ở biên mạng của chúng ta, cho
phép giao tiếp với các mạng bên ngoài bằng giao diện mạng tích hợp của nó, chẳng hạn
như Wifi, Ethernet, Serial,… Ví dụ trong Contiki, border router sẽ được sử dụng để định
tuyến dữ liệu giữa WSN (mạng RPL) và mạng IP bên ngoài.
24 | W i r e l e s s S e n s o r N e t w o r k
Hình 42. Ví dụ về Border-Router
Trong hầu hết ứng dụng dùng border router triển khai một giao diện gọi là SLIP, cho
phép kết nối một vi mạch nhất định với máy chủ lưu trữ bằng cách sử dụng các tập lệnh
được Contiki cung cấp như tunslip6 qua cổng nối tiếp, tạo một cầu nối mạng được cấp
tiền tố IPv6 để đặt địa chỉ IPv6 toàn cầu.
Có thể hình dung hoạt động của tunslip6 như sau: Các gói IPv6 mà máy chủ nhận được
là chuyển tiếp qua kết nối USB tới border router qua tunslip6 và sau đó tất cả các gói
không dây 6LoWPAN được border router chuyển tiếp tới máy chủ lưu trữ dưới dạng gói
25 | W i r e l e s s S e n s o r N e t w o r k
Hình 53. Border Router trong Contiki
26 | W i r e l e s s S e n s o r N e t w o r k
4. UDP
4.1 Khái niệ m
UDP (User Datagram Protocol) là một trong những giao thức cốt lõi của giao thức
TCP/IP. Dùng UDP, chương trình trên mạng máy tính có thể gửi những dữ liệu ngắn
được gọi là datagram tới máy khác. UDP không cung cấp sự tin cậy và thứ tự truyền nhận
mà TCP làm; các gói dữ liệu có thể đến không đúng thứ tự hoặc bị mất mà không có
thông báo. Tuy nhiên UDP nhanh và hiệu quả hơn đối với các mục tiêu như kích thước
nhỏ và yêu cầu khắt khe về thời gian. Do bản chất không trạng thái của nó nên nó hữu
dụng đối với việc trả lời các truy vấn nhỏ với số lượng lớn người yêu cầu.
Những ứng dụng phổ biến sử dụng UDP như DNS (Domain Name System), ứng dụng
streaming media, Voice over IP, Trivial File Transfer Protocol (TFTP), và game trực
tuyến.
UDP là giao thức hướng thông điệp nhỏ nhất của tầng giao vận hiện được mô tả trong
RFC 768 của IETF.
Trong bộ giao thức TCP/IP, UDP cung cấp một giao diện rất đơn giản giữa tầng mạng
bên dưới (thí dụ, IPv4) và tầng phiên làm việc hoặc tầng ứng dụng phía trên.
UDP không đảm bảo cho các tầng phía trên thông điệp đã được gửi đi và người gửi cũng
không có trạng thái thông điệp UDP một khi đã được gửi (Vì lý do này đôi khi UDP còn
được gọi là Unreliable Datagram Protocol).
UDP chỉ thêm các thông tin multiplexing và giao dịch. Các loại thông tin tin cậy cho việc
truyền dữ liệu nếu cần phải được xây dựng ở các tầng cao hơn.
Tiêu đề UDP gồm 4 trường: cổng nguồn (source port), cổng đích (destination port), độ
dài (length), checksum. Mỗi trường đều chiếm 2 byte (16 bits), cụ thể:
27 | W i r e l e s s S e n s o r N e t w o r k
Hình 64. Cấu trúc gói tin UDP
Phần header của UDP chỉ chứa 4 trường dữ liệu, trong đó có 2 trường là tùy chọn (ô nền
đỏ trong bảng).
Source port
Trường này xác định cổng của người gửi thông tin và có ý nghĩa nếu muốn nhận thông
tin phản hồi từ người nhận. Nếu không dùng đến thì đặt nó bằng 0.
Destination port
Trường xác định cổng nhận thông tin, và trường này là cần thiết.
Length
Trường có độ dài 16 bit xác định chiều dài của toàn bộ datagram: phần header và dữ liệu.
Chiều dài tối thiểu là 8 byte khi gói tin không có dữ liệu, chỉ có header.
Checksum
Trường checksum 16 bit dùng cho việc kiểm tra lỗi của phần header và dữ liệu. Phương
pháp tính checksum được định nghĩa trong RFC 768.
28 | W i r e l e s s S e n s o r N e t w o r k
Hình 15. Gửi gói tin UDP
29 | W i r e l e s s S e n s o r N e t w o r k
MÔ PHỎNG/KIỂM TRA KẾT QUẢ
5. Những chương trình được sử dụng khi mô phỏng
RPL Border Router
- border-router.c
- udp-server.c (hoă ̣c udp-client.c, nhưng trong báo cáo này, nhóm sử dụng udp-server.c)
- slip-bridge.c (đây là chương trình chứa callback function để xử lý mô ̣t gói tin SLIP
connection request (Serial Line Interface Protocol)
- httpd-simple.c (mô ̣t server web đơn giản)
30 | W i r e l e s s S e n s o r N e t w o r k
Hình 16. Khai báo thư viên và header files trong border-router.c
Theo mă ̣c định, border router sẽ quản trị mô ̣t trang web đơn giản. Tuy nhiên, tính năng
này có thể tắt bằng cách định nghĩa WEBSERVER như trong chương trình bên dưới.
Trang web này sẽ hiển thị khi nhâ ̣p địa chỉ IPv6 của border router vào trình duyê ̣t. Hình
dưới đây là phần chương trình liên quan đến WEBSERVER trong file border-router.c:
31 | W i r e l e s s S e n s o r N e t w o r k
Kế đến là border_router_process, process này chứa vòng lă ̣p thực hiê ̣n chức năng của
border router, bao gồm nhâ ̣n prefix, gán prefix và định tuyến các nút trong mạng RPL.
32 | W i r e l e s s S e n s o r N e t w o r k
33 | W i r e l e s s S e n s o r N e t w o r k
Hình 20. Hàm request_prefix()
Set_prefix_64(): Tạo prefix cho mạng RPL
34 | W i r e l e s s S e n s o r N e t w o r k
Hình 21. Hàm thiết lâ ̣p prefix, tạo mô ̣t RPL dag mới từ prefix nhâ ̣n được
35 | W i r e l e s s S e n s o r N e t w o r k
Hình 22. Hàm in địa chỉ IPv6
36 | W i r e l e s s S e n s o r N e t w o r k
Ipaddr_add(): Thêm mô ̣t địa chỉ IPv6 mới vào trong mạng
37 | W i r e l e s s S e n s o r N e t w o r k
Hình 24. Mô ̣t phần của chương trình tạo route tới các nút mạng
5.2 Phân tích các khối chương trình chính trong udp-server.c
Nhiê ̣m vụ của mô ̣t nút mạng udp-server là tạo mô ̣t DAG với border router. Border router
sau đó sẽ nhâ ̣n prefix thông qua kết nối SLIP (Serial Line Interface Protocol) và giao tiếp
với các nút khác trong mạng RPL
38 | W i r e l e s s S e n s o r N e t w o r k
Hình 25. udp-server.c flow chart
Phân tích cụ thể các code block có trong udp-server.c:
Đầu tiên, thiết lâ ̣p khởi đô ̣ng UDP server:
39 | W i r e l e s s S e n s o r N e t w o r k
Hình 27. Khởi tạo RPL DAG
Khối chương trình thiết lâ ̣p kết nối UDP giữa server và client (nếu có):
40 | W i r e l e s s S e n s o r N e t w o r k
Hình 29. Nhâ ̣n gói tin TCP/IP
41 | W i r e l e s s S e n s o r N e t w o r k
khối 1 bao gồm viê ̣c đă ̣t tên project và đường dẫn, khối 2 dùng để khai báo mô ̣t số giá trị
sử dụng trong chương trình chính.
Hình 31. Phần chương trình khai báo tên project và sourfiles
Có thể thấy, ở trong makefile đã định nghĩa sẵn PREFIX=aaaa::1/64, WEBSERVER=1
(tức là sẽ chạy internal webserver) và các đường dẫn liên quan tới tunslip6.
42 | W i r e l e s s S e n s o r N e t w o r k
5.4 httpd-simple.c
🡪 “Tạo trang chuyển tiếp máy chủ web đơn giản đến luồng protothread”
🡪 Mục đích của chương trình này là để chạy web server nhỏ và nhận HTTP request
từ udp-server node
Đầu tiên, cần thêm file từ “httpd-simple.h” cũng như định nghĩa về một số biến sẽ sử
dụng như URLCONV (0), STATE_OUTPUT (1), …
Hình 33
43 | W i r e l e s s S e n s o r N e t w o r k
Hình 34. Mô ̣t số hàm được sử dụng
44 | W i r e l e s s S e n s o r N e t w o r k
Hình 35
45 | W i r e l e s s S e n s o r N e t w o r k
Hình 36
46 | W i r e l e s s S e n s o r N e t w o r k
Hình 37
Hình 38
Sau đó, filename URL ở trên sẽ được publish lên log file của web server, đưa vào trạng
thái sẵn sàng (STATE_OUTPUT = 1)
Hình 39
47 | W i r e l e s s S e n s o r N e t w o r k
Hàm handle_connection kiểm tra trạng thái sẵn sàng trong protothread handle_input để
có thể tiếp tục chạy protothread handle_output
Hình 40
Hàm httpd_init được sử dụng để nghe port TCP, với số của port là số sau khi chuyển đổi
số 16 bit từ số byte host theo thứ tự sang số byte mạng (host byte order to network byte
order), đồng thời kích hoạt chuyển đổi URL sang filename.
Hình 41
Hàm httpd_appcall chứa structure xử lý kết nối UIP, kiểm tra các trường hợp nếu kết
nối bị gián đoạn, quá thời gian quy định hoặc không có để giải phóng bộ nhớ hoặc đưa
vào trạng thái chờ kết nối để thử lại cho tới khi kết nối được, và ghi lại tất cả vào log file
nếu có lỗi xuất hiện và reset lại webserver (như lỗi “không có vùng nhớ” (no memory
block) và lỗi “quá thời gian” (timeout))
48 | W i r e l e s s S e n s o r N e t w o r k
Hình 42
49 | W i r e l e s s S e n s o r N e t w o r k
5.5 slip-bridge.c
🡪 Chứa hàm gọi lại (callback function – hàm được truyền vào một hàm khác như
một tham số đầu vào và được gọi kích hoạt bên trong hàm này) để xử lý một yêu cầu kết
nối SLIP.
Hình 43
Hàm init khởi tạo trình điều khiển SLIP và cổng RS232 với baudrate được set ở 115200,
đồng thời gọi hàm slip_input_callback với nhiệm vụ phát hiện gateway node trên giao
diện SLIP.
Hình 44
Hàm output so sánh đoạn tin vừa gửi có khớp với đoạn tin có trong bộ đệm hay không,
tránh việc gói tin bị trả ngược qua SLIP nếu gói tin đó đã được nhận qua SLIP, nếu có thì
50 | W i r e l e s s S e n s o r N e t w o r k
đưa ra thông báo: “Điểm đến nằm ngoài liên kết nhưng không có tuyến đường”, còn
không thì sẽ gửi đi gói tin IP từ bộ đệm uIP bằng SLIP.
Hàm slip_input_callback chịu trách nhiệm nhận các packet thông qua SLIP, tạo prefix
và kiểm tra hoạt động, ngoài ra còn lưu lại đoạn tin đã nhận qua SLIP để tránh gửi ngược
51 | W i r e l e s s S e n s o r N e t w o r k
về nguồn phát nếu như không tìm thấy tuyến đường.
Hình 45
52 | W i r e l e s s S e n s o r N e t w o r k
5.6 SLIP (Serial Line Internet Protocol – Giao thức Internet nối
tiếp)
Giao thức SLIP được quy định bởi tiêu chuẩn RFC 1055. SLIP là một giao thức
rất đơn giản, được sử dụng để truyền các gói của lớp mạng. Được thiết kế để hoạt động
trên các cổng nối tiếp (Serial ports) và kết nối bộ định tuyến (Router connections), cho
phép 2 máy tính kết nối với nhau qua đường tuần tự (RS232), dùng để truy cập từ xa
hoặc trao đổi thông tin giữa hai mạng.
SLIP sửa đổi sơ đồ dữ liệu TCP / IP tiêu chuẩn bằng cách
• Chia một gói dữ liệu IP thành từng byte.
• Thêm vào một byte "END" (có mã ASCII là “192”) vào byte cuối hoặc thêm byte
END vào trước byte đầu tiên để phân biệt ranh giới datagram trong luồng byte.
• Nếu byte END xuất hiện trong dữ liệu, chuỗi hai byte ESC, ESC_END sẽ được
gửi thay thế.
• Nếu byte ESC xuất hiện trong dữ liệu, chuỗi hai byte ESC, ESC_ESC sẽ được gửi
thay thế.
• Các biến thể của giao thức có thể bắt đầu hoặc kết thúc các gói tin bằng END.
• Ký tự ESC của SLIP không giống với ký tự ESC trong ASCII. Cả hai đều thực
hiện một thao tác "thoát" nhưng không liên quan đến nhau
Tóm lại, quy trình sửa đổi của SLIP được biểu diễn như hình sau:
Hình 46
53 | W i r e l e s s S e n s o r N e t w o r k
Ký tự “END” (mã hex C0h) ; byte nhiễu (màu đỏ 03h)
SLIP đòi hỏi cấu hình cổng nối tiếp gồm 8bit dữ liệu, không có tính chẵn lẻ, điều khiển
luồng bằng phần cứng EIA hoặc cài đặt UART ở chế độ CLOCAL.
Tuy nhiên, SLIP cũng có một số nhược điểm:
Chỉ truyền được gói IP, không truyền được các giao thức khác
Không có khả năng tự xác định được địa chỉ IP máy đối diện
Không có cơ chế tự sửa đổi, truyền không tốt khi đường truyền bị nhiễu
SLIP cũng không phải giao thức chuẩn của TCP/IP, tuy nhiên vẫn được dùng khá phổ
biến cho truy cập từ xa
54 | W i r e l e s s S e n s o r N e t w o r k
6. Mô phỏng
6.1 Tutorial về sử dụng Simulator (cooja)
6.1.1 Cài đặt InstantContiki 2.7
Contiki là một phần mềm khá dễ dàng để sử dụng, dễ Download và cài đặt.
Truy cập vào đường link https://sourceforge.net/projects/contiki/files/Instant
%20Contiki/
Download Contiki2.7, kích thước của phần mềm khoảng hơn 1GB. Khi
download xong, giải nén file zip.
Tiến hành cài đặt Contiki trên VMWare.
+ Boot Ubuntu. Tiến hành chạy Contiki2.7.vmx. Đợi cho máy ảo Ubuntu
Linux khởi động xong.
+ Login vào Ubuntu với password là user
Sau khi Contiki đã chạy, chúng ta sẽ tiến hành thao tác trên Cooja.
56 | W i r e l e s s S e n s o r N e t w o r k
Hình 49. Tạo New Simulator
Cửa số môi trường giả lập hiện ra, có những thành phần sau:
+ Network: hiện ra mạng lưới giả lập
+ Timeline: hiện ra tất cả các giao tiếp
+ Mote output: in ra tất cả các output
+ Notes: có thể ghi chú lại những gì cần thiết.
+ Simulation Control: chúng ta có thể có những lựa chọn start, pause, reload.
57 | W i r e l e s s S e n s o r N e t w o r k
Hình 50. Cửa sổ giả lập
Thêm mote vào mô hình giả lập
Trước khi giả lập mô hình mạng chúng ta cần phải thêm mote. Ta thực hiện
chuỗi thao tác sau:
Vào menu mote -> Add mote …-> Create new mote type… -> Sky mote…
(Tạo chế độ giả lập Skype mote)
58 | W i r e l e s s S e n s o r N e t w o r k
Hình 71. Tạo Sky mote
Tạo mote type:
Cửa sổ Create mode type hiện ra, chúng ta có thể đặt tên cho mote. Browse…
button để chọn ứng dụng example Contiki.
59 | W i r e l e s s S e n s o r N e t w o r k
Hình 52. Cửa sổ Create Mote Type
Tìm mô phỏng Border Router: Chúng ta truy câ ̣p vào đường link /contiki-
2.7/examples/ipv6/rpl-border-router.
Chọn file border-router.c. Click vào button Open chọn file.
60 | W i r e l e s s S e n s o r N e t w o r k
Hình 53. Chọn example Contiki
- Chạy ứng dụng Contiki: click vào button Compile. Trong quá trình compile,
output complile sẽ hiện trên cửa sổ.
61 | W i r e l e s s S e n s o r N e t w o r k
Hình 55. Kết quả sau khi compile
- Click vào button Create để hoàn tất quá trình tạo mote type.
- Thêm mote vào trình giả lập: Sau khi hoàn thành quá trình tạo mote type,
Cooja sẽ hỏi thêm mote vào trình giả lập, chúng ta thay đổi Number of new
motes sau đó nhấn vào button Add motes.
62 | W i r e l e s s S e n s o r N e t w o r k
Hình 56. Thêm mote
- Bắt đầu chạy giả lập: Sau khi Add motes ta sẽ thấy số node hiện ra trên cửa sổ
Network.
63 | W i r e l e s s S e n s o r N e t w o r k
Hình 57. Kết quả sau khi add motes
Tương tự, chúng ta truy câ ̣p vào đường link /contiki-2.7/examples/ipv6/rpl-
udp.
Chọn file udp-server.c. Click vào button Open chọn file. Compile, Create và
Add motes như trên. Ở đây ta lấy ví dụ 4 motes, linear positioning.
64 | W i r e l e s s S e n s o r N e t w o r k
Hình 58. Chọn example Contiki
65 | W i r e l e s s S e n s o r N e t w o r k
Hình 60. Thêm mote
66 | W i r e l e s s S e n s o r N e t w o r k
Hình 61. Kết quả sau khi add motes
Chọn 1 node bất kỳ, chọn More tools for border router -> Serial Socket
(SERVER). Ta sẽ nhâ ̣n được thông báo như hình dưới
67 | W i r e l e s s S e n s o r N e t w o r k
Hình 62. Serial Socket (SERVER)
Ta click vào button Start trong cửa sổ Simulator control để bắt đầu chạy giả lập.
Output sẽ hiện ra ở cửa sổ Mote output. Cửa sổ Network sẽ hiện ra giao tiếp trên
mạng. Cửa sổ Timeline sẽ hiện thời gian giao tiếp giữa các node cũng như địa
chỉ MAC của các node.
68 | W i r e l e s s S e n s o r N e t w o r k
Hình 63. Màn hình chạy giả lập
Để dừng tạm thời quá trình giao tiếp này ta có thể nhấn vào button Pause.
Hoàn thành: chúng ta đã hoàn thành quá trình giả lập giữa các node trong
Contiki
69 | W i r e l e s s S e n s o r N e t w o r k
6.2.2 Tutorial về Tunslip utility
Mở terminal, gõ câu lệnh: cd /contiki2.7/tools
Hình 64
70 | W i r e l e s s S e n s o r N e t w o r k
Hình 65
Thực hiê ̣n kết nối giữa RPL và máy chủ qua câu lê ̣nh: sudo ./tunslip6 -a
127.0.0.1 aaaa::1/64
71 | W i r e l e s s S e n s o r N e t w o r k
Hình 66
Nhâ ̣p password user , màn hình terminal hiển thị như hình bên dưới, thông báo
đã kết nối thành công.
72 | W i r e l e s s S e n s o r N e t w o r k
Hình 67. Kết nối thành công
Quay lại Cooja simulator, nhìn vào hô ̣p thoại Serial Socket, thông báo đã đổi
thành: Client connected: /127.0.0.1 sau khi kết nối
73 | W i r e l e s s S e n s o r N e t w o r k
Hình 68. Serial Socket (SERVER) sau khi kết nối
74 | W i r e l e s s S e n s o r N e t w o r k
7. Kiểm tra kết quả
Để kiểm tra kết nối của địa chỉ, ta dùng lê ̣nh PING. PING (Packet InterNet
Grouper) là mô ̣t câu lê ̣nh được sử dụng trên webtool IPv6 online, để kiểm tra xem
mô ̣t máy chủ cụ thể có thể truy câ ̣p được qua mạng IP hay không. Nó hoạt đô ̣ng bằng
cách gửi các gói “echo request” đến địa chỉ đích và chờ nhâ ̣n phản hồi “echo
response” của ICMP. Lê ̣nh PING sẽ cho ta biết thời gian phản hồi (được tính bằng
ms), kiểm tra nếu như có packet loss nào xảy ra và sẽ ghi lại tóm tắt thống kê khi
hoàn tất. Dưới đây là ví dụ minh họa cho mô phỏng ở trên.
Ta có thể kiểm tra kết nối của địa chỉ bằng lê ̣nh ping6 aaaa::212:7401:1:101
trong Terminal
75 | W i r e l e s s S e n s o r N e t w o r k
Hình 70. Kiểm tra kết nối
Kiểm tra bằng trình duyê ̣t web: Truy câ ̣p vào trình duyê ̣t web, nhâ ̣p địa chỉ của 1
node. Trình duyê ̣t sẽ hiển thị kết quả như bên dưới
Hình 71. Kiểm tra kết nối trên trình duyêṭ web
76 | W i r e l e s s S e n s o r N e t w o r k
77 | W i r e l e s s S e n s o r N e t w o r k