Thơng thƣờng các gói tin TCP chỉ chứa duy nhất một trƣờng kiểm tra tổng (Checksum) theo phƣơng pháp CRC cho toàn bộ segmnet (gồm cả header và data). Trong trƣờng hợp trƣờng Checksum duy nhất này bị lỗi sẽ dẫn đến cả gói tin sẽ đƣợc cho là có lỗi và sẽ bị loại bỏ. Trong nhiều trƣờng hợp, phần dữ liệu (data) bị lỗi nhƣng phần Header khơng lỗi, nếu nhận biết đƣợc điều đó thì có thể lấy đƣợc các thơng tin quan trọng trong phần Header. Bằng cách thêm một trƣờng Checksum riêng biệt vào phần TCP Header option để kiểm tra CRC cho riêng TCP Header và phần đầu giả IP (pseudo-IP header), bên nhận gói tin có thể kiểm tra đƣợc tính tồn vẹn của phần TCP Header, R. K. Balan và các cộng sự đã mô tả rất chi tiết trong [21]. Thông qua việc kiểm tra đƣợc đƣợc tính tồn vẹn của TCP Header khi gói tin nhận đƣợc bị lỗi, bên nhận có thể gửi thông báo ACK đặc biệt trở lại với bên gửi nhằm chỉ ra chính xác gói tin bị hỏng. Thông báo ACK đặc biệt này sẽ chứa số tuần tự (sequence number) của gói tin bị hỏng. Thông báo này cũng giống nhƣ các thông báo thông thƣờng khác ngoại trừ chúng có thêm các trƣờng lựa chọn.
Để thực hiện đƣợc HACK TCP, cần sửa đổi các thủ tục gửi và nhận dữ liệu nhƣ đƣợc trình bày sau đây [21].
Sửa đổi bên gửi TCP
Khi gửi các gói dữ liệu, bên gửi sẽ kiểm tra xem lựa chọn Header Checksum có cần phải thêm vào khơng, nếu khơng cần lựa chọn này thì bên gửi TCP sẽ thực hiện việc gửi gói tin TCP bình thƣờng. Trong trƣờng hợp ngƣợc lại, bên gửi sẽ tính tốn Header Checksum cho gói dữ liệu và gán nó vào trong trƣờng Header Checksum option, sau đó bên gửi sẽ gửi gói tin đi nhƣ các gói tin thơng thƣờng.
Hình 3.4 Bên gửi TCP HACK khi đóng gói dữ liệu
Sửa đổi bên nhận TCP
Khi bên nhận nhận đƣợc gói tin, nó sẽ kiểm tra lại tính tồn vẹn của gói tin theo thuật tốn Checksum thơng thƣờng của TCP. Nếu gói tin khơng hƣ hỏng, bên nhận sẽ xử lý chúng một cách bình thƣờng. Trong trƣờng hợp gói tin bị hỏng, bên nhận sẽ thực hiện nhƣ sau:
(1) Kiểm tra lại tính tồn vẹn của TCP Header trong gói tin bị hỏng, sử dụng giá trị của Header Checksum chứa trong trƣờng Header Checksum option.
(2) Nếu nhƣ TCP Header bị hỏng, gói tin sẽ bị loại bỏ và không một xử lý nào đƣợc thực hiện thêm.
(3) Nếu nhƣ TCP Header cịn ngun vẹn khơng bị hỏng, một thông báo ACK đặc biệt sẽ đƣợc gửi trở lại cho bên gửi thơng báo về gói tin bị hỏng. Thông báo này chứa Header Checksum ACK option chỉ rõ cho bên gửi biết thông báo ACK này đã phát sinh ra khi nhận đƣợc gói tin bị hỏng. Nó chứa số tuần tự của gói tin bị hỏng, cho phép bên gửi có thể truyền lại duy nhất gói tin đã bị hỏng.
Việc bên nhận gửi ngay thơng báo cho bên gửi biết chính xác gói tin bị lỗi sẽ giúp cho bên gửi nhanh chóng phát lại gói tin bị lỗi mà khơng cần đợi tới khi đồng hồ quản lý thời gian phát của gói tin đó hết giờ (timeout), thơng qua đó làm tăng hiệu suất sử dụng đƣờng truyền.
Hình 3.5 Bên nhận TCP HACK Sửa đổi bên gửi khi nhận đƣợc ACK Sửa đổi bên gửi khi nhận đƣợc ACK
Khi bên gửi dữ liệu nhận đƣợc thơng báo ACK, nó sẽ kiểm tra trƣờng Header Checksum ACK option của thông báo. Nếu trƣờng lựa chọn này khơng đƣợc thiết lập, thì thơng báo ACK này sẽ xử lý nhƣ các thông báo thông thƣờng. Nếu lựa chọn Header Checksum ACK đã đƣợc thiết lập, thì bên gửi dữ liệu sẽ thực hiện nhƣ sau:
(1) Số tuần tự của gói tin bị hỏng sẽ đƣợc đọc từ Header Checksum ACK option.
(2) TCP sẽ phát lại gói tin bị hỏng bằng thuật tốn phát lại có lựa chọn. Các gói tin cần phát lại này đƣợc thực hiện với tốc độ cho phép ở cửa sổ tắc nghẽn hiện tại (cwnd).
(3) Khơng có thêm một xử lý nào đƣợc thực hiện, khác với trƣờng hợp nhận đƣợc TCP ACK thơng thƣờng.
Hình 3.6 Bên gửi TCP HACK khi nhận ACK
Biên nhận HACK giúp TCP phân biệt đƣợc các mất mát do gói tin bị lỗi qua đó cải thiện hiệu suất TCP. Phối kết hợp sử dụng HACK với sử dụng SACK sẽ cho kết quả tốt ngay cả khi tỷ suất lỗi tăng lên và đạt hiệu suất cao hơn so với khi sử dụng hai kỹ thuật một cách riêng rẽ [21] [22].