본문 바로가기
CS/Network

[네트워크] UDP

by haerr 2025. 4. 20.

☁️ UDP란 무엇인가?

UDP는 User Datagram Protocol, 즉 사용자 데이터그램 프로토콜의 약자이다.

이건 인터넷에서 정보를 빠르게 보내는 아주 단순한 방식의 전송 방법이다. 별다른 장치 없이, 말 그대로 “보내기만” 함!

 

 

 UDP의 특징

  1. 간단하고 빠름
    • 전송 전에 상대랑 “이제 보낼게 준비댐?” 이런 핸드셰이크 과정 없이 바로 전송함
    • 편지 보낼 때 우체국 안 가고 그냥 우편함에 넣는 느낌
  2. 비연결성 (Connectionless)
    • 매번 전송할 때 연결을 새로 맺지 않음 → 속도가 빠름
    • 보낸 메시지가 중간에 없어질 수도 있고, 순서가 바뀔 수도 있음
  3. 최선 노력형 서비스
    • “할 수 있는 한 최선을 다해서 보내겠음!“의 의미.
    • 하지만 도착 보장은 안 함

 

 

💡 UDP는 언제 사용될까?

  • 스트리밍 서비스: 영상/음악에서 약간의 손실은 괜찮고, 속도가 중요할 때
  • DNS 요청: 빠르게 주소를 찾기만 하면 되니까
  • 게임, 음성통화 등 → 실시간성이 중요할 때 자주 씀

 

 

📦 UDP 헤더 구조

 

UDP로 보내는 메시지는 이렇게 생겼다

[소스 포트 번호][목적지 포트 번호]
[   전체 길이   ][   체크섬    ]
[         실제 데이터 (내용)        ]

 

  • 소스 포트 번호: 누가 보냈는지
  • 목적지 포트 번호: 누구한테 보낼 건지
  • 길이: 전체 메시지의 크기
  • 체크섬: 혹시 데이터가 깨졌는지 확인하기 위한 검사용 숫자!

 

 

 UDP 체크섬 - 데이터가 중간에 깨졌는지 어떻게 알 수 있을까?

🧪 보내는 쪽 (송신자, sender)

  • 메시지(헤더 + 내용)를 16비트 단위로 잘라서 다 더한다.
  • 더한 값을 1의 보수 형태로 바꿔서 체크섬에 넣는다.
    • → 1의 보수: 0은 1로, 1은 0으로 바꾼 것

 

🧪 받는 쪽 (수신자, receiver)

  • 받은 메시지를 똑같이 더해서 체크섬 계산해봄
  • 계산한 값이 보낸 체크섬과 다르면?중간에 오류 발생!

 

 

🧮 예시로 보기

두 개의 16비트 숫자를 더했는데

1111001100110011
+ 1110101010101010
---------------------
=1101110111011101  → 더한 값

 

 

근데 맨 앞 자리가 넘쳤으면 그걸 다시 더해서

→ 최종적으로: 1010001000100001 → 이게 체크섬!

 

👉 이렇게 보내면, 받는 쪽도 똑같이 계산해서 문제가 없는지 확인할 수 있다.

 

 

🎯 왜 UDP를 쓸까?

 

UDP는 연결도 설정하지 않고, 간단한 구조 덕분에

  • 빠르게 전송 가능
  • 오버헤드(부가 작업)가 적음
  • 실시간성이 중요한 앱에 유리!

 

 

하지만…

  • 데이터가 손실될 수 있고
  • 순서가 꼬일 수 있음
  • 재전송을 스스로 안 함

 

그래서 정말 중요한 데이터(예: 은행 송금)는 TCP를 쓰고,

빠르기만 하면 되는 상황은 UDP를 쓴다.