Data Center TCP, hay còn gọi là DCTCP là giao thức tối ƣu đáng chú ý nhất cho TCP trong môi trƣờng Data Center. DCTCP luôn duy trì hàng đợi nhỏ ở các switch trung gian, nhờ vậy đảm bảo đƣợc độ trễ thấp, giảm thiểu mất gói trong khi vẫn duy trì đƣợc thông lƣợng cao và chỉ yêu cầu switch có bộ nhớ đệm nhỏ.
Giải thuật TCP thông thƣờng sẽ phản ứng với sự hiện diện của tắc nghẽn, khi có tắc nghẽn xảy ra thì bên gửi giảm cửa sổ tắc nghẽn đi một nửa. DCTCP mặt khác lại phản ứng với mức độ của tắc nghẽn, tùy theo tắc nghẽn nhiều hay ít mà bên gửigiảm cửa sổ tắc nghẽn tƣơng ứng.
Sở dĩ DCTCP đạt đƣợc hiệu quả nhƣ vậy là nhờ sử dụng tính năng ECN trên các switch cho phép DCTCP nhận đƣợc những cảnh báo rõ ràng về tắc nghẽn trong mạng và phản ứng nhanh chóng, kịp thời với tắc nghẽn.
2.3.1 Chính sách quản lý hàng đợi tại switch
Chính sách RED sử dụng trong DCTCP rất đơn giản. Ở đây, ta chỉ sử dụng một tham số duy nhất K là ngƣỡng đánh dấu. Tức là min_th = max_th = K.
30
Hình 14 – Chính sách hàng đợi RED cho DCTCP
Một gói tin đến sẽ bị đánh dấu vỡi mã CE (bị tắc nghẽn) trong phần IP Header nếu hàng đợi hiện tại của bộ nhớ đệm switch có chiều dài vƣợt quá ngƣỡng K. Nhƣ vậy khi tắc nghẽn ở mức độ nhỏ thì số gói tin bị đánh dấu ít và khi tắc nghẽn ở mức độ lớn thì số gói tin bị đánh dấu nhiều. Nhƣ vậy, dựa vào số lƣợng gói tin đánh dấu mà bên gửi biết đƣợc qui mô, mức độ của tắc nghẽn để đƣa ra phản ứng phù hợp, tƣơng ứng.
2.3.2 Kiểm tra gói tin bị đánh dấu tại bên nhận và thông báo cho bên gửi biết
Với TCP thông thƣờng thì khi bên nhận nhận đƣợc gói tin bị đánh dấu với mã CE thì nó sẽ thông báo cho bên gửi biết bằng cách gửi gói tin ACK đã đƣợc thiết lập cờ ECE trong phần TCP Header cho đến khi nhận đƣợc xác nhận của bên gửi rằng nó đã nhận đƣợc thông báo (thông qua cờ CWR).
Với DCTCP thì bên nhận nhận đƣợc bao nhiêu gói tin bị đánh dấu CE thì nó chỉ gửi đi bấy nhiêu ACK đƣợc thiết lập cờ ECE. Nhờ vậy, bên gửi có thể biết đƣợc chính xác có bao nhiêu gói tin bị đánh dấu và từ đó biết đƣợc mức độ tắc nghẽn hiện tại trong mạng.
DCTCP sử dụng kĩ thuật Delayed ACK (ACK chậm) để giảm bớt băng thông tiêu tốn cho việc truyền các gói tin ACK. Thay vì gửi ACK ngay lập tức, thì bên nhận sẽ
31
gộp m gói tin ACK liên tiếp để gửi. Thông thƣờng chọn m = 2 và trong trƣờng hợp DCTCP thì bên nhận khi nhận đƣợc 2 gói tin bị đánh dấu CE (hoặc không bị đánh dấu) liên tiếp thì chỉ gửi đi một ACK với cờ ECE (hoặc không có cờ ECE). Để thực hiện điều này, bên nhận lƣu giữ biến 2 trạng thái để quyết định xem có thiết lập cờ ECE trong gói tin ACK gửi đi không.
Hình 15 – Hai trạng thái thiết lập cờ ECE cho ACK
Nhƣ vậy, có 2 trạng thái CE để chỉ gói tin cuối cùng mà bên nhận nhận đƣợc có bị đánh dấu CE không.
Giả sử trạng thái hiện tại CE=0 tức là gói tin vừa nhận đƣợc trƣớc đó không bị đánh dấu CE, nếu bên nhận tiếp tục nhận đƣợc gói tin không bị đánh dấu thì trạng thái tiếp tục là CE=0 và nó gửi đi 1 ACK mà không có cờ ECE. Nếu lúc đó nó nhận đƣợc gói tin bị đánh dấu CE thì nó gửi ngay 1 ACK không có cờ ECE và chuyển sang trạng thái CE=1.
Khi đang ở trạng thái CE=1, nếu bên nhận nhận đƣợc gói tin bị đánh dấu CE thì nó tiếp tục ở trạng thái CE=1 và gửi đi 1 ACK có cờ ECE nhằm thông báo rằng nó vừa nhận đƣợc 2 gói tin bị đánh dấu CE liên tiếp. Nếu bên nhận nhận đƣợc gói tin không bị đánh dấu CE thì nó gửi ngay 1 ACK có cờ ECE và chuyển sang trạng thái CE=0.
32
2.3.3 Điều chỉnh kích thƣớc cửa sổ tại bên gửi theo mức độ tắc nghẽn
Bên gửi luôn ƣớc lƣợng tỷ lệ gói tin bị đánh dấu là α. Giá trị α đƣợc cập nhật sau mỗi khoảng thời gian 1 RTT nhƣ sau:
α ← (1 – g)α +gF
Trong đó F là tỷ lệ gói tin bị đánh dấu CE trong khoảng thời gian 1 RTT trƣớc đó.
Giá trị g thuộc khoảng (0,1) là trọng số mang ý nghĩa ảnh hƣởng của F lên giá trị mới của α.
Ý nghĩa của giá trị α
Giá trị của α nằm trong khoảng (0,1). Ở đây ta xem mạng tắc nghẽn là khi hàng đợi của bộ nhớ đệm switch có chiều dài vƣợt quá ngƣỡng K.
Khi chiều dài hàng đợi vƣợt quá ngƣỡng K thì switch sẽ đánh dấu CE đối với các gói tin đến và mạng càng tắc nghẽn thì tỷ lệ gói tin bị đánh dấu càng lớn và giá trị α sẽ tiến dần đến 1.
Khi chiều dài hàng đợi nhỏ hơn K thì switch không đánh dấu các gói tin đến nên tỷ lệ gói tin bị đánh dấu sẽ bằng 0 dẫn đến việc khi mạng không tắc nghẽn thì giá trị α sẽ tiến dần đến 0.
Nhƣ vậy có thể xem giá trị α là ƣớc lƣợng xác suất mà mạng bị tắc nghẽn.
Phản ứng của bên gửi khi có tắc nghẽn
Với TCP thông thƣờng hỗ trợ ECN thì khi bên gửi nhận đƣợc ACK có cờ ECE thì nó tiến hành giảm cửa sổ tắc nghẽn đi một nửa và chỉ giảm đúng 1 lần trong mỗi khoảng thời gian RTT.
DCTCP giữ nguyên các pha trong mô hình điều khiển tắc nghẽn của TCP nhƣ Slow Start, Congestion Avoidance, Fast Recovery, Fast Retransmission, Retransmission Timeout. Và thay vì giảm cửa sổ tắc nghẽn đi một nửa nhƣ TCP thì trong DCTCP, bên gửi sử dụng giá trị α để giảm cửa sổ tắc nghẽn nhƣ sau:
33
cwnd = (1 – α/2)cwnd
Có thể thấy giá trị α là ƣớc lƣợng xác suất mà mạng bị tắc nghẽn nên DCTCP Sender giảm cửa sổ tắc nghẽn tƣơng ứng với mức độ tắc nghẽn. Khi mạng ít tắc nghẽn (α gần 0) thì CWND chỉ giảm đi một ít và khi mạng tắc nghẽn nhiều hoặc trong thời gian dài (α gần 1) thì CWND sẽ giảm gần một nửa, giống nhƣ phƣơng án của TCP.
Nhƣ vậy, khi có tắc nghẽn, tức là chiều dài hàng đợi của switch vƣợt quá ngƣỡng K thì DCTCP Sender phản ứng ngay lập tức. Do đó, giải thuật DCTCP luôn duy trì sao cho chiều dài hàng đợi không vƣợt quá K. Nhƣ vậy hàng đợi của nhỏ nên các gói tin không phải xếp hàng lâu trong hàng đợi, dẫn đến việc đảm bảo các luồng nhỏ không bị các luồng lớn chiếm hàng đợi, gây ảnh hƣởng đến thời gian truyền của các luồng nhỏ.
DCTCP luôn đảm bảo các gói tin không làm đầy bộ nhớ buffer của switch. Nhờ vậy việc mất gói đƣợc giảm thiểu đáng kể và thông lƣợng đƣợc duy trì ở mức cao.