Computer Science/Computer Network

[CS][컴퓨터 네트워킹 하향식 접근] Chapter3.3 UDP (Connectionless transport)

y-seo 2024. 1. 21. 18:10
 
 

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의 구성

출처 : https://gaia.cs.umass.edu/kurose_ross/online_lectures.htm

 

 
 

UCP checksum

  • error을 체크하기 위한 것이다.
  • 전송되는 segment에서 error을 검출한다.
  • reliable에 도움이 된다.
  • parity bit : 뒤에 한자리를 더 붙여 error 검출하는 방법이다.
    • 짝수 parity bit : 1의 개수를 짝수 개로 만드는 방법이다.
    • 단점은 어디서 error가 났는지 모른다는 점이다. 2자리 이상 바뀌면 공교롭게도 error가 없다고 판단할 수 있다.

출처 : https://gaia.cs.umass.edu/kurose_ross/online_lectures.htm

 

 
 

Internet Checksum

  • Interent에서 쓰여서 Internet checksum이라고 부른다.
  • checksum은 correction은 못하고 detect만 가능하다.
  • sender
    1. 16bit씩 나열하여 checksum을 계산한다.
    2. checksum은 1의 보수의 합으로 계산한다.
    3. 계산한 것을 원래 contents와 함께 전송한다.
  • receiver
    1. 수신된 segment에 대해 checksum을 계산한다.
    2. receiver의 checksum과 sender가 보내준 checksum이 같은지 판단한다.
    3. 같으면 no error detected이나, error가 있을 수도 있다.
    4. 안 같으면 무조건 error detected이다.

출처 : https://gaia.cs.umass.edu/kurose_ross/online_lectures.htm

  • 단점
    • 운이 나쁘면 비트의 변화가 있는데도 Checksum에는 error(변화)가 없어 detect를 못하게 될 수도 있다.
    • 그럼에도 그냥 사용한다..

출처 : https://gaia.cs.umass.edu/kurose_ross/online_lectures.htm