IPv4 헤더 체크섬

IPv4 header checksum

IPv4 헤더 체크섬은 IPv4 패킷 헤더의 손상을 감지하기 위해 IPv4(Internet Protocol) 버전 4에서 사용되는 체크섬이다. IP 패킷 헤더로 전송되며 헤더 워드의 합계 16비트 결과를 나타낸다.[1]

IPv6 프로토콜은 헤더 체크섬을 사용하지 않는다. 그것의 설계자들은 TCPUDP와 같은 상위계층 프로토콜에서 체크섬의 사용과 결합하여 PPP이더넷과 같은 프로토콜에서 제공되는 전체-패킷 링크 계층 체크섬이 충분하다고 판단했다.[2] 따라서 IPv6 라우터는 예를 들어 모든 홉에서 Hop 제한 카운터를 낮추어 패킷이 변경될 때마다 체크섬을 다시 계산하는 작업에서 해제된다.

연산

체크섬 계산은 RFC 791에 정의되어 있다.[3]

체크섬 필드는 헤더에 있는 모든 16비트 단어를 보완한 16비트 필드의 보완물이다. 체크섬 계산을 위해 체크섬 필드의 값은 0이다.

손상이 없는 경우 체크섬을 포함한 IP 헤더 전체를 합산한 결과는 0이어야 한다. 각 홉에서 체크섬이 검증된다. 체크섬 불일치가 있는 패킷은 폐기된다. 라우터가 IP 헤더를 변경하는 경우(예: TTL을 감소시키는 경우) 체크섬을 조정해야 한다.[4]

IPv4 헤더 체크섬 계산

IPv4 패킷의 잘린 다음 발췌본을 취하십시오. 헤더는 굵게 표시되고 체크섬은 밑줄이 그어져 있다.
4500 0073 0000 4000 4011 b861 c0a8 0001
c0a8 00c7 0035 e97c 005f 279f 1e4b 8180

한 사람의 보탬이 되려면, 매번 캐리어가 발생할 때마다 합계에 1을 더해야 한다.[5] 운반 점검 및 보정은 추가 시마다 또는 모든 추가 후 사후 처리로 수행할 수 있다. 수정으로 또 다른 운반이 발생하는 경우, 합계에 또 다른 1이 추가된다.

체크섬을 계산하려면 먼저 체크섬 필드 자체만 건너뛰고 헤더 내의 각 16비트 값의 합계를 계산할 수 있다. 이러한 값은 16진법 표기법이라는 점에 유의하십시오.
4500 + 0073 + 0000 + 4000 + 4011 + c0a8 + 0001 + c0a8 + 00c7 = 2479c
첫 번째 숫자는 운반 카운트이며 합계에 추가된다.
2 + 479c = 479e (이 추가에 의해 다른 캐리어가 생성되는 경우, 합계에 다른 1을 추가해야 함)
체크섬을 얻기 위해 우리는 (원래 IP 패킷 헤더에 밑줄이 그어진 것처럼) 이 결과에 대한 보완책을 취한다.

IPv4 헤더 체크섬 확인

체크섬을 확인할 때는 원래 헤더 체크섬을 생략하지 않는 것을 제외하고 위와 같은 절차를 사용한다.
4500 + 0073 + 0000 + 4000 + 4011 + b861 + c0a8 + 0001 + c0a8 + 00c7 = 2fffd
운반 비트를 추가하십시오.
fffd + 2 = ffff
1개의 보어(비트를 한 개씩 압축)를 취하면 0000이 발생하는데, 이는 오류가 감지되지 않음을 나타낸다. IP 헤더 체크섬은 헤더 내에서 16비트 값의 올바른 순서를 확인하지 않는다.

참고 항목

참조

  1. ^ IP 데이터그램 일반 형식
  2. ^ Iljitsch van Beijnum (September 2006). "IPv6 Internals". Cisco.
  3. ^ "Internet Header Format". Internet Protocol DARPA Internet program protocol specification. IETF. September 1981. p. 14. doi:10.17487/RFC0791. STD 5. RFC 791. Retrieved 2009-10-27.
  4. ^ Baker, Fred, ed. (June 1995). "Header Checksum". Requirements for IP Version 4 Routers. IETF. p. 44. sec. 4.2.2.5. doi:10.17487/RFC1812. RFC 1812. Retrieved 2009-10-27.
  5. ^ "Compute 16-bit One's Complement Sum". Retrieved 2019-02-07.

외부 링크