What is Checksum?

Checksum là một chuỗi thông tin giúp kiểm tra độ tin cậy (sự chính xác thứ tự) của gói tin. Bên gửi có nhiệm vụ tạo ra checksum dựa trên dữ liệu gửi đi. Bên nhận có nhiệm vụ xác thực checksum đó để kiểm tra gói tin có bị lỗi hay không.

Giả sử bên gửi tính được giá trị là 11, nhưng bên nhận lại tính được giá trị là 10:

![[Checksum.webp|#x-small]]

Hai giá trị khác nhau đồng nghĩa với việc dữ liệu đã bị sai khác.

Checksum Calculation

Phương pháp tính checksum:

  • Chia chuỗi thông tin thành k khối, mỗi khối có m bit (thường là 16 bit chẳng hạn như IPTCP).
  • Tính tổng dữ liệu k khối (tổng nhị phân).
  • Thực hiện bù 1 (1’s complement, xem thêm Signed Integer) cho tổng nhị phân để tạo thành checksum.

Giả sử ta có chuỗi 32 bit như sau:

  • Bước 1: ta chia chuỗi này thành k = 4 nhóm, mỗi nhóm có m = 8 bits.
  • Bước 2: thực hiện phép cộng nhị phân (xem thêm Bitwise Operations) cho 4 nhóm, được kết quả là .
  • Bước 3: lật tất cả các bit lại (thực hiện phép bù 1) để tạo thành checksum, có giá trị là: .

Ở bên nhận, ta cũng tính tổng 4 khối, nếu dữ liệu không có vấn đề, kết quả thu được vẫn là . Sau đó, ta cộng tổng nhị phân với checksum của bên gửi rồi thực hiện phép bù 1 để kiểm tra lỗi.

Kết quả cho thấy dữ liệu không có lỗi.

Important

Checksum là bắt buộc cho TCPUDP với IPv6. Còn đối với UDP IPv4 thì không.

Resources