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]










- 프로그램의 상태를 알아보기 위해 어느 한 순간 주기억 장치나 하드웨어 레지스터, 상태 표시기 등의 

  모든 내용을 포함한 메모리의 현재 상태를 저장





+ Recent posts