Các thuật toán “Khởi động chậm” và “Tránh tắc nghẽn”

Một phần của tài liệu Phân tích, đánh giá hiệu suất tác động của một số thuật toán điều khiển tắc nghẽn số liệu TCP (Trang 25)

1. 3 Điểu khiển lưu lượng và tắc nghẽn số liệu TCP trong mạng Intern et

2.2.1Các thuật toán “Khởi động chậm” và “Tránh tắc nghẽn”

"Khởi động chậm"

C ác phiên bản T C P trước đây bắt đầu một kết nối với việc thực thể gửi phát nhiều gói dữ liệu một lúc vào m ạng, cho đến khi đạt được kích thước cửa sổ đã được thông báo bởi thực thể nhận (cửa sổ thu). Đ iều đó không có vấn đề gì khi hai m áy chủ (host) cùng nằm trên cùng m ột mạng LA N , và nếu có cá c bộ định tuyến (router) và cá c liên kết tốc độ thấp giữa thực thể gửi và thực thể nhận thì vấn đề có thể nảy sinh. Ở m ột số bộ định tuyến trung gian cá c gói dữ liệu khi được vận chuyển qua phải xếp hàng (trong m ột hàng đợi) để ch ờ đến lượt, và vấn đề rất có thể xảy ra là bộ định tuyến này bị tràn bộ nhớ đệm do không còn đủ chồ để lưu giữ cá c gói dữ liệu tiếp theo. [JA C 8 8 ] cho thấy cách tiếp cận này có thể làm giảm thông lượng của m ột kết nối TCP.

Thuật toán để giải quyết vấn đề trên được gọi là "K hởi động chậm ". Nó hoạt động bởi v iệc quan sát tốc độ mà với nó thực thể gửi phát c á c gói dữ liệu mới vào mạng cũng là tốc độ mà với nó cá c gói A C K trả lời được trả lại bởi thực thể nhận.

Đ iều khiển tắc nghẽn T C P Trang 26

OR

O ne Round Tiip Tim«

O r * Pùck»! 1

1R ca

2P

3R

Hình 2. Ị : Thuật toán “Khởi động chậm '

Thuật toán "K hởi động chậm " thêm một biến cvvnd - cửa sổ tắc nghẽn - cho thực thể gửi TCP. Khi mà một kết nối T C P được thiết ỉập với m ột máy chủ (host) trên một mạng khác, cvvnd được cho một giá trị ban đầu là 1 gói-đữ-liệu (có nghĩa : độ dài của một gói-dữ-liệu lớn nhất m à thực thể nhận có thể nhận, chính là giá trị R M S S được định nghĩa ở trên). Cứ m ỗi lần m ột A C K nhận được, cửa sổ tắc nghẽn cwnd được tăng thêm 1 gói-dữ-liệu. Thực thể gửi có thể truyền cho đến giá trị cực tiểu của cửa sổ tắc nghẽn và cửa sổ thu, tức M in(cw nd, rwnd). T a có thể hiểu vấn đề này như sau : thực thể gửi điều khiển lưu lượng thông qua cửa sổ tắc nghẽn dựa trên việc phỏng đoán tắc nghẽn mạng và thực thể nhận điều khiển lưu lượng thông qua cửa sổ thu dựa trên tổng bộ nhớ đệm sẩn có tai thưc thể nhân.

Đ iều khiển tắc nghẽn T C P Trang 27

Hình 2.2 : Cơ ch ế cửa sổ thuật toán “Khởi động chậm ”

Điều khiển tắc nghẽn T C P Trang 28

Thực thể gửi bắt đầu phát một gói dữ liệu và ch ờ A C K trả lời cho gói dữ liệu đó. Khi A C K này nhận được, cửa sổ phát được tăng từ m ột lên hai, và lúc này h a i gói dữ liệu có thể được gửi. Khi cả h a i gói được trả lời thì cửa sổ phát sẽ được tăng lên bôh gói (Hình 2.1 ). V à cứ như thế cửa sổ phát tăng theo hàm số mũ, m ặc dù điều này chỉ mang ý nghĩa tương đối bởi thực thể nhận có thể làm trễ cá c A C K của nó, điển hình là khi nó chỉ truyền m ột A C K cho cả hai gói dữ liệu mà nó nhận được một lúc.

