4

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

4.3.

3 Các thuật toán kiểm soát tắc nghẽn TCP

Một điểm khác biệt lớn giữa TCP và UDP là thuật toán điều khiển tắc nghẽn.
Thuật toán tắc nghẽn TCP ngăn người gửi vượt quá dung lượng của mạng (ví
dụ: các liên kết WAN chậm hơn). TCP có thể điều chỉnh tốc độ của người gửi
theo dung lượng mạng và cố gắng tránh các tình huống tắc nghẽn tiềm ẩn. Để
hiểu sự khác biệt giữa TCP và UDP, hiểu các thuật toán điều khiển tắc nghẽn
TCP cơ bản là rất hữu ích.

Một số cải tiến kiểm soát tắc nghẽn đã được thêm vào và đề xuất cho TCP
trong những năm qua. Đây vẫn là một lĩnh vực nghiên cứu đang hoạt động và
đang diễn ra, nhưng các triển khai hiện đại của TCP có chứa bốn thuật toán
đan xen nhau làm tiêu chuẩn Internet cơ bản:

Bắt đầu chậm

Tránh ùn tắc

Truyền lại nhanh chóng

Chóng hồi phục

Bắt đầu chậm

Các triển khai cũ của TCP bắt đầu một kết nối với việc người gửi đưa nhiều
phân đoạn vào mạng, lên đến kích thước cửa sổ được người nhận quảng
cáo. Mặc dù điều này là OK khi hai máy ở trong cùng một mạng LAN, nhưng
nếu có các bộ định tuyến và các liên kết chậm hơn giữa người gửi và người
nhận, các vấn đề có thể phát sinh. Một số bộ định tuyến trung gian không thể
xử lý nó, các gói bị rớt, kết quả truyền lại và hiệu suất bị giảm sút.

Thuật toán để tránh điều này được gọi là bắt đầu chậm. Nó hoạt động bằng
cách quan sát rằng tốc độ mà các gói mới sẽ được đưa vào mạng là tốc độ
mà các báo nhận được trả lại bởi đầu bên kia. Khởi động chậm thêm một cửa
sổ khác vào TCP của người gửi: cửa sổ tắc nghẽn, được gọi là cwnd. Khi một
kết nối mới được thiết lập với máy chủ trên mạng khác, cửa sổ tắc nghẽn
được khởi tạo cho một phân đoạn (ví dụ: kích thước phân đoạn do đầu bên
kia thông báo hoặc theo mặc định, thường là 536 hoặc 512).Note: Congestion
control is defined in RFC 2581. Additionally, RFC 3390 updates RFC 2581
such that TCP implementations can initialize the congestion window to
between two and four segments, with an upper limit of 4 K.

Mỗi khi nhận được ACK, cửa sổ tắc nghẽn sẽ tăng lên một đoạn. Người gửi có
thể truyền giá trị thấp hơn của cửa sổ tắc nghẽn hoặc cửa sổ được quảng cáo.
Cửa sổ tắc nghẽn là kiểm soát luồng do người gửi áp đặt, trong khi cửa sổ được
quảng cáo là kiểm soát luồng do người nhận áp đặt. Trước đây là dựa trên đánh
giá của người gửi về tình trạng tắc nghẽn mạng được nhận thức; thứ hai liên
quan đến lượng không gian đệm khả dụng tại máy thu cho kết nối này.
Người gửi bắt đầu bằng cách truyền một phân đoạn và chờ ACK của nó. Khi
nhận được ACK đó, cửa sổ tắc nghẽn được tăng lên từ một đến hai và có thể
gửi hai phân đoạn. Khi mỗi trong số hai phân đoạn đó được xác nhận, cửa sổ
tắc nghẽn được tăng lên bốn. Điều này cung cấp sự tăng trưởng theo cấp số
nhân, mặc dù nó không chính xác theo cấp số nhân, bởi vì người nhận có thể trì
hoãn các ACK của nó, thường gửi một ACK cho mỗi hai phân đoạn mà nó nhận
được.
Tại một thời điểm nào đó, có thể đạt đến dung lượng của mạng IP (ví dụ: các
liên kết WAN chậm hơn) và một bộ định tuyến trung gian sẽ bắt đầu loại bỏ các
gói. Điều này cho người gửi biết rằng cửa sổ tắc nghẽn của nó đã quá lớn. Xem
Hình 4-20 để biết tổng quan về hoạt động khởi động chậm.

