-Connectionless Transport: UDP

solchan·2022년 1월 8일
0

Network

목록 보기
1/2
post-thumbnail

UDP란 무엇인가?

UDP : User Datagrams protocol / RFC 768표준안
네트워크 계층 중 Transport에 해당된다.

UDP는 Datagram으로 알려진 단문 메세지를 전달하는데 사용된다.
말 그대로 메세지를 전달하는 일만 하고 혼잡 제어 등의 부가적인 기능은 제공하지 않는다.
추가로 TCP와 달리 연결 설정 단계가 없기 때문에 센더와 리시버간 상호 합의 없이 데이터를 전송한다.
예로 집배원이 우편함에 우편물을 놓고 가는 우편 서비스를 생각하면 편하다.
그렇기 때문에 UDP의 Segment(패킷) 헤더는 매우 간단하다.

source portdestination port
lengthchecksum
  1. source port: 출발지의 port가 담겨지는 필드이다.
  2. destination port: 도착지의 port가 담겨지는 필드이다.
  3. length: UDP의 Segment(heager + payload)의 길이가 담겨지는 필드이며 byte로 단위 최대 2^16 - 1의 크기를 갖는다.
  4. checksum: 전송 과정에서 데이터의 손실 및 변형을 체크하기 위한 값이 저장되는 필드이다.

특징

이러한 UDP는 다음과 같은 특징을 갖는다.

  • 기본적인 기능만 하는 전송 계층 프로토콜이다.
  • “Best Effort”(최선형 서비스) 서비스를 한다.
    • Best Effort -> 최선의 노력은 하지만 보장은 못한다. 즉, 보장성이 없다.
    • UDP segment는 손실될 가능성이 있다. 손실 된 데이터는 복구가 불가능하다.
    • 전송 순서가 어긋날 수 있다. 즉, 전송 순서를 보장하지 않는다.
  • 연결 설정 단계가 없는 비연결성이다.
    • 연결 설정 단계가 없기 때문에 센더와 리시버간 상호 합의 없이 데이터를 전송한다.
    • 연결 설정 해제 단계없이 데이터 전송만 한다.
    • ex) 우편
    • segment 각각 독립적으로 취급된다. 즉, segment간의 순서가 보장되지 않는다.

연결 설정을 하지 않는 비연결성이라는 점이 TCP와 가장 큰 차이점이다.

UDP를 사용하는 것

UDP의 장점은 가벼운 세그먼트와 데이터 전송만을 하기에 매우 빠르다는 것이다.
따라서 부가적인 기능이 필요 없고 빠른 속도를 원하는 곳에서 사용이 된다.
대표적으로 다음과 같은 곳에서 사용이 된다.

  • 스트리밍 어플리케이션
    • 일부 손실에 대하여 상관이 없다. / loss tolerant
    • 전송 속도에 민감하다. / rate sensitive
  • DNS: Domain name system
    • 도메인을 IP주소로 바꿔주는 프로토콜
    • ex) www.solac.shop -> 111.11.11.1
    • 전송 속도에 민감하다.
  • SNMP: Simple network management protocol
    • 네트워크를 관리한다.
    • 전송 속도에 민감하다.

즉, UDP를 사용하는 이유를 정리하면 다음과 같다.
연결 설정 단계가 없기 때문에 해제 또한 진행하지 않아 딜레이가 없고 송수신간 상태 정보 관리에 대한 부담이 없다. 그리고 segment header의 사이즈가 작고 segment가 버려지면 그냥 버리고 지나가기 때문에 속도가 빠르다.

UDP Checksum Field

UDP의 Checksum Field는 segment에서 오류를 찾는 것이 목적이다.
송신자는 segment의 checksum을 계산하고 checksum field에 넣어 보낸다.
수신자는 수신한 segment의 checksum을 계산하고 checksum field의 값과 비교한다.
값이 다르면 전송 과정에서 데이터의 손실 혹은 오류가 발생한 것이다.
하지만 UDP에서는 오류를 발견하여도 그냥 지나간다.

그럼 checksum값은 어떻게 계산하는가?

  1. 전체 segment content를 16비트의 여러 열로 나타낸다.
  2. 여러 16비트의 열을 한 번에 더하는 것이 아니라 순차적으로 더한다.
    1. ex) 1열 + 2열의 결과에 3열을 더하고 결과에 4열을 더한다.
  3. 모두 더해진 값에 1의 보수를 취한다.
  4. 만약 carry-out이 발생하면 발생한 값 1을 추가로 더해준 뒤 1의 보수를 취하면 된다.

이렇게 오류를 발견할 수 있지만 매우 낮은 확률로 오류가 발생 했음에도 같은 checksum이 계산되어 발견하지 못하는 경우도 존재한다.
이런 오류까지 발견하고 싶다면 상위층인 Application layer에서 처리해야 한다.

UDP에서 신뢰성 있는 전송하기

그럼 UDP는 신뢰성을 절대 제공하지 못하는 것 일까?
UDP의 상위층인 Application layer에서 처리를 하면 가능하다.
UDP의 상위층에서 신뢰성을 제공하는 방법은 Application layer에서 데이터의 손실과 오류 등을 수정하여 다시 제공하면 된다.

Application layer에서 신뢰성을 제공하는 방법은 RDT(Reliable Data Transfer)와 Pineline Protocols(슬라이딩 기법)이 있으며, 해당 부분에 대한 내용은 추가적으로 정리할 계획이다.

profile
Why? How? What?

0개의 댓글