Các phương pháp kiểm soát luồng dữ liệu thông dụng

Một phần của tài liệu Bài Giảng Mạng Máy Tính (Trang 86 - 91)

2. Kiểm soát luồng dữ liệu

2.1. Các phương pháp kiểm soát luồng dữ liệu thông dụng

2.1.1. Phương pháp giới hạn tải chung

Tải được hiểu là số lượng PDU (Protocol Data Unit) được lưu chuyển trong mạng tại một thời điểm nào đó. Mục tiêu của phương pháp này là tìm cách duy trì tổng số PDU được lưu chuyển trong mạng luôn luôn nhỏ hơn một giá trị giới hạn (ngưỡng) N nào đó. Giá trị N sẽ đưọc xác định trước căn cứ vào khả năng tài nguyên cũng như kinh nghiệm hoạt động của mạng. Để làm được điều đó, cấu tạo ra N “giấy thông hành” trong mạng, mỗi PDU muốn vào mạng phải có

“giấy thông hành” và trước khi ra khỏi mạng hoặc đến đích thì phải trả lại “giấy thông hành” đó. Khái niệm “giấy thông hành” ở đây thực chất là một loại thẻ bài hoặc một vùng thông tin điều khiển đặc biệt, thậm chí chỉ cần 1 bit duy nhất gắn vào PDU. Khi khởi tạo mạng, người quản trị mạng sẽ căn cứ vào khả năng thực tế của các trạm để phân chia các “giấy thông hành” đó.

Để quản lý chặt chẽ số “giấy thông hành” được giao, ở mỗi trạm có thể cài đặt một cơ chế “cửa sổ” cho phép tại mỗi thời điểm chỉ có một số giới hạn các PDU được phép truyền đi.

Phương pháp giới hạn tải chung của mạng gặp khó khăn lớn nhất là phải xác định giá trị ngưỡng N sao cho hợp lý. Ngoài ra trong trường hợp dùng “giấy thông hành” thì phải dự kiến trước cách xử lý hiện tượng mất hoặc trùng lặp

“giấy thông hành” do một nguyên nhân nào đó

2.1.2. Phương pháp phân tán chức năng kiểm soát cho các trạm

Phương pháp này không yêu cầu duy trì một giới hạn cho tải chung của mạng mà giao cho các trạm tự kiểm soát luồng dữ liệu đi qua dựa trên khả năng tài nguyên cục bộ của chúng. Tài nguyên dùng để chuyển một PDU (hoặc các PDU của cùng một thông báo) được cấp phát trước để tránh ùn tắc tại các trạm. Việc cấp phát trước này thường được thực hiện theo các liên kết logic giữa các thực thể truyền thông theo khái niệm OSI. Ví dụ khi thiết lập một liên kết logic giữa hai thực thể tầng mạng, hàm dịch vụ NCONNECT.request đảm nhiệm công việc này sẽ đăng ký các gói tin theo liên kết đó. Ở hai đầu của mỗi liên kết như vậy cũng có thể cài đặt có chế “cửa sổ” để điều hoà lượng gói tin đi qua.

Rõ ràng phương pháp này khá “đắt” về phương diện tài nguyên vì thường phải cấp phát trội lên để nâng cao thông lượng truyền.

2.1.3. Các thủ tục kiểm soát luồng dữ liệu bằng cửa sổ

Khi điều khiển xử lý tiếp nhận cần phải thực hiện thủ tục điều khiển lỗi tự động bằng cách tính trường lỗi gói tin thu được so với trường lỗi truyền qua nếu đúng thì trả lời ACK, nếu sai trả lời NAK hoặc bên thu không gởi tín hiệu ACK sau một thời gian để bên phát truyền lại gói tin hỏng. Kiểu điều khiển lỗi này gọi là yêu cầu lặp lại tự động (ARQ: Automatic Repeat Request).

Dựa trên các yêu cầu đối với cơ chể điều khiển luồng, người ta đã nghĩ ra hàng loạt các thuật toán giải quyết, tuy nhiên ta có thể phân chúng thành hai nhóm chính:

+ Điều khiển luồng bằng cửa sổ (Window Flow control)

+ Điều khiển luồng bằng phương pháp điều chỉnh tốc độ vào các gói (Input - Limiting Flow control)

Các thông số chủ yếu của cửa sổ là độ lớn của cửa sổ (w: số gói), số thứ tự P(S) của gói cuối cùng vừa được gởi đi và số thứ tự P(R) của gói mới nhận được sau cùng.

Ví dụ: Với w=8, P(R) =2 cho biết số lượng gói đã có ACK là 2, P(S)=6 cho biết số lượng truyền đi trong phạm vi cửa sổ, số gói X còn có thể truyền đi được là:

X = W - P(S) = 8 - 6 = 2 Số lượng gói đang đợi phúc đáp vào thời điểm này là:

Y = P(S) - P(R) = 6 - 2 = 4