Tại một số thời điểm dung lượng của mạng (internet) có thể đạt được, và một bộ định tuyến trung gian sẽ bắt đầu loại bỏ các gói dữ liệu đến sau. Điều đó thông báo cho thực thể gửi biết rằng cửa sổ phát của nó là quá lớn. Những sự thực hiện trước đây chỉ sử đụng thuật toán "K hởi động ch ậ m ” khi thực thể nhận nằm trên một mạng khác còn cá c sự thực hiện T C P ngày nay luôn sử dụng thuật toán này.

Sau đây là mô tả thuật toán chi tiết cho “Khởi động ch ậm ” :

Thêm một biến cửa sổ tắc nghẽn, cwnd, vào trạng thái m ỗi kết nối.

• K hi bắt đẩu khởi động hoặc khởi động lại sau việc mất dữ liệu , đặt cwnd =

1 gói-dữ-ỉiệu.

Trên mỗi gói ACK trả lời cho dữ Hệu mới, hãy tăng cwnd thêm một g ói

(cwnd= cwnd + 1 gói-dữ-ỉiệu).

• Khi phát, hãy phát với cửa sổ phát = Min( Tvmd, cwnd).

Trên thực tế, việc tăng cửa sổ “Khởi động chậm ” tốn m ột thời gian R lo g 2W với R là th ời gian trễ toàn phần (RTT) và w là đ ộ lớn cửa s ổ với đơn vị ià g ó i dữ liệu (Hình 2 .1 ). Điều đó có nghĩa cửa sổ tăng đủ nhanh để không có một hiệu ứng đáng kể nào ảnh hưởng đến hiệu suất, thậm trí trên c á c kết nối với một giải tần lớn. V à thuật toán đảm bảo rằng một kết nối sẽ là nguồn dữ liệu với tốc độ nhiều nhất bằng hai lần vận tốc cực đại có thể.

Đ iéu khiển tắc nghẽn TC P Trang 29

Hình 2.3 : Sơ đổ thuật toán “Khởi động chậm ”

"Tránh tắc nghẽn"

T ắ c nghẽn có thể xảy ra khi dữ liệu đến m ột mạng LA N tốc độ cao và gửi đi trên m ột mạng W A N tốc độ thấp. T ắc nghẽn cũng có thể xuất hiện khi nhiều dòng dữ liệu đầu vào đến bộ định tuyến mà dung lượng đầu ra của nó nhỏ hơn tổng dung lượng c á c đầu vào. "Tránh tắc nghẽn" là m ột giải pháp để đối phó với c á c gói dữ liệu bị mất và nó được mô tả chi tiết trong [JA C 8 8 ].

Điểu khiển tắc nghẽn T C P Trang 30 RTT Cwnd Thực thể gửi Thực thể nhận Cvvnd = 3 1 2 1 3 Cwnd += 1/3 = 3 + 1/3 ACKl Cwnd += 1/3 = 3 + 2/3 ACK2 A-.... Cwnd += 1/3 = 3 + 1 = 4 ACK 3 A.... " 4 5 6 y 2 7 SSSsSw^* Cwnd += 1/4 = 4 + 1/4 ACK4 Cwnd += 1/4 = 4 + 2/4 ACK5 A'' Cwnd += 1/4 = 4 +3/4 ACK 6 o Cwnd += 1/4 = 4 + 1 = 5 ACK 7 A 8 9 10 11 12 3 Cvvnd += 1/5 = 5 + 1/5 ACK 8 Cwnd += 1/5 = 5 + 2/5 ACK9 •• Cwnd += 1/5 = 5 +3/5 ACK 10 : Cwnd += 1/5 = 5 + 4/5 ACK11 / Cwnd += 1/5 = 5 + 1 = 6 ACK 12

Điều khiển tắc nghẽn T C P Trang 32 (adsbygoogle = window.adsbygoogle || []).push({});

gói dữ liệu sẽ tạo ra nhiều nhất cw n d A C K ch o mỗi RTT. Như vậy một sự tăng của 1 Ịcw n d cho m ỗi A C K sẽ tăng độ lớn cửa sổ nhi ều nhất là 1 gói dữ liệu cho mỗi R T T . Trong T C P , c á c độ lớn cửa sổ và gói dữ liệu được tính bằng byte do đó việc tăng phải được chuyển thành maxseg*maxseg/cwnd với maxseg là độ dài gói dữ liệu lớn nhất c ó thế’ và cw n d được biểu diễn bằng by te chứ không phải bằng gói-dữ -ỉiệu .

