2020. 6. 8.

[Network] 3.3 Connectionless transport : UDP


*UDP : User Datagram Protocol [RFC 768]

UDP Transport layer에서 할 수 있는 최소한의 기능으로 동작한다.
  • App가 거의 IP와 직접 통신하는 것이다.
  • mulx/demulx 기능만을 제공
# 패킷깨지면 .. 버리는 기능만 한다.
“best effort” (보장하지 않는다.)
  • 손실가능
  • 전송순서가 바뀔 가능
connectionless
  • UDP sender receiver간에 handshaking하지 않는다.
# handshaking이란?(TCP에서 3 handshaking 사용됨)
실제 데이터를 주고 받기 전에 데이터에 대한 사전정보를 주고받는
  • 사전 정보란?
TCP 제공하는 신뢰, 혼잡제어, 흐름제어 등을 하기 위한 정보
  • UDP segment들은 서로 독립적으로 전달된다.
# 보통 IP 이하의 통신에서는 source, destnation 사용. 권장이지 필수 아님
UDP를 이용하는 이유
  • 연결설정이 없다.
예비동작 없이 전송함으로 설정에 따른 어떠한 지연도 없다 (DNS)
  • 연결상태가 없다.
연결상태 유지를 위한 변수가 없음으로 TCP보다 많은 app를 수용할 수 있다.
  • header가 작다. (보통 IP 20, TCP 20)
8 byte (TCP : 20 byte)
  • 혼잡제어하지 않는다.
네트워크의 혼잡도를 고려하지 않음으로 app가 요구하는 전송을 전송량을 제한없이 전송한다.(SNMP)
# TCP 혼잡제어를 하여 윈도우 사이즈를 줄여서 데이터양을 줄인다.

# SNMP : 네트워크의 상황을 빠르게 보고한다. UDP 사용

*UDP

often used for streaming multimedia apps
  • 손실 허용
  • Rate sensitive
UDP를 사용하는 app
  • DNS
  • SNMP
app가 신뢰성을 제공한다면 UDP 상에서도 신뢰성있는 통신이 가능하다.
  • app이 신뢰성있는 통신을 위해 확인응답이나 재전송


# 길이는 바이트단위로 계산한다.
이유는? 미국에서 텍스트를 영어로 쓰려고 만든것이다.

# UDP헤더크기
2byte + 2byte + 2byte + 2byte = 8byte

*UDP checksum

목적 : 전송된 segment “errors”를 검출한다.
# 체크섬은 UDP 헤더에 들어있다.

Sender
  • Segment content는 순서에 따라 16bit integers로 간주한다.
  • 모든 16bit(word)의 합을 가지고 1의 보수를 수행한다.
(이때 오버플로우는 버릴수도 있고 와퍼라운드를 사용하기도 한다.)
  • 결과는 UDP segment checksum field에 삽입한다.
  • overflow bit wraparound 이용 하는 경우도 있음

receiver
  • Segment를 수신후 checksum을 포함한 모든 16bit word를 더한다.
  • 값이 모두 1이면 에러가 없지만 하나라도 0이 나오면 오류가 있다.
  • 참고 (checksum을 사용하는 방법과 bit sum에서 발생하는 overflow를 처리하는 방법이 다름. 과정은 다르지만 판단 결과는 동일)

*Internet checksum

Example : 두개의 16bit integers


wraparound(와퍼라운드) : 16bit 두개를 더해서 17비트 나왓을때 맨뒤에 다시 더한다.
sum : 16비트씩 모두 더해서 마지막
checksum : sum 보수로 뒤집은것
ckecksum 하여 모두 1 나오지않으면 깨진것으로 간주하고 버려버림

체크섬은 네트워크에서 가장 일반적으로 사용하는 방법



댓글 없음:

댓글 쓰기