Dựa trên nhận định của các tác giả WDA rằng nếu gói đầu tiên của người dùng sau khoảng RTO có thể né được đợt tấn công của kẻ tấn công, các gói tin sau đó sẽ nhận được một dịch vụ tốt và truyền đi bình thường. Vì vậy, để bảo vệ chống lại các cuộc tấn công tốc độ thấp, chúng ta có thể thêm một hàng đợi vào WDAQ: một hàng đợi super_queue với độ ưu tiên cao nhất, như hình 3.1. Hàng đợi có độ ưu tiên cao nhất này sẽ đặc biệt chỉ dành cho các gói tin đầu tiên của người dùng sau khoảng RTO có thể đi vào, nhờ vậy gói tin này sẽ được phục vụ tốt và gần như không thể bị hủy gói. Dựa trên cách tính RTO được mô tả trong RFC 6298 [34] tại mục (2.4) phần 2 – Thuật toán cơ bản tính RTO, khi giá trị RTO tính được có giá trị nhỏ hơn 1 giây thì sẽ được làm tròn lên thành 1 giây, do đó giá trị RTO nhỏ nhất được xác định là minRTO = 1 giây. Như vậy khi Policer phát hiện các gói tin đầu tiên của một client sau một khoảng thời gian lớn hơn một giây (minRTO,) trong trường hợp gói tin trước đó bị hủy bởi một hàng đợi của WDA, tức là Policer phát hiện ra trường hợp tắc nghẽn xảy ra và truyền lại sau RTO giây, khi đó Policer sẽ đánh dấu gói tin để chuyển vào hàng đợi super_queue với độ ưu tiên cao nhất này. Gói tin đi vào hàng đợi super_queue sẽ được phục vụ với độ ưu tiên cao, vì vậy client sẽ vượt qua được giai đoạn truyền tin chậm trên khoảng thời gian lớn RTO, và lần truyền gói tin sau Client sẽ quay lại truyền tin trên khoảng thời gian nhỏ RTT, sử dụng cơ chế AIMD. Các gói tin khác sẽ được Policer xử lí bình thường, đưa vào hàng đợi high_queue hoặc low_queue chứ không đưa vào hàng đợi super_queue nữa. Vì vậy với người dùng hợp lệ, họ chỉ phát hiện ra việc tải trang Web có độ trễ lớn hơn một chút, sau đó sẽ nhận được dịch vụ bình thường như trước, còn với kẻ tấn công từ chối dịch vụ tốc độ thấp thì không thể làm đầy hàng đợi super_queue để duy trì trạng thái tắc nghẽn và truyền lại gói tin của các client một cách vô hạn nữa. Giả mã của phương pháp này được trình bày như sau đây:
When drop packet p //Khi hủy bỏ một gói tin p
isFirstRetransmitPacket = true; //Đặt biến nghi truyền lại sau tắc nghẽn mLastPacketDrop = true;
When packet p //Khi một gói tin đến
If mLastPacketDrop == true and isFirstRetransmitPacket == true and
timeBtwPackets >= 1 then
queue = SUPER_Q; //Gửi gói tin vào hàng đợi SUPER_Q isFirstRetransmitPacket = false;
mLastPacketDrop = false;
end if;
Qua việc thực hiện triển khai và mô phỏng tôi thấy kết quả đạt được rất khả quan. Với trường hợp xấu nhất, thông lượng mạng hợp lệ bị suy giảm tới 20%. Tuy vậy trong các trường hợp khác, thông lượng mạng hợp lệ không hề giảm quá 10%. Trường hợp xấu nhất chỉ chiếm tới 10% kết quả, còn lại 90% kết quả thông lượng mạng hợp lệ giảm không quá 10% so với thông lượng khi không có tấn công.