Thuật toán được m ô tả ở trên chỉ là thuật toán "T ránh tắc nghẽn", nó không bao hàm cả "K h ởi động ch ậm ". "T ránh tắc nghẽn" và "K h ở i động chậm " là hai thuật toán độc lập với cá c m ục đích hoàn toàn khác nhau. Nhưng khi tắc nghẽn xuất hiện T C P phải làm ch ậm lại tố c độ truyền cá c gói dữ liệu vào m ạng, và sau đó kích hoạt "K h ởi động ch ậm " để nhận được sự hoạt động trở lại. Trong thực tế chúng được thực hiện kết hợp với nhau. Phần tiếp theo sau đây sẽ mô tả việc thực hiện kết hợp củ a hai thuật toán trên.

Kết hợp "Khởi động chậm" và "Tránh tắc nghẽn"

Sự kết hợp giữa hai thuật toán "K h ở i động ch ậm " và "Tránh tắc nghẽn" được mô tả chi tiết trong [A P S 9 9 ] và có m ột s ố thay đổi so với [JA C 8 8 J. Thuật toán “ Khởi động ch ậ m ” và “Tránh tắc nghẽn” được sử dụng bởi một thực thể gửi TCP để điểu khiển lưu lượng dữ liệu cò n đang trên đường truyền. Đ ể thực hiện cá c thuật toán này, 0 2 biến được thêm vào trạng thái củ a m ỗi kết nối TCP. Cửa sổ tắc nghẽn cw nd\ầ do thực thể gửi qui định dựa trên số lượng dữ liệu mà thực thể sửi có thể truyền vào m ạng trước khi nhận được m ột gói A C K , trong khi cửa sổ thu rw nd do thực thể nhận qui định dựa trên số lượng dữ liệu còn tổn đọng trên mạng. G iá trị tối thiểu củ a cửa sổ tắc nghẽn và cửa sổ thu M in(cw nd, rwnd) xác định độ lớn cửa sổ thực tế được sử dụng để phát dữ liệu.

Đ iều khiển tắc nghẽn T C P Trang 31

Trong quá trình “Tránh tắc nghẽn”, khi một tim eout hết hạn, có nghĩa là nó ch í báo một gói dữ liệu bị mất. Những gói dữ liệu bị mất do hai lý do : chúng bị lỗi (hỏng) khi đang được truyền trên m ạng, hoặc m ạng bị ùn tắc và ở đâu đó trên đường truyền có khả năng bộ nhớ đệm bị thiếu. Trên phần lớn các đường truyền trên mạng sự mất mát do hỏng (lỗi) rất hiếm khi xảy ra (khoảng « 1 % ) , như vậy có thể một gói dữ liệu bị mất hầu như là do ùn tắc trên mạng.

Khi có tắc nghẽn mạng phải có khả năng báo hiệu ch o cá c điểm cuối cần truyền rằng tắc nghẽn đang xuất hiện. V à các điểm cuối này phải có chính sách giảm bớt việc sử dụng tài nguyên nếu nhận được thông tin và tăng khả năng sử dụng trong trường hợp ngược lại.

Như trong thực tế được ch ỉ ra, nguyên nhân dẫn đến tắc nghẽn m ạng thường là do c á c gói dữ liệu bị m ất và dấu hiệu củ a v iệc m ất gói dữ liệu là thời eian ch ờ (tim eo u t) hết hạn. D o vậy dấu hiệu làm ch o m ạng bị tắc nghẽn là đã rõ ràng.

Sau đầy là m ô tả chi tiết thuật toán "Tránh tắc nghẽn" :

Khi xuất hiện dấu hiệu tắc nghẽn do hết thời giãn chờ nhận gói A CK đ ể phát lại (timeout) , đặt cwnd bằng một nửa (1/2) độ lớn cửa s ổ hiện thời (giảm cửa sổ theo cấp s ố nhãn).

Trên mỗi ACK cho dữ liệu mới, tầng cwnd thêm ỉ/cwnd (hay SMSS*SMSS/cwnd ) (*) (tăng cửa sổ theo cấp s ố cộng).

K h i gửi, thì g ử i M in(rwnd, cwnd) trong đ ó cwnd ỉà "cửa s ổ tắc nghẽn " ; nvnd ỉà cửa s ổ đ ã thông b á o của thực th ể nhận h ay "cửa s ổ thu ").

