UDP란 (User Datagram Protocol)
- 비교적 간단하다.
- 상위에서 받아 header을 붙여 아래로 전달하고, 하위에서 받아 header을 떼어 상위로 전달하다.
- 하는게 없어서 no frills, bare bones라고 부르기도 한다.
- “best effort” 서비스를 제공한다. "best effort" 란, 보내 놓고 잘 가기를 바라는 것으로 segmet가 lost 되거나 순서대로 전달되지 않을 수도 있다.
- connectionless 서비스를 한다.
- 미리 상대방과 링크 설정을 하지 않는다 = handshaking 하지 않는다.
- UDP segment는 독립적으로 다루어진다. 따라서 각각의 segment마다 IP주소 등을 다 적어주어야 한다.
- 장점
- connection을 미리 설정하지 않아서(no setup/handshking) 그 시간(RTT)을 줄일 수 있다.
- DNS, SMTP, multimedia 서비스에서 주로 사용한다.
- 짧은 메세지를 주고 받을 때 많이 사용된다.
- 상태 정보를 가지고 있을 필요가 없다.
- 그래서 header size가 작다. 4개 field만 있고 나머지는 data이다.
- 그래서 받아서 해석하는 행동이 줄어 process가 줄어든다.
- congestion control을 하지 않는다.
- UDP는 data에서 source를 인코딩 된 속도 그대로 내보낸다.
- UDP는 원하는 만큼 빨리 날릴 수 있다.
- 혼잡한 상황에서도 그냥 보내 버리니까 기능할 수 있다.
- 네트워크 서비스가 손상되어도 작동할 수 있다.
- checksum 덕에 신뢰성이 향상된다.
- UDP를 사용하는 app 예시는 아래와 같다.
- UDP 위에 추가 기능을 구축하고 싶다면 application에 넣으면 된다.
- multimedia apps
- DNS
- SNMP
- HTTP/3
- UDP에서 reliable transfer가 필요하다면, application layer에 reliability과 congestion control 기능을 추가하면 된다.
UDP에서 Transport Layer의 Action
- UDP sender는 application layer의 message를 받으면, UDP segment의 header field 값을 결정한다. 이후 UDP segment를 생성해서IP에게 segment를 패스한다.
- UDP receiver는 IP로부터 segment를 받으면, UDP checksum의 header 값을 확인한다. 이후 application layer message를 추출하여 socket을 통해 message를 demultiplexing 한다.
UDP segment header의 구성
UCP checksum
- error을 체크하기 위한 것이다.
- 전송되는 segment에서 error을 검출한다.
- reliable에 도움이 된다.
- parity bit : 뒤에 한자리를 더 붙여 error 검출하는 방법이다.
- 짝수 parity bit : 1의 개수를 짝수 개로 만드는 방법이다.
- 단점은 어디서 error가 났는지 모른다는 점이다. 2자리 이상 바뀌면 공교롭게도 error가 없다고 판단할 수 있다.
Internet Checksum
- Interent에서 쓰여서 Internet checksum이라고 부른다.
- checksum은 correction은 못하고 detect만 가능하다.
- sender
- 16bit씩 나열하여 checksum을 계산한다.
- checksum은 1의 보수의 합으로 계산한다.
- 계산한 것을 원래 contents와 함께 전송한다.
- receiver
- 수신된 segment에 대해 checksum을 계산한다.
- receiver의 checksum과 sender가 보내준 checksum이 같은지 판단한다.
- 같으면 no error detected이나, error가 있을 수도 있다.
- 안 같으면 무조건 error detected이다.
- 단점
- 운이 나쁘면 비트의 변화가 있는데도 Checksum에는 error(변화)가 없어 detect를 못하게 될 수도 있다.
- 그럼에도 그냥 사용한다..