Các giải pháp loại bỏ ảnh hưởng băng thông bất
đối xứng ADSL đối với TCP/IP
Nguồn: khonggianit.vn
I. GIỚI THIỆU
Giao thức TCP được sử dụng rộng rãi trên mạng truyền thông, đặc biệt trên
Internet, cung cấp kết nối tin cậy và khả năng thích ứng tốt với nhiều sự thay đổi
trong cấu hình và điều kiện hoạt động của mạng. Ngày nay, khi nhu cầu về truyền
dữ liệu và sử dụng
dịch vụ thông qua mạng và Internet phát triển nhanh chóng,
nghẽn trong mạng trở thành vấn đề nghiêm túc và việc kiểm soát nghẽn trở thành
một yếu tố quan trọng của giao thức lớp chuyển tải.
ADSL là một công nghệ cho phép truy cập tốc độ cao
trên đôi cáp đồng thông thường. Băng thông khác
nhau cho kênh truyền lên (upstream) và kênh truyền
xuống (downstream) là đặc tính nổi bật của ADSL và
ngược lại.
Đối với TCP, đặc tính băng thông bất đối xứng của
ADSL lại là một thách thức. Một yếu tố cho sự tin
cậy của TCP nằm trong luồng hồi báo (ACK
feedback flow) và được gọi là nhịp ACK (ACK clocking) [9]. Khi TCP được sử
dụng trên đường truyền ADSL, các gói hồi báo (acknowledgement segment -
ACK) cho luồng dữ liệu trên băng thông rộng downstream sẽ di chuyển từ phía
client tới máy chủ trên upstream có băng thông hẹp. Gián đoạn hay chậm trễ đối
với luồng ACK gây nên bởi nghẽn trên hướng upstream có thể dẫn đến sự gián
đoạn hoạt động bình thường của TCP ngay khi hướng downstream không bị
nghẽn. Trong tình huống xấu hơn, do luồng ACK bị ngắt quãng và không theo
nhịp, bên đầu gửi có thể gửi khối lượng dữ liệu lớn một cách đột ngột (bursty) là
cho nghẽn xảy ra mặc dù bản chất cơ chế kiểm soát nghẽn của TCP là ngăn ngừa
nghẽn trong mạng. Sự trễ của luồng ACK trên upstream cũng dẫn đến việc đánh
giá sai về thời gian chờ để truyền lại (retransmit timeout) gây nên những sự truyền
lại gói tin một cá
II. CƠ CHẾ KIỂM SOÁT NGHẼN TRONG GIAO THỨC TCP
TCP/IP là bộ giao thức được sử dụng rất phổ biến trên mạng truyền thông, đặc biệt
là Internet. TCP (Transmission Control Protocol) thuộc vào các giao thức chuyển
tải và nằm ở lớp 4 theo mô hình OSI, phía trên lớp IP. So với dịch vụ lớp IP được
coi là không tin cậy, TCP cung cấp các kết nối tin cậy dựa trên các yếu tố sau:
- Các gói dữ liệu (segment) được đóng gói với kích cỡ thay đổi được tùy điều kiện
mạng.
- Mã checksum được tính cho toàn bộ segment.
- Hệ thống hồi báo tích cực [12], kết hợp với số thứ tự (sequence number) cho mỗi
byte1 được gửi và được hồi báo: bên nhận hồi đáp các dữ liệu đã nhận tốt trong
một khoảng thời gian và bên gửi sẽ gửi lại dữ liệu nếu quá thời gian định trước.
Đối với một kết nối TCP, mỗi byte gửi đi sẽ được gán một số thứ tự và bên nhận
hồi đáp đối với từng byte được nhận. Trên dữ liệu gửi đi, phần TCP header chứa
số thứ tự của byte đầu tiên của khối dữ liệu trong segment. Gói dữ liệu hồi đáp sẽ
chứa số thứ tự của byte kế tiếp đang chờ nhận. Bằng cách đó, bên gửi biết tất cả
các byte dữ liệu cho tới số thứ tự đó đã được nhận tốt.
m
ch không cần thiết.
- Sử dụng kỹ thuật “cửa sổ trượt” (sliding window): bên gửi có thể truyền nhiều
segment trước khi có hồi báo. TCP cũng hỗ trợ hồi báo tích lũy (cumulative
acknowledgement) cho phép bên nhận hồi báo nhiều segment bằng một gói tin
ACK. Khi gửi hồi báo về cho bên gửi, bên nhận có thể gửi kèm theo dữ liệu (kỹ
thuật piggyback).
- Sử dụng cơ chế quản lý kết nối để thực hiện thiết lập và chấm dứt kết nối, cơ chế
điều khiển luồng đầu cuối-đầu cuối cho phép các nguồn dữ liệu có tốc độ khác
nhau có thể giao tiếp được với nhau, và cơ chế kiểm soát nghẽn rất cần thiết cho
mạng ngày nay.
Cơ chế kiểm soát nghẽn
1) Các giải thuật kiểm soát nghẽn trong TCP
Nghẽn xảy ra khi số lượng các gói tin đưa vào mạng vượt qua số lượng các gói tin
mạng có thể xử lý được, hay nói theo cách khác, nhu cầu vượt quá tài nguyên hiện
tại của mạng. Khi đó, các gói tin phải mất thời gian lâu hơn để di chuyển qua
mạng, hoặc bị loại bỏ tại các hàng đợi bị tràn (overflow), làm cho bộ định thời
(timer) ở bên gửi kích hoạt việc gửi lại các gói tin. Điều này làm tăng lưu lượng
không cần thiết vào mạng đang trong tình trạng nghẽn và trầm trọng hơn tình hình,
nhiều khả năng dẫn đến hiện tượng “sập mạng do nghẽn” [7]. Tình trạng nghẽn
dẫn đến suy giảm hiệu suất tổng thể và lãng phí tài nguyên mạng (như băng thông,
năng lực xử lý). Nghẽn cũng gây ra các vấn đề nghiêm trọng cho các hệ thống đầu
cuối: sự sẵn sàng và thông lượng bị giảm sút trong khi thời gian đáp ứng tăng lên
[13].
Cơ chế kiểm soát nghẽn của TCP cố gắng ngăn chặn nghẽn bằng cách kiểm soát
và tăng dần lượng dữ liệu được đưa vào mạng. Khi nhận thấy nghẽn xảy ra, tốc độ
truyền sẽ được giảm xuống tương ứng. Ngoài ra, cơ chế kiểm soát nghẽn cũng cho
phép TCP thích ứng tốc độ luồng dữ liệu với tình trạng (thường thay đổi nhanh
chóng) của mạng. TCP sử dụng một bộ các giải thuật kiểm soát nghẽn: khởi động
chậm (slow start), tránh nghẽn (congestion avoidance), truyền lại và khôi phục
nhanh (fast retransmission and fast recovery) [1], [9], [10]. Những giải thuật này
rất quan trọng và cùng kiến tạo nên bộ khung cho cơ chế kiểm soát nghẽn của
TCP.
a) Giải thuật slow start
Sau khi kết nối TCP được mở, nếu bên gửi tiến hành gửi ngay toàn bộ số lượng
segment dữ liệu bằng với kích thước cửa sổ được bên nhận thông báo (advertised
window size), các router trung gian và các đường kết nối có tốc độ chậm giữa bên
gửi và bên nhận có thể gặp vấn đề tràn bộ đệm hay vượt quá băng thông kết nối
(link saturation). Giải thuật slow start sẽ tránh tình trạng này.
Bên gửi chỉ có thể gửi một lượng dữ liệu tới mức nhỏ nhất giữa cửa sổ nghẽn
(cwnd) và cửa sổ nhận (receive window) được bên nhận thông báo cho bên gửi.
Kích thước khởi đầu của cwnd là một segment. Sau đó, ứng với mỗi ACK nhận
được, giá trị cwnd được tăng thêm một segment. Ví dụ, sau khi nhận được ACK
đầu tiên, cwnd tăng lên thành 2 segment, và bên gửi có thể truyền tới 2 segment
dữ liệu mới. Khi mỗi ACK của các segment này được nhận, cwnd được tăng thành
4. Việc tăng này gần với hàm mũ, cho thấy số lượng các gói tin được đưa vào
mạng tăng lên khá nhanh.
Bên gửi giữ nguyên trạng thái slow start tới khi kích thước của cwnd đạt tới một
mức ngưỡng (ssthresh - slow start threshold), khi đó sẽ kích hoạt TCP chuyển
sang trạng thái congestion avoidance, hoặc cho tới khi phát hiện việc mất gói. Các
dấu hiệu mà TCP sử dụng để xác định tình trạng nghẽn mạng là sự vượt quá thời
gian chờ (RTO) và việc nhận được các gói ACK lặp lại. Khi xảy ra nghẽn, ngưỡng
ssthresh sẽ được giảm đi tới một nửa của kích thước cwnd hiện thời, và cwnd được
gán giá trị là một segment (giá trị này thay đổi tùy biến thể TCP). Bằng cách này,
TCP giảm tốc độ gửi dữ liệu và chuyển về giai đoạn slow start cho đến khi kích
thước cwnd bằng hoặc lớn hơn ssthresh, hoặc việc mất gói xảy ra. Lúc này, giới
hạn trên cho slow start bằng một nửa tốc độ khi xảy ra mất gói và được xác định
bằng giá trị mới của ssthresh.
b) Giải thuật congestion avoidance
Giai đoạn congestion avoidance được sử dụng khi kích thước cửa sổ cwnd bằng
hoặc lớn hơn ngưỡng ssthresh để thăm dò khả năng của mạng. Theo [1], khi giá trị
cwnd và ssthresh bằng nhau, bên gửi có thể sử dụng slow start hoặc congestion
avoidance. Trong một vài biến thể TCP, ssthresh có thể có giá trị cao, hoặc được
cấu hình bằng với kích thước cửa sổ do bên nhận thông báo. Trong pha congestion
avoidance, kích thước cửa sổ cwnd tăng lên tuyến tính và chậm hơn so với trong
pha slow start, do cwnd được tăng lên một segment cho mỗi chu trình di chuyển
(round-trip time), tức là đối với mỗi ACK không lặp (non-duplicate), cwnd được
tăng thêm 1/cwnd. Việc tăng này diễn ra cho đến khi cwnd đạt tới kích thước cửa
sổ mà bên nhận thông báo, hoặc tới khi xảy ra mất gói. Khoảng thời gian để cwnd
đạt được giá trị cửa sổ mà bên nhận thông báo tính theo công thức
slowstart_time = RTT x log2WS,
trong đó RTT là thời gian chu trình di chuyển, WS là kích thước cửa sổ bên nhận
thông báo tính bằng số segment [4].
c) Giải thuật Fast retransmit
Một segment được truyền lại khi quá thời gian chờ gửi lại (thực chất là khoảng
thời gian chờ gói tin hồi đáp). TCP có thể truyền lại segment bị mất nhanh hơn
bằng cách sử dụng giải thuật fast retransmit, dựa trên nguyên tắc khuyến cáo bên
nhận nên gửi ngay một ACK lặp lại khi nhận được một gói dữ liệu sai thứ tự. Khi
nhận được 3 ACK lặp lại, giải thuật fast retransmit sẽ lập tức truyền lại segment bị
mất mà không phải chờ cho tới khi quá thời gian chờ gửi lại. Sau đó giá trị ngưỡng
ssthresh được gán bằng một nửa giá trị cwnd, với giá trị tối thiểu là 2 segment. Giá
trị cwnd được gán bằng ssthresh + 3 segment, theo đó cwnd tăng thêm số segment
gây nên ACK lặp lại (tức là 3). Đối với mỗi ACK lặp lại nhận được tiếp theo,
cwnd tăng thêm 1 segment. Nếu giá trị mới của cwnd cho phép, một segment mới
sẽ được gửi đi. Sau khi thực hiện fast retransmit, TCP sẽ thực hiện pha fast
recovery.
d) Giải thuật Fast recovery
Do bên nhận chỉ tạo ra và gửi một ACK lặp lại khi một segment đã tới nơi, việc
nhận được ACK lặp lại không chỉ báo hiệu một segment đã bị mất, mà còn cho
thấy một segment đã rời khỏi mạng. Đó là lý do cho việc thực hiện congestion
avoidance thay vì slow start.
Pha fast recovery được sử dụng khi nhận được một gói tin ACK hồi đáp cho dữ
liệu đã gửi. Kích thước cwnd được gán bằng giá trị ssthresh (đã được thay đổi
trong pha fast retransmit). Thực tế, khi này giai đoạn congestion avoidance được
thực hiện với tốc độ giảm đi một nửa so với tốc độ khi segment bị mất. Lưu ý rằng
nếu quá thời gian chờ hồi đáp (retransmission timer), bên gửi bắt buộc thực hiện
slow start.
Giải thuật fast recovery được áp dụng đầu tiên trong biến thể TCP-Reno. Đây là