Computer Network #03-1. Transport Layer : UDP

김서영·2025년 4월 18일
0

컴퓨터네트워크

목록 보기
13/15
post-thumbnail

1. UDP: User Datagram Protocol

아주 간단한 구조의 인터넷 전송 프로토콜

  • 최선을 다하지만 보장하지는 않는 서비스
    (Segment가 손실되거나, 순서 뒤바뀔 수도 있음)
  • connectionless
    송신자와 수신자 사이에 연결을 설정하는 과정(핸드셰이킹)이 없음

UDP를 사용하는 이유

  • 추가 RTT delay 없음 (연결 설정 안 해서)
  • 송신자와 수신자가 연결상태 관리할 필요 없음
  • 오버헤드가 작음
  • 네트워크 혼잡 상태를 고려하지 않기에, 빠르게 데이터 전송 가능
    (혼잡 상태에도 그냥 작동)

UDP 사용 사례

UDP는 약간의 손실이 허용되거나, 속도가 중요한 경우에 주로 사용

  • Streaming multimedia apps
    (동영상 스트리밍)
  • DNS (도메인 이름 시스템)
  • SNMP (네트워크 관리 프로토콜)
  • HTTP/3 (QUIC 기반, UDP 사용)

UDP의 신뢰성

신뢰성이 필요하다면, Application Layer(응용 계층) 에서 직접 신뢰성 추가
(신뢰성과 혼잡 제어는 응용 계층이 알아서 처리)

2. UDP의 데이터 전송 동작

sender 동작

1) Application Layer에서 메시지를 전달받음

2) UDP Segment 생성
UDP Header를 붙임 (source port, destination port 등)

3) 만들어진 세그먼트를 IP Layer(Network)로 전달
IP Layer는 이 세그먼트를 목적지 IP 주소로 전송

receiver 동작

1) IP Layer로부터 세그먼트를 받음

2) UDP Header를 검사
Checksum 확인 (에러 검출)

3) UDP Header를 제거하고, Application Layer 메시지 추출

4) 포트 번호를 이용해 해당하는 소켓에 데이터 전달

3. UDP Segment format

  • Source Port 송신자의 포트 번호
    (필수 x, 필요 없으면 0으로)
  • Destination Port 수신자의 포트 번호
  • Length 전체 UDP 세그먼트 길이
    (헤더 + 데이터 포함)
  • Checksum 데이터 오류 검출을 위한 체크섬

UDP Payload

Application Layer에서 넘어온 실제 데이터를 담음

4. UDP Check-sum

Internet Checksum

전송 도중 비트 오류(flipped bits) 발생 여부를 탐지
(데이터가 손상 없이 정확히 도착했는지 확인하기 위한 방법)

  • 오류 검출만 함 (오류 수정은 X)

Sender 입장

1) UDP 세그먼트 전체(헤더+데이터)를 16비트(2바이트) 단위로 나누기

2) 16비트 조각들을 1의 보수 덧셈(one’s complement sum)으로 모두 덧셈

3) checksum 필드에 기록해서 함께 전송

receiver 입장

1) 받은 UDP 세그먼트에 대해 똑같이 16비트 단위로 덧셈

2) 수신자가 새로 계산한 checksum과, 패킷에 들어있던 checksum을 비교

  • 같지 않으면 : 오류 발생
  • 같으면 : 오류 없음
    (오류 있는데, 우연히 같을 수도 있음)

Example. Internet checksum

1) 16비트 단위로 데이터를 나눔.

2) 두 개씩 이진수 덧셈을 함.

  • 덧셈 결과 16비트를 초과하는 경우, 초과한 1비트(carry)는 다시 맨 끝(오른쪽)으로 더해줌 (wraparound).

3) 최종 합계의 1의 보수(bitwise complement)를 취해서 checksum 생성.

  • 즉, 0은 1로, 1은 0으로 뒤집기.

체크섬 한계

아래와 같은 경우, 특정 비트 오류는 감지 못할 수도 있음

profile
안녕하세요 :)

0개의 댓글