Checksum은 network를 통해 패킷을 송/수신하는 중에 헤더나 데이터가 손상되지 않았다는 것을 보증하기 위해 사용된다.
프로토콜에 상관없이 Checksum을 계산하는 알고리즘은 동일하지만 Checksum이 보증하는 필드가 각각 다르다.
_____________________________________________________________________________
IP : IP Header
ICMP : ICMP Header + Data
TCP : TCP Header + Data + TCP Psuedo 헤더
UDP : UDP Header + Data + UDP Psuedo 헤더
_____________________________________________________________________________
IP Checksum은 IP Header만을 보증하며 IP가 전달하는 데이터에 대해서는 보장하지 않는다.
IPv6에서는 IP Header에서 Checksum이 수행되지 않으며 IPv4에서도 데이터의 보증은 TCP, UDP가 수행한다.
TCP/IP 프로토콜에서 Checksum 계산에 1의 보수 표현을 사용 (계산 처리의 효율성이 2의 보수보다 높다)
[출처 : forgetnotme.tistory.com/6]
UDP Checksum에서 간혹 Checksum 값이 0x0000으로 전송되는 경우가 있는데 이는 RFC768에서 아래와 같이 설명이 되고 있다.
즉, 전송을 시도하는 측에서 checksum을 계산하지 않은 체 보냈다는 의미이며 checksum 계산에 신경 쓰지 않는 상위 프로토콜들을 위해서 혹은 debugging의 효율을 위해 0으로 채워서 보낸다고 한다.
따라서, Checksum이 0x0000로 보내진다해서 모두 ChecksumError로 보기 힘들다고 판단된다.
[출처 : https://www.ietf.org/rfc/rfc768.txt]
[출처 : http://www.packetinside.com/2010/03/%ED%97%A4%EB%8D%94-%EC%B2%B4%ED%81%AC%EC%84%AC-%EC%98%A4%EB%A5%98-header-checksum-0x0000.html]