인터넷 체크섬

인터넷 체크섬()은 인터넷 프로토콜의 버전 4(IPv4)에서 IPv4 패킷 헤더의 손상을 감지하는 데 사용되는 체크섬이다. 이는 IPv4 패킷 헤더에 포함되며, 헤더 워드들의 합산 결과인 16비트 값을 나타낸다.IP Datagram General Format

IPv6 프로토콜은 헤더 체크섬을 사용하지 않는다. 설계자들은 PPP 및 이더넷과 같은 프로토콜에서 제공되는 전체 패킷 링크 계층 체크섬과 TCP 및 UDP와 같은 상위 계층 프로토콜에서 체크섬 사용이 충분하다고 판단했다. 따라서 IPv6 라우터는 예를 들어 모든 홉에서 홉 제한 카운터가 감소하여 패킷이 변경될 때마다 체크섬을 다시 계산하는 작업에서 벗어난다.

인터넷 체크섬은  IPv6 UDP 패킷 (데이터 페이로드 포함)의 오류를 감지하는 데 필수적이다.

인터넷 체크섬은  ICMP 패킷 (데이터 페이로드 포함)의 오류를 감지하는 데 사용된다.

 계산 
체크섬 계산은 다음과 같이 정의된다.
체크섬 필드는 헤더에 있는 모든 16비트 워드의 1의 보수 합에 대한 16비트 1의 보수이다. 체크섬 계산을 위해 체크섬 필드의 값은 0이다.

손상이 없는 경우, 체크섬을 포함한 전체 IP 헤더를 합산한 다음 그 1의 보수를 취한 결과는 0이어야 한다. 각 홉에서 체크섬이 확인된다. 체크섬 불일치가 있는 패킷은 버려진다. 라우터는 IP 헤더를 변경할 때(예: TTL을 감소시킬 때) 체크섬을 조정해야 한다.

이 절차는 RFC 1071 "Computing the Internet Checksum"에 자세히 설명되어 있다. RFC 1624 "Computation of the Internet Checksum via Incremental Update"에서는 단일 필드만 변경되었을 때 패킷 전달 중에 헤더 체크섬을 다시 계산해야 하는 라우터의 경우를 다루기 위한 최적화가 제시되어 있다.

 예시 
 IPv4 헤더 체크섬 계산 
다음은 IPv4 패킷의 잘린 발췌문이다. 헤더는 굵게 표시되어 있고 체크섬은 밑줄이 그어져 있다.

4500 0073 0000 4000 4011 b861 c0a8 0001
c0a8 00c7 0035 e97c 005f 279f 1e4b 8180

1의 보수 덧셈의 경우, 캐리가 발생할 때마다 합계에 1을 더해야 한다. 캐리 확인 및 수정은 각 덧셈과 함께 수행되거나 모든 덧셈 후에 후처리로 수행될 수 있다. 수정으로 인해 또 다른 캐리가 생성되면 합계에 또 다른 1이 추가된다.

체크섬을 계산하려면 먼저 헤더 내의 각 16비트 값의 합계를 계산할 수 있으며, 체크섬 필드 자체만 건너뛴다. 이 값들은 십육진법 표기법으로 되어 있다.

초기 덧셈: 4500 + 0073 + 0000 + 4000 + 4011 + c0a8 + 0001 + c0a8 + 00c7 = 2479c

그 다음, 다섯 번째 십육진법 자리를 처음 네 자리에 더하여 캐리 덧셈을 수행한다: 2 + 479c = 479e

체크섬은 이 결과의 1의 보수 (비트 NOT)이다: NOT 479e = b861

이 체크섬 값은 위 원본 IP 패킷 헤더에서 밑줄이 그어진 부분으로 표시된다.

IPv4 헤더 체크섬 확인
체크섬을 확인할 때, 위와 동일한 절차가 사용되지만 원본 헤더 체크섬은 생략되지 않는다.
4500 + 0073 + 0000 + 4000 + 4011 + b861 + c0a8 + 0001 + c0a8 + 00c7 = 2fffd
캐리 비트를 더한다:
fffd + 2 = ffff
1의 보수를 취하면 (모든 비트를 뒤집으면) 0000이 되며, 이는 오류가 감지되지 않았음을 나타낸다.
IP 헤더 체크섬은 헤더 내 16비트 값의 올바른 순서를 확인하지 않는다.

 같이 보기 
 프레임 체크 시퀀스

 각주 

 외부 링크 
 Header Checksum

분류:오류 검출 정정
분류:IPv4