체크섬(checksum)은 데이터에서 계산해 데이터 뒤에 덧붙여 보내는 값으로, 오류를 검출하는 데 쓴다.[1][2] 수신 측은 받은 데이터로 체크섬을 다시 계산해 오류를 검사한다.[2][3]

체크섬은 데이터를 바이트나 워드 단위로 더한 합으로 만들기도 한다.[3][4]

인터넷 체크섬

RFC 1071은 IP(Internet Protocol), UDP, TCP가 쓰는 체크섬을 인터넷 체크섬이라 부른다.[3] RFC 791은 IP 헤더 체크섬을 헤더의 모든 16비트 워드를 1의 보수로 더한 합의 1의 보수로 정한다.[5] RFC 9293은 TCP 체크섬을 의사 헤더를 포함한 헤더와 데이터의 16비트 워드를 같은 방식으로 더해 구하도록 정한다.[6] RFC 768은 UDP 체크섬을 의사 헤더, UDP 헤더, 데이터를 같은 방식으로 더해 구하도록 정한다.[7]

1의 보수 덧셈은 최상위 비트에서 넘친 올림수를 최하위 비트에 다시 더한다.[3][8]

RFC 791과 RFC 9293은 체크섬을 계산할 때 체크섬 필드를 0으로 두도록 정한다.[5][6] RFC 1071에 따르면 수신 측이 체크섬 필드까지 포함해 1의 보수 합을 구했을 때 모든 비트가 1이면 검사를 통과한다. 1의 보수 합은 교환 법칙과 결합 법칙이 성립해서, 바이트의 짝·홀 자리만 지키면 어떤 순서와 묶음으로 더해도 합이 같다. 또 하드웨어의 바이트 순서와 상관없이 같은 방법으로 구할 수 있다.[3]

덧셈으로 만드는 체크섬은 서로 다른 두 블록의 같은 비트 자리에서 한쪽의 1이 0으로, 다른 쪽의 0이 1로 함께 뒤집힌 오류를 찾지 못한다. 한 블록이 줄어든 만큼 다른 블록이 늘어 합이 그대로이기 때문이다.[9]

Fletcher 체크섬과 Adler-32

Fletcher 체크섬은 데이터를 더한 합 와, 를 다시 누적한 합 두 개를 체크섬으로 쓴다.[4][10] RFC 1146에 따르면 에는 옥텟마다 자리에 따른 가중치가 붙어서, Fletcher 알고리즘은 표준 TCP 체크섬과 달리 데이터그램 안에서 옥텟이나 워드가 자리를 바꾼 것을 찾아낸다.[10]

RFC 1950에 따르면 Adler-32는 Fletcher 알고리즘을 32비트로 넓히고 개선한 것이다. zlib 포맷의 Adler-32는 바이트의 합 과 값들의 합 로 이루어진다. 두 합은 65521로 나눈 나머지로 유지하고, 은 1, 는 0에서 시작하며, 결과는 로 저장한다. zlib 포맷은 압축 전 데이터의 Adler-32를 싣고, 이 포맷을 따르는 압축 해제기는 이를 검사해 값이 틀리면 오류를 알려야 한다. 두 합 가운데 바이트를 더하기만 한 은 와 달리 바이트의 위치와 순서에 민감하지 않다.[11]

LIN이 쓰는 체크섬은 LIN에서 다룬다.

CRC와의 차이

CRC는 체크섬보다 오류 검출 능력이 크다.[2][3] RFC 1071에 부록으로 실린 IEN 45에 따르면 CRC 다항식 부호는 프로그램으로 구현하기에 비용이 크다.[3]

다만 덧셈으로 만드는 체크섬도 짧은 버스트 오류는 모두 찾아낸다. 체크섬 크기가 비트일 때 2의 보수 덧셈 체크섬은 길이 비트 이하, 1의 보수 덧셈 체크섬은 비트 이하의 버스트 오류를 모두 찾아낸다.[9]

[1]
IEC, “IEC 60050-811 International Electrotechnical Vocabulary — 811-37-15 check sequence.” 2017. Accessed: Sep. 29, 2026. [Online]. Available: https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=811-37-15
[2]
“AN1148: Cyclic Redundancy Check (CRC),” Microchip Technology Inc., 2008. Accessed: Sep. 29, 2026. [Online]. Available: https://ww1.microchip.com/downloads/en/AppNotes/01148a.pdf
[3]
IETF, “RFC 1071 Computing the Internet Checksum.” 1988. Accessed: Sep. 29, 2026. [Online]. Available: https://www.rfc-editor.org/rfc/rfc1071
[4]
“MPLAB XC8 C Compiler User’s Guide for PIC MCU,” Microchip Technology Inc., 2026. Accessed: Sep. 29, 2026. [Online]. Available: https://ww1.microchip.com/downloads/aemDocuments/documents/DEV/ProductDocuments/UserGuides/MPLAB-XC8-C-Compiler-Users-Guide-for-PIC-50002737.pdf
[5]
IETF, “RFC 791 Internet Protocol.” 1981. Accessed: Sep. 26, 2026. [Online]. Available: https://www.rfc-editor.org/rfc/rfc791
[6]
IETF, “RFC 9293 Transmission Control Protocol (TCP).” 2022. Accessed: Sep. 28, 2026. [Online]. Available: https://www.rfc-editor.org/rfc/rfc9293
[7]
IETF, “RFC 768 User Datagram Protocol.” 1980. Accessed: Sep. 29, 2026. [Online]. Available: https://www.rfc-editor.org/rfc/rfc768
[8]
“ENC28J60 Stand-Alone Ethernet Controller with SPI Interface,” Microchip Technology Inc., 2012. Accessed: Sep. 26, 2026. [Online]. Available: https://ww1.microchip.com/downloads/en/DeviceDoc/39662e.pdf
[9]
T. C. Maxino and P. J. Koopman, “The Effectiveness of Checksums for Embedded Control Networks,” IEEE Transactions on Dependable and Secure Computing, vol. 6, no. 1, pp. 59–72, 2009, Accessed: Sep. 30, 2026. [Online]. Available: https://users.ece.cmu.edu/~koopman/pubs/maxino09_checksums.pdf
[10]
IETF, “RFC 1146 TCP Alternate Checksum Options.” 1990. Accessed: Sep. 29, 2026. [Online]. Available: https://www.rfc-editor.org/rfc/rfc1146
[11]
IETF, “RFC 1950 ZLIB Compressed Data Format Specification version 3.3.” 1996. Accessed: Sep. 29, 2026. [Online]. Available: https://www.rfc-editor.org/rfc/rfc1950