Là một kỹ thuật cho phép server không cần phải từ chối các kết nối gửi đến khi hàng đợi đã đầy. Thay vào đó, nó encode entry của hàng đợi thành một sequence number và đính kèm trong gói tin SYN+ACK trả về cho client.

Info

Theo đặc tả của TCP, initial sequence number (không nằm trong các gói tin reply) có thể là bất cứ giá trị nào mà bên gửi muốn. Do đó, nó có thể được dùng để chứa dữ liệu.

Nếu server nhận được gói tin ACK có sequence number tăng lên một giá trị so với sequence number mà nó đã gửi thì nó sẽ xây dựng lại entry của hàng đợi và mở kết nối TCP.

Bên dưới là một trong số những hiện thực khả thi của SYN cookie:

  • Gọi t là giá trị timestamp (thường là giá trị trả về của hàm time() trong C và bị dịch phải 6 bit).
  • Gọi m là maximum segment size (MSS): một tham số thuộc phần Options trong các header của TCP cho biết kích thước dữ liệu tối đa mà thiết bị có thể nhận trong một gói tin TCP (TCP segment). Giá trị này không tính các TCP header và IP header (như MTU1).
  • Gọi s là giá trị của hàm băm mật mã cho địa chỉ IP của server, port number của server, địa chỉ IP của client, port number của client và t. Giá trị này có kích thước là 24-bit.

Giá trị initial sequence number (SYN cookie) được tính như sau:

  • 5 bit đầu: t mod 32.
  • 3 bit giữa: giá trị m ở dạng encode.
  • 24 bit cuối: s.

Khi client gửi gói tin ACK nhằm phản hồi gói tin SYN+ACK của server, nó cần phải sử dụng giá trị n + 1 trong trường ACK number với n là initial sequence number mà server đã gửi. Server sau đó sẽ trừ 1 để thu được SYN cookie.

Sau đó, server thực hiện những thao tác sau:

  • Kiểm tra t với thời gian hiện tại để xem kết nối có hết hạn chưa.
  • Tính toán lại s và so khớp để đảm bảo tính hợp lệ của SYN cookie. Do các cuộc tấn công SYN flooding đều dùng các địa chỉ IP giả mạo và
  • Decode m ở dạng 3-bit encoding nhằm tái xây dựng lại entry của hàng đợi.

Từ thời điểm này trở đi, kết nối được thiết lập như bình thường.

list
from outgoing([[SYN Cookie]])
sort file.ctime asc

Resources

Footnotes

  1. xem thêm MTU Discovery