25/05/2018, 10:08

Các giao thức điều khiển lỗi

Phần kế tiếp chúng ta xem xét một số giao thức cơ bản được sử dụng nhiều trong việc điều khiển lỗi. Các giao thức này được xây dựng dựa trên các giả định sau: Chúng ta có máy tính A muốn gởi dữ liệu cho máy tính B. Luôn ...

Phần kế tiếp chúng ta xem xét một số giao thức cơ bản được sử dụng nhiều trong việc điều khiển lỗi. Các giao thức này được xây dựng dựa trên các giả định sau:

  • Chúng ta có máy tính A muốn gởi dữ liệu cho máy tính B.
  • Luôn luôn có đủ dữ liệu cho máy A gởi đi
  • Các giao diện giao tiếp với tầng mạng và tầng vật lý đã được định nghĩa chuẩn.
  • Bên nhận thông thường thực hiện việc chờ đợi một sự kiện nào đó phát sinh bằng cách gọi hàm wait_for_event().

Các giao thức được trình bày dưới dạng các chương trình viết bằng ngôn ngữ c. Chúng sử dụng các định nghĩa trong tập tin protocol.h có nội dung như sau:

Giao thức truyền đơn công không ràng buộc (Unrestricted Simplex Protocol)

Giao thức truyền đơn công dừng và chờ (Simplex Stop-and-wait Protocol)

Giao thức truyền đơn công cho kênh truyền có nhiễu (Simplex Protocol for Noisy Channel )

Giả sử ta bỏ đi giả thuyết kênh truyền không có lỗi. Trong trường hợp này, với các kỹ thuật xử lý lỗi (Parity check, CRC), bên nhận có thể phát hiện ra được các khung bị lỗi. Tuy nhiên, điều gì sẽ xảy ra nếu khung gởi đi bị mất, không đến được nơi nhận. Khi đó sẽ dẫn đến tình trạng như sau:

  • Người gởi không biết được khung có đến nơi nhận tốt hay không.
  • Giải pháp là yêu cầu người nhận gởi các khung báo nhận thông báo về tình hình các khung bị lỗi.
  • Các khung báo nhận có thể bị mất.
  • Giải pháp: Mỗi khi gởi một khung đi, Bên gởi sẽ thiết lập một bộ đếm thời gian. Nếu sau một khoảng thời gian qui định mà không nhận được khung báo nhận, bên gởi sẽ gởi lại các khung không được báo nhận
  • Bên nhận không phân biệt được các khung trùng lắp do bên gởi gởi lại.
  • Giải pháp: Mỗi khung sẽ có một số thứ tự để phân biệt lẫn nhau. Số thứ tự này sẽ được tăng dần cho đến một giá trị cực đại sau đó lại quay về giá trị 0. Trong ví dụ sau, số thứ tự có giá trị cực đại là 1. Như vậy ta chỉ sử dụng 2 giá trị là 0 và 1 để đánh số thứ tự cho khung.

0