2.2. Các thuật toán định tuyến trong mạng ZigBee
2.2.3. Quan hệ nhiều-một – Many-to-one
Trong nhiều trƣờng hợp sử dụng, tồn tại một node trong mạng PAN, nó thu thập dữ liệu của tất cả thiết bị khác. Điều này có thể gây ra bởi có một thiết bị điều khiển tập trung hoặc một thiết bị thu thập thông tin. Nhƣ một node thu thập đƣợc gọi là tập trung hay tổng hợp. Nếu khơng có bất cứ một tối ƣu hóa nào, tất cả thiết bị trong mạng cần phải khởi tạo một RREQ để lấy thông tin định tuyến hƣớng tới bộ tập trung. Chính vì thế, đặc tả ZigBee đã định nghĩa một mơ hình đinh tuyến tối ƣu cho những trƣờng hợp đó gọi là đinh tuyến nhiều-một many-to-one. Điều đó có nghĩa, bộ tập trung khởi tạo gói tin định tuyến, nó sẽ đƣợc quảng bá trong mạng.
Trên tuyến đƣờng định tuyến gói tin, mỗi thiết bị định tuyến của mạng sẽ tạo một bảng mục tƣơng ứng tới bộ tập trung.
2.3. Thuật toán định tuyến theo yêu cầu – AODV
2.3.1. Tổng quan
Định tuyến là một cơ chế rất quan trọng của tầng mạng ZigBee. Nếu cơ chế định tuyến làm việc không hiệu quả sẽ ảnh hƣởng tới hiệu năng của toàn bộ mạng. Cơ chế định tuyến hay thuật tốn định tuyến và tầm ảnh hƣởng của nó bị chi phối bởi nhiều yếu tố, ví dụ nhƣ: kích thƣớc mạng, cấu trúc của mạng, tài nguyên của mạng.
ZigBee sử dụng cơ chế, thuật toán AODV cho việc định tuyến bên trong mạng lƣới của nó – mesh network. Phần phức tạp nhất trong cơ chế AODV chính là tìm ra tuyến – route discovery.
Tìm tuyến là một cơ chế của tầng mạng ZigBee để thu thập thông tin định tuyến từ mạng. Những thiết bị chƣa biết trong mạng, chƣa có trong bảng định tuyến thiết bị, sẽ chờ đợi một gói tin RREQ để cho phép truyền thơng qua bƣớc nhảy bổ sung.
Đặc tả ZigBee mơ tả tìm ra định tuyến nhƣ sau, khám phá định tuyến đƣợc khởi tạo bằng cách gửi một tin RREQ tại thiết bị gốc. Gói tin RREQ sẽ đƣợc quảng bá tới tất cả thiết bị. Mỗi thiết bị nhận đƣợc gói tin RREQ sẽ thêm vào gói tin những thơng tin nhƣ giá trị chi phí của lần truyền cuối cùng. Hơn nữa, thiết bị tìm kiếm một mục trong bảng định tuyến tƣơng ứng với địa chỉ nguồn và định danh RREQ trong gói tin. Nếu tồn tại một mục phù hợp trong bảng và chi phí cao hơn so với chi phí mới tìm đƣợc, bảng định tuyến sẽ đƣợc cập nhật hoặc đƣợc tạo tƣơng ứng với mục RTE đó.
Các vấn đề chính trong thuật tốn:
+ Quảng bá gói tin tìm đƣờng khi cần thiết
+ Khuếch tán thông tin khi mạng cục bộ thay đổi tới những node lân cận, những node cần thơng tin này.
2.3.2. Tìm đường - Path Discovery
Quá trình phát hiện đƣờng đƣợc khởi tạo khi một node nguồn cần kết nối tới một node khác mà nó chƣa có thơng tin định tuyến tới node đó trong bảng định tuyến. Mỗi node trong nó sẽ ln chứa thông tin riêng biệt về: thứ tự node – node sequence number và định danh quảng bá – broadcast_id. Node nguồn sẽ khởi tạo việc tìm đƣờng bằng cách quảng bá gói tin u cầu định tuyến tới các hàng xóm của nó. Gói tin yêu cầu định tuyến–RREQ đó bao gồm các thông tin: <source_addr, source_sequence_#, broadcast_id, dest_id, dest_sequence_#, hop_cnt> <source_addr, broadcast_id>: tạo nên một khóa duy nhất cho gói tin RREQ, nó phân biệt gói tin RREQ này với gói tin RREQ khác. Thông tin broadcast_id sẽ đƣợc tăng khi node nguồn yêu cẩu thêm một RREQ mới. Mỗi node lân cận xử lý gói tin RREQ bằng cách gửi lại một gói tin RREP tới node nguồn hoặc quảng bá tiếp gói tin RREQ tới lân cận của nó sau khi đã tăng chỉ sổ hop_cnt. Lƣu ý rằng, một node trong mạng có thể nhận đƣợc nhiều gói tin quảng bá yêu cầu định tuyến giống nhau từ những lân cận khác nhau của nó. Nếu một node trung gian nhận đƣợc một gói tin RREQ, nếu gói tin đó nó đã nhận đƣợc bằng cách so sánh trƣờng địa chỉ nguồn – source_addr và broadcast_id, nó sẽ loại bỏ gói tin dƣ thừa đó và sẽ khơng quảng bá tiếp gói tin đó.
Nếu node lân cận đó khơng thể đáp ứng gói tin RREQ, nó sẽ theo dõi thơng tin của gói tin đó bằng cách lần ngƣợc lại đƣờng đi của gói tin, các thơng tin sau vào gói tin RREP: địa chỉ đích, địa chỉ nguồn, định danh quảng bá – broadcast_id, thời gian cho phép của gói tin, số thứ tự của node nguồn.
Hình 2.7 : Mơ tả q trình tìm đƣờng – path discovery
2.3.3. Thiết lập đường ngược
Gói tin RREQ có 2 số thứ tự đó là: số thứ tự nguồn, và số thứ tự đích cuối cùng. Số thứ tự của nguồn đƣợc sử dụng để duy trì thơng tin định tuyến về node nguồn luôn đƣợc cập nhật và số thứ tự đích chỉ ra cách định tuyến mới nhất tới node đích trƣớc khi nó đƣợc chấp nhận bới node nguồn.
Gói tin RREQ sẽ phải đi từ node nguồn tới nhiều node đích khác nhau, nó sẽ tự động ghi lại con đƣờng để trở lại node nguồn. Để ghi lại con đƣờng đó, một node sẽ ghi lại địa chỉ node lân cận, từ nơi mà nó nhận đƣợc bản sao đầu tiên của gói tin RREQ. Định tuyến đƣờng ngƣợc này sẽ đƣợc duy trì trong một khoảng thời gian đảm bảo để gói tin RREQ đi qua mạng và thực hiện một trả lời tới nơi gửi nó.
2.3.4. Thiết lập đường tiến
Cuối cùng, gói tin RREQ có thể đến node nào đó, node đó có thể là node đích của nó hoặc nằm trên con đƣờng tới node đích. Đầu tiên node đó sẽ kiểm tra xem gói tin RREQ nhận đƣợc thơng qua liên kết hai chiều bi-directional link. Nếu node trung gian này có chứa thơng tin định tuyến tới node đích nó sẽ tiến hành các bƣớc kiểm tra bằng cách so sánh số thứ tự đích trong bảng định tuyến của node hiện tại với số thứ tự đích trong gói tin RREQ. Nếu số thứ tự đích lƣu trữ trong gói tin RREQ lớn hơn số thự tự đích lƣu trong bảng định tuyến của node hiện thời thì node
hiện thời không phải sử dụng thơng tin định tuyến của nó để đáp ứng gói tin RREQ. Thay vào đó, node hiện thời sẽ tiếp tục quảng bá gói tin RREQ này tới các node lân cận của nó. Node trung gian hiện thời chỉ thực hiện việc phản hồi lại gói tin RREQ chỉ khi nó chứa thơng tin định tuyến mà ở đó số thứ tự đích của nó lớn hơn hoặc bằng số thứ tự đích chứa trong gói tin RREQ. Nếu nó chứa thơng tin định tuyến tới node đích, và nếu gói tin RREQ chƣa đƣợc xử lý trƣớc đó, node hiện thời sẽ thực hiện một gói tin RREP tới lân cận của nó, nơi mà phát gói tin RREQ này cho nó. Một gói tin RREP thì bao gồm các thơng tin: <địa chỉ nguồn, địa chỉ đích, số thứ tự đích, số bƣớc nhảy, thời gian sống của gói tin>.
Tại thời điểm một gói tin quảng quá tới đƣợc một node, node mà cung cấp thơng tin đinh tuyến tới node đích, một con đƣờng ngƣợc trở lại node nguồn, node mà phát đi gói tin RREQ cũng đƣợc thành lập. Khi mà gói tin RREP quay trở lại node nguồn, nơi phát ra gói tin RREQ, mỗi node dọc theo con đƣờng đó sẽ thiết lập con trỏ tới node đó, lƣu trữ và cập nhật thông tin về thời gian trễ cho bảng định tuyến tới node nguồn và node đích và ghi lại số thứ tự cuối cùng của đích cần đến.
Một node mà không thuộc con đƣờng ngƣợc sẽ bị trễ thời gian trong khoảng 3 giây và sẽ bị xóa con trỏ ngƣợc.
Một node khi nhận đƣợc một gói tin RREP lần đầu tiên nó sẽ lan truyền gói tin này tới node nguồn hay là node mà nó nhận đƣợc gói tin RREQ và cứ vậy cho tới node nguồn cuối cùng. Nếu nó nhận đƣợc nhiều hơn một gói tin RREQ nó sẽ phải cập nhật thông tin định tuyến và chỉ truyền gói tin RREQ nếu gói tin đó có chứa thơng tin số thứ tự đích lớn hơn số thứ tự đích của gói tin RREQ trƣớc đó hoặc có cùng số thứ tự đích nhƣng có số bƣớc nhảy nhỏ hơn. Nó sẽ cấm tất cả các gói tin RREP khác mà nó nhận đƣợc, điều này đảm bảo số lƣợng gói tin RREP đƣợc truyền tới nguồn trong khi vẫn đảm bảo thông tin định tuyến tốt nhất. Node nguồn có thể bắt đầu truyền dữ liệu ngay khi nhận đƣợc gói tin RREP đầu tiên và có thể cập nhật thơng tin định tuyến nếu tìm đƣợc thơng tin định tuyến tốt hơn.
2.3.5. Quản lý bảng định tuyến
Bên cạnh thông tin về số thứ tự của nguồn và số thứ thứ tự của đích, một số thơng tin có ích khác cũng đƣợc lƣu trữ trong bảng thông tin định tuyến và đƣợc gọi là trạng thái mềm – soft state. Một liên kết tới thông tin định tuyến về con đƣờng ngƣợc đƣợc gọi là: thời gian hết hiệu lực yêu cầu định tuyến – route request expiration timer. Mục đích của bộ đếm thời gian này chính là làm sạch con đƣờng định tuyến ngƣợc từ node phát gói tin RREP về node nguồn, nó đảm bảo những node khơng nằm trên con đƣờng đó đƣợc loại bỏ. Bộ đếm thời gian này phụ thuộc vào các yếu tố nhƣ kích thƣớc của mạng. Một biến số quan trọng trong bảng định tuyến đƣợc đề cập tới đây là route-caching-timeout, hoặc là có thể hiểu là thời gian sau khi một định tuyến đƣợc cân nhắc để loại bỏ.
Trong bảng định tuyến cũng lƣu trữ địa chỉ của các lân cận tích cực , các lân cận đƣợc cân nhắc là tích cực nếu nó có thể khởi phát hoặc chuyển tiếp một gói tin tới đích trong một khoảng thời gian cho phép. Thơng tin địa chỉ này sẽ đƣợc duy trì chính vì vậy tất cả các lân cận tích cực sẽ thơng báo nếu đƣờng liên kết dọc theo tới node đích bị gẫy.
Mỗi một phần tử trong bảng định tuyến sẽ chứa các thông tin sau: đích, bƣớc nhảy tiếp theo, số bƣớc nhảy, số thứ tự của node đích, lân cận tích cực cho định tuyến, thời gian hiệu lực cho phần tử bảng định tuyến.
Mỗi khi một phần tử trong bảng định tuyến đƣợc sử dụng để truyền dữ liệu từ nguồn tới đích, thời gian trễ cho phần tử này sẽ đƣợc tính lại từ thời gian hiện tại cộng thêm thời gian trễ định tuyến tích cực.
2.3.6. Bảo trì đường dẫn
Việc di chuyển của các node khơng nằm trên đƣờng dẫn tích cực khơng ảnh hƣởng tới việc định tuyến tới đích. Đƣờng dẫn tích cực là đƣờng dẫn từ node nguồn tới node đích. Nếu node nguồn di chuyển trong phiên truyền dữ liệu, nó có thể khởi tạo lại việc tìm đƣờng để tìm ra một định tuyến mới tới đích. Ngay cả khi node đích
di chuyển hoặc một vài node trung gian trên đƣờng dẫn tích cực di chuyển thì một gói tin RREP đặc biệt sẽ đƣợc gửi tới node nguồn. Theo chu kỳ, một thông điệp hello có thể đƣợc sử dụng đảm bảo liên kết đối xứng giữa nguồn và đích một cách tốt nhất, mục đích của thơng điệp là phát hiện hiện lỗi trên đƣờng liên kết. Bên cạnh việc kiểm tra đƣờng liên kết bằng phát đi thơng điệp hello, cịn có 1 cách khác nhƣ là 1 sự thay thế đó là việc sử dụng LLACK – Link Layer Ack. Một liên kết lỗi sẽ đƣợc thông báo nếu cố gắng chuyển tiếp một gói tin tới bƣớc chuyển lỗi kết tiếp.
Một trong bƣớc nhảy kế tiếp không thể kết nối, node trƣớc đó sẽ phải lan truyền một gói tin RREP khơng mong muốn với số thứ tự đã đƣợc làm mới (số thứ tự phải là số lớn hơn số trƣớc đó) và số bƣớc nhảy sẽ chuyển thành vô cùng tới tất cả các node lân cận. Các node phía sau sẽ chuyển tiếp gói tin đó tới các lân cận của nó và cứ thế. Quá trình này sẽ tiếp tục đến khi tất cả node nguồn tích cực đƣợc thơng báo. Nó kết thúc bởi vì thuật tốn AODV chỉ duy trì các định tuyến lặp miễn phí – loop-free và định tuyến đó chỉ có hữu hạn các node trong mạng. Khi nhận đƣợc thông báo của một liên kết hỏng, node nguồn có thể khởi động lại q trình tìm đƣờng nếu nó vẫn muốn định tuyến tới đích. Để xác định định tuyến đó vẫn cịn cần thiết, một node có thể kiểm tra các định tuyến đƣợc sử dụng gần đây cũng nhƣ kiểm tra khối điều khiển giao thức cấp trên để xem liệu kết nối đó vấn đƣợc mở bằng cách sử dụng một đích đƣợc chỉ định. Nếu node nguồn hoặc bất kỳ một node thuộc định tuyến trƣớc đó quyết định sẽ xây dựng lại định tuyến tới node đích, nó sẽ gửi một gói tin RREQ với số thứ tự đích lớn hơn số thứ tự đích trƣớc đó để chắc chắn một định tuyến mới sẽ đƣợc xây dựng lại và có thể tồn tại và nếu khơng có một node nào trả lời gói tin RREQ đó thì mặc định định tuyến cũ sẽ đƣợc sử dụng nhƣ một định tuyến chắc chắn.
2.3.7. Quản lý kết nối cục bộ
Một node có thể biết thông tin về lân cận của nó bằng một trong hai cách. Bất cứ khi nào một node nhận đƣợc thông tin quảng quá từ lân cận, nó sẽ cập nhật thơng tin của lân cận đó đảm bảo nó ln lƣu trữ thơng tin của lân cận. Trong
trƣờng hợp một node khơng gửi bất kỳ một gói tin nào tới các lân cận tích cực dƣới nó – downstream bên trong phạm vi hello_interval, nó sẽ quảng bá tới lân cận của nó một thơng điệp hello (một gói tin RREP đặc biệt) nó chứa thơng tin định danh và số thứ tự của node. Số thứ tự của node không thay đổi với thơng điệp hello trong q trình truyền tin này. Thơng điệp hello này bị ngăn ngừa không đƣợc quảng bá lại bên ngoài các lân cận của node bởi vì nó chỉ đƣợc phép sống trong một khoảng thời gian. Lân cận nhận đƣợc gói tin cập nhật thơng tin cục bộ của node. Việc nhận một quảng bá hoặc là nhận một thông điệp hello từ một lân cận mới hoặc là lỗi khi nhận allowed_hello_loss liên tiếp thơng điệp hello từ node trƣớc đó trong lân cận là dấu hiệu chỉ ra rằng liên kết cục bộ đã bị thay đổi. Lỗi khi nhận thông điệp hello từ lân cận khơng tích cực sẽ khơng kích hoạt bất kỳ hành động của giao thức. Nếu những thông điệp hello không đƣợc nhận từ những bƣớc nhảy kế tiếp dọc theo đƣờng dẫn tích cực, lân cận tích cực sử dụng bƣớc nhảy kế tiếp sẽ đƣợc gửi thông báo rằng đƣờng liên kết bị lỗi.
Quản lý thông tin kết nối cục bộ với thơng điệp hello có thể đƣợc sử dụng để chắc chắn rằng chỉ những node với đƣờng liên kết hai chiều đƣợc cân nhắc là những lân cận. Với mục đích này thì mỗi thơng điệp hello gửi bởi một node sẽ liệt kê tất cả những node là lân cận. Mỗi node sẽ kiêm tra để chắc chắn rằng nó chỉ sử dụng định tuyến tới lân cận của nó khi mà nó có thể nghe đƣợc thơng điệp hello từ node đó. Để tiết kiệm băng thơng cục bộ, việc kiêm tra nhƣ vậy chỉ khi mà các node đã đƣợc cấu hình rõ ràng.
2.4. Thuật tốn hình cây
2.4.1. Tổng quan
Thuật tốn hình cây là giao thức của tầng mạng và tầng datalink, giao thức này sử dụng gói tin “trạng thái kết nối” để định dạng một mạng hình cây đơn, cũng nhƣ một mạng hình cây mở rộng. Loại mạng này cơ bản là một loại mạng có tính chất tự tổ chức và tự hỗ trợ để hạn chế lỗi mạng một mức độ lỗi cho phép, đặc biệt hơn do đây là một loại mạng có tính chất tự tổ chức nên nó cũng có thể tự sửa chữa
khi gặp sự cố ở một node mạng nào đó. Các node mạng chọn một node làm gốc cây và tạo các nhánh cây một cách tự do. Sau đó cách nhánh cây tự phát triển kết nối tới