Một số thuật toán điều khiển lƣu lƣợng trong TCP

Một phần của tài liệu Các cải tiến TCP cho đường truyền vệ tinh (Trang 36 - 40)

Hiện tƣợng tắc nghẽn số liệu biểu hiện rõ nhất bằng việc gia tăng RTT của các gói số liệu khi di chuyển trong mạng, hoặc thực thể TCP phát bị hết giờ (timeout), hoặc thực thể phát nhận đƣợc một số biên nhận lặp... Để hạn chế hiện tƣợng tắc nghẽn số liệu, trong TCP sử dụng các thuật toán điều khiển lƣu lƣợng sau: “Khởi động chậm”, “Tránh tắc nghẽn”, “Phát lại nhanh”, “Khơi phục nhanh”.

2.4.1. Thuật tốn “Khởi động chậm” – SS (Slow Start)

Đặc trƣng của thuật toán “Khởi động chậm” là phải định nghĩa thêm khái niệm “Cửa sổ tắc nghẽn” (congestion window), ký hiệu là cwnd, cho thực thể TCP phát. Một khi kết nối TCP đƣợc thiết lập, cwnd đƣợc gán giá trị bằng 1 (đơn vị kích thƣớc gói tin), có độ lớn đƣợc thông báo bởi thực thể TCP bên nhận, độ dài mặc định là 512 Byte. [RFC 2001]

Thực thể TCP phát bắt đầu phát với cwnd = 1, gửi một gói dữ liệu đầu tiên và đợi biên nhận. Khi nhận đƣợc biên nhận ACK đầu tiên, thực thể phát tăng giá trị cửa sổ cwnd thành 2, gửi 2 gói dữ liệu, và đợi. Khi nhận đƣợc 2 biên nhận tiếp theo, với mỗi biên nhận TCP sẽ gia tăng cửa sổ cwnd thêm 1. Lúc đó

giá trị của cwnd sẽ là 4 và TCP có thể gửi 4 gói tin cùng lúc. Các biên nhận cho các gói tin này sẽ gia tăng cwnd thành 8. Nhƣ vậy chỉ sau 4 vòng (4 * RTT), TCP đã gia tăng cửa sổ cwnd thành 16, cho phép gửi 16 gói tin. Do đó, sau log2N vịng là TCP có thể gửi N gói tin. Q trình trên đƣợc lặp lại cho đến khi thoả mãn một trong các điều kiện sau:

 cwnd  ssthresh (ssthresh: ngƣỡng chuyển đổi từ giai đoạn khởi động chậm sang giai đoạn tránh tắc nghẽn).

 cwnd  rwnd (rwnd: kích thƣớc cửa sổ nhận).

 Xuất hiện dấu hiệu tắc nghẽn thể hiện qua việc gia tăng của thời gian RTT quá một giới hạn nhất định - RTO (Retransmit Timeout).

 Nhận đƣợc biên nhận lặp.

Lúc đó, thực thể phát biết rằng độ lớn của cửa sổ cwnd đã quá lớn, và cần phải có sự điều chỉnh giảm tốc độ phát sao cho phù hợp, nó chuyển sang “pha” tránh tắc nghẽn.

2.4.2. Thuật toán “Tránh tắc nghẽn” – CA (Congestion Avoidance)

Dấu hiệu của hiện tƣợng mất gói tin do tắc nghẽn trên đƣờng truyền end- to-end là thời gian RTT tăng quá mức hoặc bên nhận nhận đƣợc liên tiếp các biên nhận lặp (dup ACK), cụ thể nhƣ sau:

 Nếu có gói số liệu bị mất tại một chặng nào đó trên đƣờng truyền trong mạng (do tràn bộ đệm), sẽ dẫn đến việc thực thể gửi TCP bị timeout và phải thực hiện phát lại gói số liệu bị mất.

 Nếu thực thể phát nhận đƣợc nhiều biên nhận (ACK) cho cùng một gói tin, điều đó cho biết rằng tại trạm nhận, các gói số liệu đã đến, khơng có lỗi, nhƣng khơng theo đúng thứ tự phát (out-of-order) do đã có một hoặc một số gói tin bị mất do tắc nghẽn trên đƣờng truyền.

Biện pháp tránh tắc nghẽn duy nhất thích hợp là giảm lƣu lƣợng gửi gói tin vào mạng để mạng có thể ra khỏi trạng thái tắc nghẽn. Thuật toán “Bắt đầu

chậm” và thuật toán “Tránh tắc nghẽn” đƣợc phối hợp sử dụng và thƣờng đƣợc cài đặt đồng thời nhƣ một thuật toán. Hoạt động của hai thuật toán đƣợc kết hợp lại nhƣ sau:

 Đặt giá trị ban đầu cwnd = 1 và ssthresh = 65.535 Byte.

 Thực thể TCP sử dụng cơ chế cửa sổ trƣợt (sliding window) để gửi dữ liệu. Độ lớn của cửa sổ, ký hiệu là W, chính bằng số gói dữ liệu đƣợc gửi liên tục mà không cần chờ thông báo trả lời. Thực thể TCP gửi không bao giờ phát đi số gói tin vƣợt quá một trong hai giá trị là cửa số tắc nghẽn cwnd và cửa sổ nhận rwnd (Receiver Window) đƣợc thơng báo bởi bên nhận dữ liệu. Hay nói cách khác: W=min{cwnd, rwnd}.

 Khi hiện tƣợng tắc nghẽn xuất hiện, giá trị ssthresh đƣợc điều chỉnh bằng max(2, W/2) và đặt cwnd = 1.

 Mỗi khi nhận đƣợc thông báo ACK, tăng giá trị cwnd lên theo 2 cách, tùy thuộc vào giai đoạn và thuật toán nào đang tiến hành:

o Nếu cwnd < ssthesh, thuật toán khởi động chậm đƣợc thực hiện: giá trị của cwnd đƣợc tăng thêm 1 đơn vị với mỗi thông báo biên nhận ACK nhận đƣợc.

o Nếu cwnd = ssthesh, thuật toán tránh tắc nghẽn đƣợc thực hiện: giá trị cwnd đƣợc tăng thêm 1/cwnd với mỗi thông báo ACK nhận đƣợc.

Nhƣ vậy, khi phát hiện tắc nghẽn, tốc độ mở cửa sổ phát đƣợc điều chỉnh dần dần một cách tuyến tính, trong khi ở thuật tốn bắt đầu chậm (trong trƣờng hợp không tắc nghẽn) tốc độ mở cửa sổ phát tăng theo hàm mũ. Điều này đảm bảo cho TCP khả năng nhanh chóng sử dụng đƣợc hết dải thơng cịn “rỗi” trong pha khởi động chậm và tiếp tục thăm dị phần dải thơng cịn có thể sử dụng đƣợc trong pha tránh tắc nghẽn mà khơng làm cho tình trạng tắc nghẽn thêm trầm trọng.

2.4.3. Thuật toán “Phát lại nhanh” – FRTX (Fast Retransmit)

Thực thể gửi TCP cần thực hiện phát lại một gói số liệu khi nhận biết đƣợc có gói tin bị mất hoặc đƣợc đồng hồ quản lý phát lại kích hoạt (timeout). Thuật tốn phát lại nhanh cho phép thực thể phát thực hiện phát lại không cần chờ đồng hồ “timeout”, trong trƣờng hợp nhận đƣợc nhiều hơn hai thông báo ACK lặp lại.

Thông báo ACK lặp lại đƣợc tạo ra trong trƣờng hợp thực thể nhận thơng báo gói số liệu đến khơng đúng theo thứ tự phát và nêu ra số thứ tự gói số liệu chờ nhận. Trong thực tế, thƣờng chỉ cần từ một đến hai thông báo ACK lặp lại là đủ thời gian để gói số liệu bị lạc đến đích và đƣợc xử lý đúng thứ tự. Nếu thực thể phát nhận đƣợc nhiều hơn hai thơng báo ACK lặp thì thực thể phát có cơ sở (khá chắc chắn) để cho rằng gói số liệu đó đã bị mất và cần phát lại nhanh chóng gói số liệu bị mất đó. Sau khi phát lại nhanh, thực thể phát trở về pha “Khởi động chậm” (cwnd=1).

2.4.4. Thuật tốn “Khơi phục nhanh” – FRCV (Fast Recovery)

Thuật tốn khơi phục nhanh quy định việc thực hiện thuật toán tránh tắc nghẽn ngay sau khi thực hiện thuật tốn phát lại nhanh, chứ khơng trở về pha “Khởi động chậm”. Điều này tránh cho lƣu lƣợng số liệu trong kết nối TCP khơng bị giảm đột ngột, gây lãng phí dải thơng của đƣờng truyền.

Thuật toán phát lại nhanh và khôi phục nhanh thƣờng đƣợc cài đặt kết hợp với nhau nhƣ sau:

(i) Sau khi nhận đƣợc biên nhận ACK lặp thứ 3 liên tiếp, thực thể phát kết luận rằng gói số liệu đó đã bị mất nên phát lại gói số liệu bị mất đó chứ khơng chờ cho đến khi bị timeout, sau đó thiết lập ngƣỡng ssthresh = max(2, cwnd/2).

Khác với FRTX, sau khi phát lại gói số liệu bị mất sẽ trở về pha “Khởi động chậm” bằng cách đặt cwnd=1. Trong FRCV, sau khi

phát lại gói số liệu bị mất, thực thể phát sẽ tăng cwnd=ssthresh + 3. Điều này có nghĩa là cwnd đƣợc tăng lên thêm ba gói số liệu tƣơng ứng với ba gói số liệu đã rời mạng (thực chất là ba gói số liệu đã đƣợc nhận trong bộ đệm của thực thể nhận, tƣơng ứng với ba thông báo ACK lặp).

(ii) Với mỗi thông báo ACK lặp tiếp theo, tăng cwnd = cwnd + 1, tƣơng ứng với một gói số liệu đã đƣợc nhận đúng và đi ra khỏi mạng.

Thực hiện việc phát một gói số liệu, nếu cwnd và rwnd có giá trị mới và cửa sổ phát W vẫn chƣa lớn hơn min{cwnd, rwnd}.

(iii) Sau khi nhận đƣợc báo nhận ACK của gói dữ liệu bị mất và đã

đƣợc phát lại ở bƣớc (i), thực thể phát TCP thiết lập lại cửa sổ cwnd đƣợc giữ trong trƣờng ssthresh sau đó kết thúc thuật tốn.

Một phần của tài liệu Các cải tiến TCP cho đường truyền vệ tinh (Trang 36 - 40)