Trường hợp chúng ta vừa xét gọi là cửa sổ cố định (Fixed Window), có nghĩa là cửa sổ sẽ không thay đổi vị trí chừng nào chưa nhận được ACK của gói cuối cùng trong cửa sổ gởi đi. Ta có thể thấy ngay rằng tốc độ truyền sẽ phụ thuộc một phần vào việc nhận đủ các thông tin ACK của cửa sổ.

Để nâng cao hiệu quả truyền, ta có thể sử dụng kĩ thuật cửa sổ trượt (Sliding Window) khi ta đặt kích thước cửa sổ là không thay đổi và sau mỗi lần nhận thông tin ACK cho một gói từ bên thu thì cạnh dưới của cửa sổ lại được tự động dịch lên một đơn vị (gói), cho phép gói tiếp theo được vào cửa sổ để truyền, trong trường hợp này đòi hỏi ta phải xác định kích thước tối ưu cho cửa sổ truyền.

Ý tưởng cơ bản của chiến lược cửa sổ trượt là làm giảm cường độ luồng tin đưa vào bên thu khi các phúc đáp bị chậm trễ. Chiến lược này còn cho bên thu một khả năng khống chế tốc độ bên phát bằng cách cố ý trễ (chậm gởi các ACK) khi thấy mình không đủ khả năng tiếp nhận các gói đến.

* Nguyên lý hoạt động của cửa sổ

Giả thiết rằng các lớp vật lý, liên kết dữ liệu và mạng là các quá trình độc lập có thể trao đổi với nhau thông qua phương thức truyền các gói thông tin qua lại.

Trường hợp đường truyền được coi là song công, và hai DTE A và B đều có thông tin muốn trao đổi với nhau. Như vậy cả A và B đều dùng chung một đường truyền dữ liệu nhưng theo hai hướng ngược nhau. Nếu chúng ta sử dụng phương thức ARQ trong hệ thống này thì các gói tin dữ liệu được hòa lẫn với các gói tin phúc đáp ở cả hai đầu A và B. Bên thu xem xét trường kiểu trong tiếp đầu gói tin để phân biệt đó là gói tin dữ liệu hay gói tin phúc đáp. Nhưng để nâng cao hơn nữa hiệu quả sử dụng mạng, người ta tìm cách tổ hợp hai gói tin này thành gói tin chung và khi cần thiết thì cũng có thể tách rời chúng ra được. Việc tổ hợp chúng lại được thực hiện như sau:

Khi bên thu nhận được gói tin dữ liệu của bên phát, nó không vội vàng gửi trả gói tin phúc đáp ngay mà hõan lại một thời gian, đợi cho gói dữ liệu tiếp theo được gởi từ trên lớp mạng của nó xuống, nó tạo khung cho gói này và đồng thời gắn luôn cho phúc đáp vào phần cuối của gói tin mới được tạo ra.

Như vậy thực chất có thể nói phúc đáp đã được đi xe không mất tiền, vì bên thu không phải tạo gói tin cho nó. Kĩ thuật làm trễ phúc đáp để móc nó vào gói tin dữ liệu tiếp theo gọi là piggyback.

Trở lại với kĩ thuật cửa sổ, ta biết rằng các gói tin gởi đi được đánh số thứ tự từ 0 tới cực đại là 2n-1 tương ứng với trường n bit. Cả bên phát và bên thu đều sử dụng cửa sổ trượt trong khi trao đổi thông tin, tuy nhiên bên phát có cửa sổ truyền (Sending Window) và bên thu cũng có cửa sổ thu (Receiving Window) tương ứng.

Trong trường hợp tổng quát hai cửa sổ này không nhất thiết phải có cùng chung giá trị cạnh trên và cạnh dưới trong cùng một thời điểm cũng như không nhất thiết phải có cùng chung kích thước. Các số thứ tự trong cửa sổ truyền cho biết số gói tin đã được gửi đi song chưa có phúc đáp. Do các gói tin này có thể bị thất lạc hoặc bị hư hỏng trong quá trình lưu thông nên chúng phải được lưu vào trong bộ nhớ của bên phát để khi cần có thể truyền lại.

Như vậy, nếu kích thước lớn nhất của cửa sổ là n thì nó phải có bộ nhớ đệm ít nhất là bằng kích thước n gói để lưu n gói chưa có phúc đáp. Còn ở bên thu, với kích thước cửa sổ là hữu hạn thì khi số lượng gói tin đến vượt quá giá trị của cửa sổ thì sao?

Cách đơn giản nhất và cũng thông dụng nhất là hủy các gói tin này và bắt buộc bên phát truyền lặp lại. Gói tin đến có số thứ tự trùng với cạnh dưới của cửa sổ thu sẽ được chấp nhận, dữ liệu của nó (gói) được chuyển lên lớp mạng và phúc đáp được tạo ra, đồng thời cửa sổ dịch lên một đơn vị. Cửa sổ thu, khác với cửa sổ phát, luôn luôn không đổi về giá trị. Trong quá trình này, bên thu luôn phải nhớ rằng nó phải nhận các gói tin theo đúng thứ tự mà bên phát truyền lên kênh.

