[네트워크] UDP란? UDP의 개념과 이해 | UDP checksum

UDP란?

  • UDP(User Datagram Protocol)는 비연결형, 신뢰성이 없는 전송 프로토콜이다.
  • IP데이터그램을 캡슐화하여 보내는 방법과 연결 설정을 하지 않고 보내는 방법을 제공한다.
  • UDP는 TCP/IP 5계층에서 Transport Layer(전송계층)의 프로토콜이다.

UDP의 특징

  • UDP는 흐름제어, 오류제어 또는 손상된 세그먼트의 수신에 대한 재전송을 하지 않는다. 
  • 따라서 내용이 전송 중에 손실 될 수 있고, 전송되는 세그먼트의 순서가 바뀔 수 있다.
  • UDP는 TCP보다 간단하고 빠르다.
  • 작은 header size를 가지고 있다.
  • 흐름제어를 하지 않기 때문에 전송 속도를 최대한 빠르게 할 수 있다.
  • 수신자와 송신자 간의 handshaking이 없는 connectionless 성질을 가진다.

UDP를 사용하는 이유

UDP는 왜 사용할까? UDP는 TCP와 다르게 흐름제어나 오류제어 등이 없기 때문에 전송 속도를 최대한 빠르게 할 수 있다. 하지만 TCP처럼 신뢰성 있는 전송을 보장할 수 없다. 따라서 신뢰성보다 속도가 중요한 부문에서 UDP를 사용하게 된다. 예를 들어 유튜브 동영상 같은 스트리밍 어플리케이션은 신뢰성보다 속도가 중요하므로 UDP를 사용한다. 또한 DNS나 SNMP도 UDP를 사용한다. 

UDP checksum

UDP segment header
UDP segment format

UDP segment header에 보면 checksum 이라는 항목이 있다. 이것은 전송된 segment의 에러를 탐지하기 위한 것이다.

checksum은 어떻게 계산 할 수 있을까? 다음과 같은 과정을 거치면 된다.

 

  • 도착 IP주소, 송신 포트번호, 수신 포트번호, 데이터 길이, payload 등의 데이터들을 16비트 단위로 쪼개서 전부 더한다.
  • 만약 더하는 도중 overflow되서 carry-out된 값이 있다면 결과에 다시 더해서 sum 값을 만든다.
  • 계산한 sum 값을 1의 보수를 취하면 checksum 값이 된다.

이렇게 계산한 checksum 값을 송신측에서 checksum 영역에 넣어서 송신측에 보내면 송신측도 마찬가지로 sum값을 구하고, checksum 값을 구해서 송신측에서 보낸 checksum 과 동일한지 확인한다. 만약 동일하다면 에러가 없는 것이고 동일하지 않다면 에러가 있다는 것을 확인 할 수 있다. 

 

하지만 이 방법에는 결함이 있다. 전송 도중 checksum값이 바뀔 수도 있고 데이터가 변형되었음에도 불구하고 checksum 값이 동일한 경우도 발생할 수 있다. 

UDP checksum
checksum 계산 예시

위 그림은 checksum을 계산하는 방법의 예시다. 예를 들기 위해 데이터를 2개만 있다고 가정하고 진행했다. 데이터를 모두 더하고 carry-out이 발생했으므로 그 값을 다시 더해주면 sum 값이 나오고, 이 sum 값을 1의 보수를 취하면 checksum이 된다.

 


 

반응형

댓글

Designed by JB FACTORY