spring_sunshine
Coding Blog
spring_sunshine
전체 방문자
오늘
어제
  • 분류 전체보기 (144)
    • 개발일지 (2)
    • Java (12)
      • 개념 (12)
      • 코테 (0)
    • Spring (5)
      • 개념 (5)
      • 프로젝트 (0)
    • CS (19)
      • 네트워크 (9)
      • 스터디 (6)
      • 정처기 (3)
    • SQLD (3)
    • React (27)
      • [책] 리액트를 다루는 기술 (13)
      • [강의] 만들면서 배우는 리액트 (2)
      • 개념 (11)
    • React Native (10)
      • [책] 리액트 네이티브 앱프로그래밍 (4)
      • [강의] 처음 배우는 리액트 네이티브 (4)
      • 프로젝트 (1)
    • Python (37)
      • [책] 이코테 (9)
      • [강의] 파이썬 알고리즘 문풀 (6)
      • [강의] 파이썬입문과 크롤링기초 (6)
      • 개념 (7)
      • 백준 (9)
    • Flutter (4)
      • Dart (4)
    • ML (14)
      • [책] 혼공머신 (6)
      • [강의] 딥러닝 CNN (4)
      • NumPy (4)
    • JavaScript (3)
    • 기타 (1)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
spring_sunshine

Coding Blog

비연결형 트랜스포트: UDP
CS/네트워크

비연결형 트랜스포트: UDP

2023. 11. 11. 11:42

UDP

  • UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다.
    • 다중화, 역다중화 기능
    • 간단한 오류 검사 기능

이외에는 IP에 아무것도 추가하지 않는다.

 

동작 순서

  • 애플리케이션 프로세스로부터 메시지를 가져와서 다중화, 역다중화에 필요한 출발지 포트번호 필드와 목적지 포트번호 필드를 첨부한다.
  • 출발지 호스트의 IP주소 필드와 목적지 호스트의 IP주소 필드를 추가한 후에, 최종 트랜스포트 계층 세그먼트를 네트워크 계층으로 넘겨준다.
  • 네트워크 계층은 트랜스포트 계층 세그먼트를 IP 데이터그램으로 캡슐화하고, 세그먼트를 수신 호스트에게 전달한다.
  • 세그먼트가 수신 호스트에 도착하면, UDP는 세그먼트를 해당하는 애플리케이션 프로세스로 전달하기 위해 목적지 포트번호를 사용한다.
UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 간에 handshake를 하지 않는다. → 비연결형

 

UDP의 장점

  • 무슨 데이터를 언제 보낼지에 대해 애플리케이션 레벨에서 더 정교한 제어가 가능하다.
    • UDP는 애플리케이션 프로세스가 데이터를 UDP에 전달하자마자 데이터를 UDP 세그먼트로 만들고, 그 세그먼트를 즉시 네트워크 계층으로 전달한다.
    • 실시간 애플리케이션에서는 UDP를 사용하고, 필요한 어떤 추가 기능을 구현할 수 있다.
  • 연결 설정이 없다.
    • UDP는 TCP의 3way handshake와 같은 사전준비 없이 전송한다. 따라서 연결을 설정하기 위한 어떤 지연도 없다.
    • UDP는 연결 상태를 유지하지 않으며, 연결 사애에 대한 어떤 파라미터도 기록하지 않는다.
    • 따라서 일반적으로 특정 애플리케이션 전용 서버는 프로그램이 UDP에서 동작할 때 좀 더 많은 활성 클라이언트를 수용할 수 있다.
  • 작은 패킷 오버헤드: TCP는 세그먼트마다 20byte의 헤더 오버헤드를 갖지만, UDP는 단지 8byte의 오버헤드를 갖는다.

 

UPD의 단점

  • UDP는 혼잡 제어를 하지 않는다.
    • 혼잡 제어는 네트워크가 꼭 필요한 작업을 할 수 없게 되는 폭주 상태에 빠지는 것을 막기 위해 반드시 필요하다.
    • 만약 모두가 혼잡 제어를 사용하지 않고 높은 비트의 비디오 스트리밍을 한다면 라우터에 많은 패킷의 오버플로가 발생하고, 제어되지 않은 UDP 송신자에 의해 발생한 높은 손실율은 그 손실율을 감소시키기 위해 TCP 송신자들이 속도를 줄이도록 하면서 TCP에 혼잡이 발생할 것이다.

 

UDP 세그먼트 구조

  • 애플리케이션 데이터
    • UDP 데이터그램의 데이터 필드에 위치한다.
  • 포트 번호
    • 목적지 호스트가 목적지 종단 시스템에서 동작하는 정확한 프로세스에게 애플리케이션 데이터를 넘기게 해준다.
  • 체크섬
    • 세그먼트에 오류가 발생했는지 검사하기 위해 수신 호스트가 사용한다.
  • 길이 필드
    • 헤더를 포함하는 UDP 세그먼트의 길이를 바이트 단위로 나타낸다.

 

UDP 체크섬

  • 세그먼트가 출발지로부터 목적지로 이동했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사하여 오류 검출을 하기 위한 것이다.
    • 송신측에서 세그먼트 안에 있는 모든 16비트 워드의 합산에 대해 다시 1의 보수를 수행하며, 합산 과정에서 발생하는 오버플로는 윤회식 자리올림을 한다.
    • 이 결과 값이 UDP 세그먼트의 체크섬 필드에 삽입된다.
    • 수신측에서는 체크섬을 포함한 모든 16비트 워드들이 더해진다.
    • 만약 패킷에 어떤 오류도 없다면 수신자에서의 합은 111..(16개)가 되며, 비트 중에 0이 하나라도 있다면 패킷에 오류가 발생했다는 것이다.
  • 출발지와 목적지 사이의 모든 링크가 오류 검사를 제공한다는 보장이 없기 때문에 UDP는 체크섬을 제공한다.
  • UDP는 오류 검사를 제공하지만, 오류를 회복하기 위한 어떤 일도 하지않는다.
  • 종단 간의 데이터 전송 서비스가 오류 검사를 제공해야 한다면, UDP는 종단 기반으로 트랜스포트 계층에서 오류 검사를 제공해야만 한다. → 종단과 종단의 원칙의 한 예시이다.

'CS > 네트워크' 카테고리의 다른 글

TCP  (1) 2023.11.28
파이프라이닝된 신뢰적인 데이터 전송 프로토콜  (0) 2023.11.16
신뢰적인 데이터 전송 원리  (0) 2023.11.11
다중화와 역다중화  (0) 2023.11.11
트랜스포트 계층  (0) 2023.11.08
    'CS/네트워크' 카테고리의 다른 글
    • 파이프라이닝된 신뢰적인 데이터 전송 프로토콜
    • 신뢰적인 데이터 전송 원리
    • 다중화와 역다중화
    • 트랜스포트 계층
    spring_sunshine
    spring_sunshine

    티스토리툴바