* Thủ tục cửa sổ trượt (Sliding Window) có kích thước một bit với số thứ tự 3 bit

Giả thiết rằng bên phát luôn có gói tin để truyền, nói cách khác là lớp điều khiển dữ liệu luôn có sẵn các gói do lớp mạng cung cấp để thực hiện phép truyền liên tục. Chiến lược truyền lặp ARQ được kết hợp với cửa sổ để điều khiển số lượng gói tin lưu thông trên đường truyền giữa A và B. Mô hình ARQ đơn giản nhất là ARQ dừng và đợi, có nghĩa là sau khi bên phát đã truyền đi một gói tin, nó dừng lại và đợi phúc đáp của bên thu. Nhận được phúc đáp nó mới gửi tiếp gói tin tiếp theo. Như vậy, ta thấy ngay thực tế đây cũng chính là mô hình cửa sổ trượt với kích thước cửa sổ bằng 1.

Trao đổi bản tin với cửa sổ 1 bit như sau:

Máy A ở tầng 2 nhận gói tin từ tầng 3, tạo gói tin gởi đi. Khi gói tin này đến tầng 2 máy B, nó sẽ tự kiểm tra xem có bị lặp lại không. Nếu đúng là gói tin đang mong đợi thì nó được chuyển lên tầng 3 và cửa sổ dịch đi một nấc. Vùng ACK chứa số gói tin cuối đã được nhận không lỗi. Nếu số này trùng với số gói tin vừa gởi, bên phát sẽ lấy gói tin tiếp theo từ tầng mạng. Nếu số không đúng nó phải gởi lại gói tin cũ

Với thuật toán dùng cửa sổ có kích thước bằng 1, một phần lớn thời gian sau khi đã truyền xong một gói tin, A và B phải đợi phản hồi ngược lại mới có thể truyền tiếp được gói tin khác nên hiệu quả phép truyền không thể cao được.

Để có thể sử dụng kênh hiệu quả hơn cần có các thuật tóan khác với kích thước cửa sổ lớn hơn.

* Thủ tục cửa sổ trượt dùng kĩ thuật tạo đường ống (pipelining) Cho đến bây giờ ta cho rằng từ lúc gởi gói tin đến lúc nhận trả lời ACK là không đáng kể. Nếu xét đường kênh vệ tinh 50 Kbps với trễ lan truyền là 500 msec, ta gởi gói tin 1000 bit qua vệ tinh. Thời gian gởi gói tin là 20 msec, vậy sau 520 msec mới nhận được trả lời ACK. Bên phát phải chờ 96% thời gian (500/520), chỉ có 4% độ rộng băng được dùng.

Để nâng cao hiệu xuất đường truyền, ta không chờ trả lời ACK mà cứ phát tiếp. Ví dụ lấy w=26, khi gởi hết 26 gói tin thì t = 520 msec, tức là đúng lúc ACK cho gói số 0 đến. Kĩ thuật này gọi là pipelining (vận chuyển liên tục). Khi có gói tin ở đoạn giữa bị hỏng thì làm thế nào? Có bỏ những gói tin đúng tiếp sau nó không?

Có hai phương pháp giải quyết như sau

+ Gởi lại từ gói tin hỏng (go back n): Bên thu huỷ bỏ các gói tin tiếp theo gói tin bị hỏng. Bên phát gởi lại tất cả các gói tin chưa nhận ACK bắt đầu

CS phát A

CS thu B

0 1 2 4 3

5 6

7 0

1 2 4 3

5 6

7 0

1 2 4 3

5 6

7

0 1 2 4 3

5 6

7

0 1 2 4 3

5 6

7

0 1 2 4 3

5 6

7 0

1 2 4 3

5 6

7 0

1 2 4 3

5 6

7

(a)

Bắt đầu (b)

Sau khi gói thứ nhất được gửi

(c)

Sau khi nhận gói thứ nhất

(d) Sau khi nhận phúc đáp thứ nhất Hình 4.: Cửa sổ trược kích thước 1 bit và thứ tự 3 bit

từ gói tin bị hỏng. Phương pháp này lãng phí đường truyền vì phải gởi lại nhiều gói tin

+ Gởi lại từ gói tin hỏng có chọn lọc: cho phép bên thu lưu tòan bộ các gói tin đến nguyên vẹn đến sau gói tin hỏng trong bộ đệm của mình. Khi bên phát nhận thấy có sự cố, nó chỉ truyền lặp lại gói tin hỏng mà thôi, còn bên thu nếu nhận được gói tin này lần thứ hai không có lỗi thì nó chỉ việc xếp đặt lại các gói tin theo thứ tự và gởi lên cho lớp mạng.

Phương pháp này tương ứng với trường hợp cửa sổ thu lớn hơn 1. Tuy nhiên nó cũng đòi hỏi bộ đệm của lớp liên kết dữ liệu lớn trong trường hợp cửa sổ thu có kích thước lớn.

Một phần của tài liệu Bài Giảng Mạng Máy Tính (Trang 86 - 91)

Tải bản đầy đủ (DOCX)

(149 trang)
w