Cửa sổ trượt (Sliding window)

Một phần của tài liệu Chương 5: Cơ sở của giao thức potx (Trang 25 - 29)

Với cơ chế Stop-and-Wait, bản chất của vấn đề là tại một thời điểm chỉ một frame được truyền, do đó trong trường hợp độ dài liên kết lớn hơn độ dài của frame thì kết quả thật sự không hiệu quả. Với cơ chế cửa sổ trượt thì hiệu suất sẽ được cải thiện bằng việc cho phép nhiều frame có thể truyền đồng thời.

Nguyên tắc hoạt động của cơ chế cửa sổ trượt như sau: hai trạm A và B được kết nối với nhau theo liên kết truyền song công. Trong đó trạm A sẽ là nơi gửi các frame mà không cần đợi tín hiệu báo nhận ACK, trạm B sẽ cấp phát bộ nhớ đệm buffer và nhận frame. Các frame sẽ được gắn nhãn tuần tự, B sẽ báo nhận frame bằng cách gửi đi một tín hiệu báo nhận chứa số tuần tự của frame sẽ nhận tiếp theo (Tín hiệu này báo rằng B đã sẵn sàng nhận frame tiếp theo với số tuần tự đưa ra).

Ví dụ: B nhận 2 frame là 2 và 3  B sẽ báo nhận với số tuần tự là 4 (nghĩa là B đã nhận được 2 và 3)

Trong khi đó, A phải duy trì một danh sách số tuần tự các frame mà nó đã gửi, và B duy trì một danh sách các số tuần tự mà nó đã sẵn sàng nhận. Số tuần tự phụ thuộc vào giới hạn trường của mỗi frame (với trường số tuần tự có kích thước =k bit thì số tuần tự là từ 0 đến 2k-1). Mỗi danh sách này có thể truyền qua của sổ các frame. Thao tác trên được hiểu là có chế điều khiển lưu lượng cửa sổ trượt.

Hình trên mô tả cơ chế cửa sổ trượt dùng 3 bit số tuần tự, do đó các frame được đánh số tuần tự từ 0 đến 7, và sau đó số tương tự được sử dụng lại cho các gói tin tiếp theo. Hình chữ nhật lớn (là cửa sổ) thể hiện các gói tin có thể được gửi: trong hình, trạm nguồn có thể truyền 5 frame bắt đầu với frame 0. Mỗi khi một frame được gửi cửa sổ này co ngắn lại, và mỗi khi nhận được một tín hiệu báo nhận (ACK) thì cửa sổ được tăng lên. Các frame đã được gửi nhưng chưa được báo nhận sẽ lưu trong bộ nhớ đệm, trạm phát sẽ phải lưu các frame này để trong trường hợp có thể phải truyền lại. Kích cỡ cửa sổ thực tế không nhất thiết phải lớn nhất có thể như độ dài các số tuần tự. Ví dụ: dùng 3 bit số tuần tự thì có thể cấu hình kích cỡ cửa sổ là 4 cho các trạm dùng điều khiển lưu lượng cửa sổ trượt.

Hình trên thể hiện kích cỡ trường số tuần tự là 3 bit và kích cỡ cửa sổ lớn nhất chứa được 7 frame. Bắt đầu A và B đều có cửa sổ chỉ ra A có thể truyền 7 frame bắt đầu từ 0 (F0).

Sau khi A truyền 3 frame (F0,F1,F2) không có báo nhận, A thu nhỏ cửa sổ lại còn 4 frame và lưu 3 bản copy của 3 frame đã truyền. Cửa sổ này thể hiện A có thể truyền 4 frame, bắt đầu với frame số 3.

B sau đó truyền một tín hiệu RR 3 (Receive Ready) với ý nghĩa đã nhận được tất cả các frame đến frame số 2 và sẵn sàng nhận frame số 3, thực tế thì B đã sẵn sàng nhận 7 frame bắt đầu với frame số 3. Với tín hiệu báo nhận này, A trở lại trạng thái cho phép truyền 7 frame và bắt đầu với frame 3, và do đó A huỷ bộ nhớ đệm đã lưu 3 frame vì nó đã được báo nhận.

A tiếp tục truyền các frame F3,F4,F5,F6. B trả lại tín hiệu RR4 để báo đã nhận được F3, và chấp nhận việc truyền F4 mà không cần phải báo nhận F2, vì B đã báo tín hiệu nhận và A đã truyền F4,F5,F6. Và do đó A chỉ có thể mở cửa sổ của nó để cho phép truyền 4 frame bắt đầu với F7.

Kỹ thuật đã mô tả trên cung cấp một dạng điều khiển lưu lượng thực sự, vì trạm thu chỉ phải điều tiết 7 frame (trừ frame mà nó báo nhận). Hầu hết các giao thức cũng cho phép một trạm cắt đứt lưu lượng các frame đến từ trạm khác bằng việc gửi một tín hiệu RNR (Receive Not Ready) để ngăn việc truyền tiếp các frame. Theo cách đó thì RNR5 có nghĩa đã nhận được tất cả các frame đến 4 và không chấp nhận thêm nữa. Để khôi phục hoạt động thì một trạm cần gửi tín hiệu thông báo bình thường để mở lại cửa sổ.

Điều khiển lưu lượng cửa sổ trượt có khả năng hữu ích hơn điều khiển lưu lượng Stop-and-Wait. Vì nó đã xử lý như một đường ống (pipeline) để có thể lấp đầy frame trên đường truyền. Điều này hoàn toàn tương phản với Stop-and-Wait là tại một thời điển chỉ có 1 frame được truyền trong ống trên đường truyền

Một phần của tài liệu Chương 5: Cơ sở của giao thức potx (Trang 25 - 29)