Tránh ùn tắc
Giả định của thuật toán là mất gói do hư hỏng là rất nhỏ (dưới 1%). Do đó, việc
mất một gói tín hiệu làm tắc nghẽn một nơi nào đó trong mạng giữa nguồn và
đích. Có hai dấu hiệu của việc mất gói:
Thời gian chờ xảy ra.
ACK trùng lặp được nhận.
Tránh tắc nghẽn và khởi động chậm là các thuật toán độc lập với các mục tiêu
khác nhau. Nhưng khi xảy ra tắc nghẽn, TCP phải làm chậm tốc độ truyền gói tin
vào mạng và gọi khởi động chậm để mọi thứ hoạt động trở lại. Trong thực tế,
chúng được thực hiện cùng nhau.
Tính năng tránh tắc nghẽn và khởi động chậm yêu cầu duy trì hai biến cho mỗi
kết nối:
Cửa sổ tắc nghẽn, cwnd Kích thước ngưỡng khởi động chậm, ssthresh
Thuật toán kết hợp hoạt động như sau:
1. Khởi tạo cho một kết nối nhất định đặt cwnd thành một phân đoạn và ssthresh
thành 65535 byte.
2. Quy trình xuất TCP không bao giờ gửi nhiều hơn giá trị thấp hơn của cwnd
hoặc cửa sổ được quảng cáo của người nhận.
3. Khi xảy ra tắc nghẽn (hết thời gian chờ hoặc ACK trùng lặp), một nửa kích
thước cửa sổ hiện tại được lưu trong ssthresh. Ngoài ra, nếu tắc nghẽn được
biểu thị bằng thời gian chờ, cwnd được đặt thành một phân đoạn.
4. Khi dữ liệu mới được đầu bên kia thừa nhận, hãy tăng cwnd, nhưng cách nó
tăng phụ thuộc vào việc TCP đang thực hiện khởi động chậm hay tránh tắc
nghẽn. Nếu cwnd nhỏ hơn hoặc bằng ssthresh, TCP đang khởi động chậm; nếu
không, TCP đang thực hiện tránh tắc nghẽn.
Bắt đầu chậm tiếp tục cho đến khi TCP đi được một nửa so với vị trí ban đầu khi
xảy ra tắc nghẽn (vì nó đã ghi lại một nửa kích thước cửa sổ gây ra sự cố ở
bước 2), và sau đó tính năng tránh tắc nghẽn được thực hiện. Bắt đầu chậm có
cwnd bắt đầu ở một phân đoạn và tăng lên một phân đoạn mỗi khi nhận được
ACK. Như đã đề cập trước đó, điều này sẽ mở ra cửa sổ theo cấp số nhân: gửi
một phân đoạn, sau đó hai, rồi bốn, v.v.
Tính năng tránh tắc nghẽn yêu cầu rằng cwnd được tăng lên bằng segsize *
segsize / cwnd mỗi khi nhận được ACK, trong đó segsize là kích thước phân
đoạn và cwnd được duy trì theo byte. Đây là mức tăng trưởng tuyến tính của
cwnd, so với mức tăng trưởng theo cấp số nhân của giai đoạn khởi đầu chậm.
Mức tăng cwnd nên nhiều nhất là một đoạn cho mỗi thời gian khứ hồi (bất kể số
lượng ACK nhận được trong thời gian khứ hồi đó), trong khi số lượng ACK bắt
đầu tăng chậm theo số lượng ACK nhận được trong thời gian khứ hồi. Nhiều
triển khai thêm một phần nhỏ kích thước phân đoạn không chính xác (thường là
kích thước phân đoạn chia cho 8) trong quá trình tránh tắc nghẽn. Điều này là
sai và không nên được mô phỏng trong các bản phát hành trong tương lai. Xem
Hình 4-21 để biết ví dụ về hoạt động khởi động chậm TCP và tránh tắc nghẽn.
CWND

ssthresh

cwnd

Round Trip Times

Figure 4-21 TCP: Slow start and congestion avoidance behavior in action

Truyền lại nhanh chóng

Truyền lại nhanh chóng tránh để TCP chờ hết thời gian để gửi lại các phân đoạn
bị mất.

Các sửa đổi đối với thuật toán tránh tắc nghẽn đã được đề xuất vào năm 1990.
Trước khi mô tả thay đổi, hãy nhận ra rằng TCP có thể tạo ra một xác nhận ngay
lập tức (một ACK trùng lặp) khi nhận được một phân đoạn không theo thứ tự.
ACK trùng lặp này không nên bị trì hoãn. Mục đích của ACK trùng lặp này là để
đầu bên kia biết rằng một phân đoạn đã được nhận không theo thứ tự và cho nó
biết số thứ tự được mong đợi.

Bởi vì TCP không biết liệu ACK trùng lặp là do một phân đoạn bị mất hay chỉ là
sự sắp xếp lại các phân đoạn, nó sẽ đợi một số lượng nhỏ ACK trùng lặp được
nhận. Giả định rằng nếu chỉ có sự sắp xếp lại các phân đoạn, sẽ chỉ có một hoặc
hai ACK trùng lặp trước khi phân đoạn được sắp xếp lại được xử lý, sau đó sẽ
tạo ra một ACK mới. Nếu ba hoặc nhiều ACK trùng lặp được nhận liên tiếp, thì
đó là một dấu hiệu mạnh mẽ cho thấy một phân đoạn đã bị mất. TCP sau đó
thực hiện truyền lại những gì có vẻ là phân đoạn bị thiếu, mà không cần đợi bộ
đếm thời gian truyền lại hết hạn. Xem Hình 4-22 để biết tổng quan về hoạt động
truyền lại nhanh TCP.

You might also like