Thuật toỏn trỏnh tắc nghẽn (CA, Congestion Avoidance) (hỡnh 4.7) nhằm khắc phục nguyờn nhõn thứ ba dẫn tới việc vi phạm nguyờn lý “Bảo toàn cỏc gúi số liệu”. Một chiến lược rỏnh tắc nghẽn đó được đề xuất bao gồm hai thành phần: thứ nhất là cỏc chớnh sỏch của mạng: mạng phải cú khả năng gửi tớn hiệu đến cho cỏc thực thể cuối của cỏc kết nối (endpoint), bỏo cho chỳng biết là tắc nghẽn đang xảy ra hoặc sắp xảy ra; thứ hai là cỏc chớnh sỏch của endpoint: cỏc endpoint phải cú chớnh sỏch giảm lưu lượng đưa vào mạng nếu nhận được cỏc tớn hiệu bỏo và tăng thờm lưu lượng đưa vào mạng nếu khụng nhận được tớn hiệu bỏo này.
Chớnh sỏch của endpoint đối với tắc nghẽn: thớch ứng với đường truyền
Đú chớnh là chớnh sỏch tăng theo cấp số cộng, giảm theo cấp số nhõn, chớnh sỏch đú được giải thớch như sau:
− Mỗi khi xảy ra sự kiện hết giờ, đặt giỏ trị cửa sổ tắc nghẽn cwnd bằng một phần hai giỏ trị cửa sổ hiện thời. Đú là sự giảm theo cấp số nhõn.
− Mỗi khi nhận được một biờn nhận cho gúi số liệu mới, tăng cwnd thờm một lượng bằng 1/cwnd, đõy là sự tăng theo cấp số cộng. (Trong giao thức TCP, kớch thước cửa sổ và kớch thước gúi số liệu được tớnh bằng byte, vỡ thế sự tăng núi trờn được
Thuật toỏn Slow Start (SS):
− Thực thể phỏt sử dụng thờm biến:
+ cwnd (congestion window) - kớch thước cửa sổ phỏt
+ ssthresh (ss threshhold) - giới hạn trờn của cwnd, nếu vượt qua ặ tắc nghẽn.
− Bắt đầu phỏt, cwnd := 1, đú là tốc độ “an toàn nhất”
− Nhận được mỗi ack, tăng cwnd lờn 1 để thăm dũ (Additive Increase)
+ Khụng tăng cwnd quỏ Window Size mà bờn nhận thụng bỏo.
+ Thực chất, cwnd tăng lờn theo hàm mũ (theo thời gian).
− Khi cwnd ≥ ssthresh, chuyển sang CA
chuyển thành maxseg*maxseg/cwnd, trong đú maxseg là kớch thước gúi số liệu cực đại và cwnd là cửa sổ tắc nghẽn, được tớnh bằng bytes).
− Khi gửi, sẽ gửi đi số gúi số liệu bằng số bộ hơn trong hai số: kớch thước cửa sổ mà bờn nhận đó đề nghị và cwnd.
Trong thực tế, cỏc thuật toỏn Khởi động chậm (SS) và Trỏnh tắc nghẽn (CA) đó được triển khai thực hiện cựng với nhau như là một thuật toỏn, thuật toỏn này được cài đặt trong Tahoe TCP - một phiờn bản của TCP.
Chớnh sỏch của mạng đối với tắc nghẽn
Đú là cỏc chớnh sỏch làm cho mạng, cụ thể là cỏc gateways gửi tớn hiệu bỏo tắc nghẽn tới cỏc mỏy tớnh trờn mạng càng sớm càng tốt, nhưng đừng quỏ sớm, trỏnh cho mạng khỏi bị thiếu lưu lượng vận chuyển. Gateway chỉ phải làm cụng việc loại bỏ cỏc gúi số liệu để bỏo cho cỏc thực thể đó gửi cỏc gúi số liệu rằng: chỳng đó sử dụng quỏ phần tài nguyờn mạng dành cho chỳng. Chớnh vỡ thế, cỏc thuật toỏn tại gateway sẽ làm giảm tắc nghẽn ngay cả khi khụng phải sửa đổi giao thức giao vận ở cỏc mỏy tớnh trờn mạng, để thực hiện việc trỏnh tắc nghẽn. Đồng thời cỏc mỏy tớnh trờn mạng cú triển khai thực hiện trỏnh tắc nghẽn sẽ nhận được phần dải thụng hợp lý dành cho nú và chỉ bị mất một số lượng tối thiểu cỏc gúi số liệu.
Bởi vỡ tắc nghẽn tăng lờn theo hàm mũ, cho nờn việc phỏt hiện sớm là quan trọng. Nếu tắc nghẽn được phỏt hiện sớm, thỡ chỉ cần một vài điều chỉnh nhỏđối với cửa sổ của người gửi cũng cú thể giải quyết được vấn đề; ngược lại, sẽ phải điều chỉnh rất nhiều để mạng cú thể chuyển hết đống gúi số liệu tắc nghẽn trong mạng ra ngoài. Tuy nhiờn, do bản chất luụn thăng giỏng mạnh của lưu lượng, phỏt hiện tắcnghẽn sớm một cỏch tin cậy là một việc khú.
Thuật toỏn Congestion Avoidance (CA):
y Dấu hiệu tắc nghẽn:
1. RTT tăng quỏ Timeout, là một giỏ trị mà thực thể gửi sử dụng để phỏn đoỏn là gúi tin đó bị mất.
2. Nhận được nhiều (3) Dup Ack (biờn nhận lặp), điều đú cho biết đó cú nhiều gúi tin khụng đỳng thứ tựđến đớch, nghĩa là đó cú gúi tin bị mất.
y cwnd := cwnd + 1/cwnd với mỗi ack.
y Khi phỏt hiện dấu hiệu tắc nghẽn:
+ ssthresh := cwnd/2, cwnd := 1
+ RTO = RTO * 2 (Exponential backoff) + ặ SS
Nhận xột:
1. Trong giai đoạn CA, cwnd tăng tuyến tớnh:
+ Đảm bảo tận dụng băng thụng cú thể sử dụng được
+ Vẫn thăm dũ tiếp khả năng sử dụng băng thụng nhiều hơn
2. cwnd bị giảm theo cấp số nhõn (Multiplicative Decreased)
Thuật toỏn Fast Retransmit (FRTX):
− Sau khi nhận được Dupack (>=3), TCP thực hiện phỏt lại nhanh, khụng chờ bị Timeout, sau đú chuyển ngay về SS.
− Đõy là một cỏch “dựđoỏn thụng minh” rằng, gúi tin đó bị mất.
Hỡnh 5.10. Minh hoạ thuật toỏn SS và CA
Thuật toỏn Fast Recovery (FRCV):
Cải tiến FRTX: thực hiện FRTX xong về CA chứ khụng về SS:
− ssthresh := cwnd/2, nhưng khụng nhỏ hơn 2 (gúi tin)
− cwnd := cwnd + 3. Bờn gửi “đoỏn”: 3 dupack ứng với 3 gúi tin đó được nhận đỳng.
− Với mỗi dupack nhận được thờm, tăng cwnd := cwnd + 1