( * ) Chú ý : Quy tắc tăng dần này có thể nhỏ hơn trong thực tế. Chúng ta muốn tăng kích thước cửa sổ nhiều nhất là 1 gói-dữ-liệu ch o m ỗi thời gian trễ toàn phần (R T T ). G iả thiết rằng thực thể gửi có thể tránh m ột cách hiệu quả những cửa sổ có độ dài không thích hợp và không c ố gắng để truyền những đoạn con của gói dữ liệu vì độ lớn cửa sổ là một phân số. M ột cửa sổ với độ dài là cw nd

Điều khiển tắc nghẽn T C P Trang 33

M ột biến trạng thái , ngưỡng khởi-động-chậm s$thresh được dùng để xác định khi nào thì thực hiện “ Khởi động chậm ” hay “Tránh tắc nghẽn”. Biến này được sử dụng để điều khiển dữ liệu phải truyền như m ô tả dưới đây.

K h i bắt đầu truyền vào một mạng với các điều kiện chưa được xác định đòi hỏi T C P phải thử (thăm dò) mạng m ột cách chậm và ch ắc chắn để xác định dung lượng (khả năng) truyền có thể với mục đích là để tránh việc làm tắc nghẽn mạng với sự xuất hiện đột ngột luồng dữ liệu lớn không thích hợp. Thuật toán “Khởi động chậm ” được dùng cho mục đích này tại thời điểm bắt đầu của một lần truyền (phát), hoặc sau lần hổi phục việc m ất dữ liệu được phát hiện bởi đồng hồ phát lại.

Cửa sổ khởi tạo IW , giá trị ban đầu của cửa sổ tắc nghẽn cwnd, phải nhỏ hơn hoặc bằng (< ) 2 * S M S S bytes và không được lớn hơn 2 g ó i dữ liệu.

M ột sự m ở rộng T C P không theo chuẩn và dựa trên thực nghiệm cho phép m ột T C P có thể sử dụng một cửa sổ khởi tạo IW lớn hơn, như được định nghĩa trong phương trình (1) [A F P 98] :

IW = min (4 *S M S S , max (2 *S M S S , 4 3 8 0 by tes)) ( 1 )

V ới sự m ở rộng này, m ôt thực thể gửi T C P có thể sử dụng một cửa sổ khởi tạo I w bằng 3 hay 4 g ó i dữ liệu, và tổng độ lớn của cá c g ó i dữ liệu không vượt quá 4 3 8 0 bytes. Chúng ta không coi sự thay đổi này như là phần của chuẩn đã định nghĩa trong luận văn. Tuy nhiên, chúng ta tính đến việc thảo luận phương trình ( 1 ) như là một thử nghiệm . Nội dung chính của bài luận văn chỉ quan tâm đến cá c chuẩn hiện có của điều khiển tắc nghẽn TCP.

G iá trị khởi tạo của ssth resh có thể lớn tuỳ ý (ví dụ, m ột vài sự thực hiện cho giá trị ssthresh bằng độ lớn của cửa sổ thu rw nd ), nhưng nó cũng có thể được eiảm đi để tránh tấc nghẽn. Thuật toán “ Khởi động chậm ” được sử dụng khi

Đ iều khiển tắc nghẽn T C P Trang 34

c w nd < ssthresh, trong khi thuật toán “Tránh tắc nghẽn” được sử dụng khi cw nd > ssthresh. Khi cw n d = ssthresh thì thực thể gửi có thể thực hiện “ Khởi động ch ậ m ” hoặc “Tránh tắc nghẽn” .

Trong thời gian “Khởi động chậm ”, một T C P tăng cw n d nhiều nhất SM SS bytes ch o m ỗi A C K trả lời cho dữ liệu mới. “Khởi động ch ậm ” kết thúc khi

cw n d vượt quá ssthresh (hoặc có thể tuỳ chọn, khi cvvnd đạt tới ssthresh như đã nêu ở trên) hoặc khi sự tắc nghẽn được chú ý đến.

Trong thời gian “Tránh tắc nghẽn”, cw nd được tăng thêm m ột gói-tối-đa (fu ll-sized segm ent) cho m ỗi thời gian trễ toàn phần R T T . "Tránh tắc nghẽn" tiếp tục cho đến khi tắc nghẽn được phát hiện. M ột công thức thường được sử dụng để cập nhật cw nd trong thời gian “Tránh tắc nghẽn” được đưa ra trong phương trình (2 ):

cwnd + = SM SS*SM SS/cw n d (2)

