Explicit Congestion Notification (ECN) là phương pháp tránh nghẽn mạng chủ yếu cho các gói tin TCP. ECN tránh nghẽn mạng dựa trên việc đánh dấu vào IP header. Thay vì đánh rớt gói tin ngay một cách ngẫu nhiên như RED và WRED thì ECN đánh dấu các gói tin với dấu hiệu tắc nghẽn để thông báo cho thiết bị đầu cuối biết. ECN đánh dấu IP header bằng 2 bits cuối (trong 8 bits) của trường Type Of Service (ToS). Nếu trong mô hình DiffServ, đây là 2 bit ECN trong trường DSCP.
Theo hình 1 2 bits ECN là ECT (ECN – Capable Transport) và CE (Congestion Experienced). Bit ECT được thiết lập bởi nguồn lưu lượng TCP. Router dựa vào bit này để biết gói tin có được đánh dấu ECN không. Bit ECT được bật lên 1 để thông báo tắc nghẽn cho các thiết bị đầu cuối. Bit CE giúp router phát hiện tắc nghẽn trong mạng khi bit này được thiết lập với giá trị là 1.
ECN đánh dấu TCP header bằng 2 bits của trường Reserved field. Đó là cờ ECN-Echo (ECE) và cờ Congestion Window Reduce (CWR). Cờ ECE được thiết lập giúp các thiết bị đầu cuối (giữa máy gửi và máy nhận) thỏa thuận 2 bit ECN vớ nhau. Cờ CWR được sử dụng để báo cho máy gửi giảm số lượng thông tin truyền xuống và báo cho máy nhận biết là máy gửi đã giảm kích thước cửa sổ truyền dữ liệu xuống (congestion window – CWND).
Theo hình 3, thực hiện kết nối TCP giữa 2 thiết bị đầu cuối (Client 2 và
Server1). Hoạt động cụ thể của ECN như sau:
– (1) Client2 thiết lập một kết nối TCP đến Server1. Cả Client2 và Server1 đều sử dụng ECN. Client2 thiết lập giá trị 2 bit ECN (ECT và CE) trong IP header là 01 (ECT = 0, CE = 1).
– (2) Router sử dụng WRED để phát hiện nghẽn. WRED ngẫu nhiên chọn các gói tin để đánh rớt. Vì có cấu hình ECN nên router kiểm tra các gói tin và tìm ra các gói tin được đánh dấu 2 bits ECN. Sau đó, router thiết lập lại 2 bits ECN với giá trị là 11 (ECT = 1, CE = 1) cho các gói tin này và truyền đi thay vì đánh rớt.
– (3) Gói tin được truyền đến Server1 với giá trị của 2 bit ECN vẫn là 11.
– (4) Server1 nhận được các gói tin có giá trị của 2 bit ECN là 11. Trong gói tin gửi trả về cho Client2 từ Server1 sẽ được Server1 đánh dấu vào TCP header. Bit được đánh dấu ở đây là cờ ECE với giá trị được thiết lập là 1. 2 bits ECN được xem là không quan trọng trong gói tin trả về.
– (5) Gói tin trả về Client2 đến router. Nhưng tại đây router không kiểm tra các bits cần đánh dấu trong gói tin và cũng không thiết lập lại các bits này.
– (6) Client2 nhận gói tin trả về với cờ ECE được thiết lập giá trị là 1 trong TCP header. Sau đó, Client2 giảm kích thước CWND liệu xuống 50%.
– (7) Client2 thông báo Server1 biết Client2 đã giảm kích thước CWND xuống 50% bằng cách gửi gói tin đã đánh dấu vào TCP header cho Server1. Các bits được đánh dấu ở đây là 2 bits ECN với giá trị là 01 (ECT = 0, CE = 1) và cờ CWR với giá trị là 1.
Nguyễn Ngọc Đại – VnPro
Hình 1: 2 bits ECN trong trường DSCP
Theo hình 1 2 bits ECN là ECT (ECN – Capable Transport) và CE (Congestion Experienced). Bit ECT được thiết lập bởi nguồn lưu lượng TCP. Router dựa vào bit này để biết gói tin có được đánh dấu ECN không. Bit ECT được bật lên 1 để thông báo tắc nghẽn cho các thiết bị đầu cuối. Bit CE giúp router phát hiện tắc nghẽn trong mạng khi bit này được thiết lập với giá trị là 1.
ECN đánh dấu TCP header bằng 2 bits của trường Reserved field. Đó là cờ ECN-Echo (ECE) và cờ Congestion Window Reduce (CWR). Cờ ECE được thiết lập giúp các thiết bị đầu cuối (giữa máy gửi và máy nhận) thỏa thuận 2 bit ECN vớ nhau. Cờ CWR được sử dụng để báo cho máy gửi giảm số lượng thông tin truyền xuống và báo cho máy nhận biết là máy gửi đã giảm kích thước cửa sổ truyền dữ liệu xuống (congestion window – CWND).
Hình 2: Trường Reserved trong TCP header
Hình 3: Ví dụ cụ thể về hoạt động của ECN
Theo hình 3, thực hiện kết nối TCP giữa 2 thiết bị đầu cuối (Client 2 và
Server1). Hoạt động cụ thể của ECN như sau:
– (1) Client2 thiết lập một kết nối TCP đến Server1. Cả Client2 và Server1 đều sử dụng ECN. Client2 thiết lập giá trị 2 bit ECN (ECT và CE) trong IP header là 01 (ECT = 0, CE = 1).
– (2) Router sử dụng WRED để phát hiện nghẽn. WRED ngẫu nhiên chọn các gói tin để đánh rớt. Vì có cấu hình ECN nên router kiểm tra các gói tin và tìm ra các gói tin được đánh dấu 2 bits ECN. Sau đó, router thiết lập lại 2 bits ECN với giá trị là 11 (ECT = 1, CE = 1) cho các gói tin này và truyền đi thay vì đánh rớt.
– (3) Gói tin được truyền đến Server1 với giá trị của 2 bit ECN vẫn là 11.
– (4) Server1 nhận được các gói tin có giá trị của 2 bit ECN là 11. Trong gói tin gửi trả về cho Client2 từ Server1 sẽ được Server1 đánh dấu vào TCP header. Bit được đánh dấu ở đây là cờ ECE với giá trị được thiết lập là 1. 2 bits ECN được xem là không quan trọng trong gói tin trả về.
– (5) Gói tin trả về Client2 đến router. Nhưng tại đây router không kiểm tra các bits cần đánh dấu trong gói tin và cũng không thiết lập lại các bits này.
– (6) Client2 nhận gói tin trả về với cờ ECE được thiết lập giá trị là 1 trong TCP header. Sau đó, Client2 giảm kích thước CWND liệu xuống 50%.
– (7) Client2 thông báo Server1 biết Client2 đã giảm kích thước CWND xuống 50% bằng cách gửi gói tin đã đánh dấu vào TCP header cho Server1. Các bits được đánh dấu ở đây là 2 bits ECN với giá trị là 01 (ECT = 0, CE = 1) và cờ CWR với giá trị là 1.
Nguyễn Ngọc Đại – VnPro