*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이 나오지않으면 깨진것으로 간주하고 버려버림
체크섬은 네트워크에서 가장 일반적으로 사용하는 방법
댓글 없음:
댓글 쓰기