Sự điều chỉnh này được thực hiện trên mỗi m ột gói A C K đến không-trùng (non- ciuplicate). Phương trình (2 ) cung cấp một phép tính gần đúng chấp nhận được theo nguyên lý : cwnd tăng m ột gói-tối-đa cho mỗi R T T .

Chú ý khi thực hiện : V ì việc tính toán số nguyên thường được sử dụng trong việc thực hiện TC P, nên công thức đưa ra trong phương trình (2 ) có thể sai khi tăng cwnd trong trường hợp cwnd rất lớn (lớn hơn S M S S *S M S S ). Nếu công thức trên cho kết quả 0 thì kết quả đó phải được làm tròn tới 1 byte.

M ột cách khác có thể chấp nhận được để tăng cwnd trong thời gian “Tránh tắc nghẽn” là đếm số byte đã trả lời bởi các A C K cho dữ liệu mới. (M ột hạn ch ế của thực hiện này là nó đòi hỏi phải duy trì m ột biến trạng thái bổ xung). K hi sô' byte đã được trả lời đạt đến cwnd, sau đó cw n d cỏ thể được tăng cho đến SM SS bytes. Chú ý rằng trong thời gian “Tránh tắc nghẽn”, cw n d không được tăng (adsbygoogle = window.adsbygoogle || []).push({});

Điều khiển tắc nghẽn TC P Trang 35

m ột đoạn lớn hơn giá trị lớn nhất của m ột gói-tối-đ a ch o mỗi R T T và giá trị được tính theo phương trình 2.

Khi m ột thực thể gửi T C P phát hiện việc mất gói dữ liệu khi sử dụng đồng hồ phát lại, giá trị của ssthresh phải được đặt là không lớn hơn (< ) giá trị được đưa ra trong phương trình (3 ):

ssthresh = m ax (FlightSize / 2, 2 * S M S S ) (3 )

Như đã trình bày ở trên FlightSize là tổng dữ liệu còn tồn đọng trên mạng. N goài ra, trong thời gian m ột tim eout, cw nd phải được đặt không lớn hơn cửa sổ “ m ất” (L W ) mà độ lớn của nó bằng 1 gói-tối-đ a (bất chấp cửa sổ khởi tạo IW là bao nhiêu). Do vậy sau việc phát lại gói dữ liệu bị mất thực thể gửi TC P sử dụng thuật toán “ Khởi động chậm ” để tăng độ lớn cửa sổ từ 1 gói-tối- đa lên đến g iá trị mới của ssthresh m à tại thời điểm đó quá trình “Tránh tắc nghẽn” lại được tiếp tục.

"Tránh tắc nghẽn” và "K hởi động chậm " đòi hỏi hai biến được thêm vào cho mỗi kết nối : một biến cử a-sổ-tắc-nghẽn cw n d và m ột biến ngưỡng khởi- động-chậm ssthresh. Thuật toán kết hợp của hai thuật toán trên được mô tả như sau :

/. Khi bắt đầu một kết nối ta đặt cwnd - 1 gói-dữ-lỉệu và ssthæsh = 65535 bytes (hoặc có thể tuỳ ý hoặc bằng kích thước cửa sổ thu đã được thông báo bởi thực thể nhận rwnd ).

2. Thực thể gửi TCP không bao giờ gửi quá giá trị cực tiểu của cửa sổ tắc nghẽn (cwnd) và cửa sổ thu đã được thông báo bởi thực thể nhận (rwnd), tức Min(cwnd, rwnd).

3. Nếu tắc nghẽn xuất hiện (được chỉ ra bởi một timeout hoặc sự nhận được các ACK trùng), đạt ssthœsh = 1/2 Mừi(cwnd, rwnd), tức một nửa kích thước cửa sổ hiện thời, nhưng tối thiểu phải bằng 2 gói-dữ-ỉiệu (điều kiện ssthresh < max(FlightSize/2 , 2*SMSS)) và cwnd = ssthresh . Ngoài ra,

Điều khiển tắc nghẽn TC P Trang 36

nếu tắc nghẽn được chỉ ra bởi một timeout, đặt cwnd = 1 gói-dữ-liệu, có nghĩa thực hiện "Khởi động chậm

4. Nếu thực thể gửi nhận được ACK trả lời cho dữ liệu mới (tức không phải

ACK trùng) thì tăng cwnd, nhưng việc tăng cwnd CÒĨ1 phụ thuộc vào TCP

Một phần của tài liệu Phân tích, đánh giá hiệu suất tác động của một số thuật toán điều khiển tắc nghẽn số liệu TCP (Trang 25)