본문 바로가기

Study/Networking

9.3 사용자 데이터그램 프로토콜(UDP)

728x90

UDP는 비연결형이고, 신뢰성이 없는 전송 프로토콜이다. UDP는 호스트 간 통신 대신에 프로세스 간 통신을 제공하는 것을 제외하고는 IP서비스에 어떠한 것도 추가하지 않는다. 그 이유는 단점을 통해 일부 장점을 가져올 수 있기 때문이다.

사용자 데이터그램 이라고 부르는 UDP 패킷은 각각 2바이트(16비트)인 4개의 필드로 만들어진 고정된 크기의 8바이트 헤더를 가지고 있다. 처음 두 필드는 발신지와 목적지 포트 번호를 정의한다. 세 번째 필드는 헤더에 데이터를 더한 사용자 데이터그램의전체 길이를 정의된다. 16비트는 전체 길이 0부터 65,536바이트를 정의할 수 있다. 그러나 하나의 UDP 사용자 데이터그램은 65.535바이트의 총 길이를 가지는 IP 데이터그램에 저장되기 때문에 총 길이는 훨씬 작은 것을 요구한다. 마지막 필드는 선택적 검사합을 전달한다.


다음은 16진수 형식의 UDP 헤더의 내용이다.

CB84000D001C001C

- 발신지의 포트 번호는 얼마인가? 발신지 포트 번호는 첫 번째 4자리의 16진수 CB84 로, 발신지 포트 번호는 52,100을 의미한다.

 

- 목적지 포트 번호는 얼마인가? 목적지 포트 번호는 두 번째 4자리의 16진수 000D 로, 목적지 포트 번호는 13을 의미한다.

 

- 사용자 데이터그램의 전체 길이는 얼마인가? 세 번째 4자리의 16진수 001C 로, 전체 UDP패킷의 길이는 28바이트로 정의된다.

 

- 데이터의 길이는 얼마인가? 데이터 길이는 전체 패킷 길이에서 헤드의 길이를 뺀 것으로, 28 - 8 = 20바이트 이다.

 

- 클라이언트에서 서버로 향하는 패킷인가 혹은 반대인가? 목적지 포트 번호는 13(잘 알려진 포트)이기 때문에, 패킷은 클라이언트에서 서버로 가는 것이다.

 

- 클라이언트 프로세스는 무엇인가? Daytime

 


1. UDP 서비스

- 프로세스 대 프로세스 통신

UDP는 IP주소와 포트 번호의 결합인 소켓 주소를 이용하여 프로세스 대 프로세스 통신을 제공한다.

 

- 비연결형 서비스

UDP는 비연결형 서비스를 제공한다. 이것은 UDP에 의해 보내지는 각 사용자 데이터그램은 독립된 데이터그램이라는 것을 의미한다. 동일한 발신지 프로세스로부터 들어와서 동일한 목적지 프로그램으로 간다고 할지라도 사용자 데이터그램은 서로 관계가 없다. 사용자 데이터그램은 번호가 부여되지 않는다.

 

- 흐름 제어

흐름 제어가 없고 따라서 창 메커니즘이 없다. 수신자는 들어오는 메시지로 인하여 오버플로우가 발생할 수도 있다.

 

- 오류 제어

검사합을 제외하고는 UDP에는 오류 제어 메커니즘이 없다. 이것은 송신자가 메시지가 손실이 되었는지 또는 중복이 되었는지를 알 수 없음을 의미한다.

 

- 검사합

UDP 검사합 계산은 의사헤더, UDP헤더 그리고 응용층으로부터 들어오는 데이터의 세 영역이 포함된다. 의사헤더는 0으로 채워진 일부 필드들로 캢슐화되는 사용자 데이터그램에 있는 IP패킷 헤더의 일부분이다.

 


다음 각 상황에서 검사합을 위해 어떤 값이 전송되는가?

  1. 송신기가 검사합을 포함하지 않기로 결정했다.
  2. 송신기가 검사합을 포기하기로 결정했으나, 합의 값이 모두 1이다.
  3. 송신기가 검사합을 포기하기로 결정했으나, 합의 값이 모두 0이다.

- 전송된 검사합 필드의 값이 모두 0이며 검사합이 계산되지 않는다는 것을 보여준다.

- 송신기가 합을 2의 보수하고, 그 결과는 모두 0이다. 송신기는 전송 전에 다시 결과를 2의 보수 한다. 검사합을 위해 전송된 값은 모두 1이다. 두 번째 2의 보수 동작은 a번의 경우처럼 혼란을 피하기 위해 필요하다.

- 이런 상황은 합 계산에 포함된 모든 항의 값이 모두 0이라는 것을 의미하기 때문에 결코 발생하지 않는다. 0은 불가능하며 의사 헤더에서 일부 필드는 0이 아닌 값을 가진다.


- 혼잡 제어

UDP는 비연결형 프로토콜이므로, 이것은 혼잡 제어를 제공하지 않는다. UDP는 전송되는 패킷이 매우 작고 산발적이어서 네트워크에서 혼잡을 발생시키지 않는다.

 

- 캡슐화와 역캡슐화

 

- 큐잉(Queuing)

UDP에서 큐들은 포트와 관련이 있다. 클라이언트 사이트에서, 프로세스가 시작할 떄 프로세스는 운용체제로부터 포트 번호를 요청한다. 일부 구현 방법은 각 프로세스와 관련된 입력과 출력 큐를 둘 다 생성한다. 나머지 구현 방법은 각 프로세스와 관련된 입력 큐만을 생성한다.

 

- 다중화와 역다중화

 

2. UDP  응용

DNS와 같은 클라이언트-서버 응용은 클라이언트가 짧은 요청을 서버에게 전송하고 서버로부터 짧은 응답을 받아야 할 필요성이 있기 때문에 UDP서비스를 사용한다.  한 방향으로 단지 1개의 메시지가 교환되기 떄문에, 비연결형 특성이 이슈가 아니다.

 

전자우편에 사용하는 SMTP와 같은 클라이언트-서버 응용은 사용자가 멀티미디어를 포함하는 긴 전자우편 메시지를 전송하기 떄문에 UDP서비스를 이용할 수 없다. 사용자 데이터그램은 순서에 벗어나 도착할 수 있고, 수신 응용에 순서에 벗어나 전달될 수 있다. 이것은 비연결형 서비스가 긴 메시지를 전송하는 응용 프로그램을 위해서는 단점을 가진다는 것을 의미한다.

 

우리는 당연히 신뢰성 있는 서비스를 제공하는 전송층을 사용할 필요가 있다. 우리는 파일을 열 때 파일 일부가 분실되거나 혹은 오류가 있는 것을 원하지 않는다.

 

- 일반적인 응용

  • UDP는 흐름 및 오류 제어를 하지 않는 간단한 요청-응답 통신을 요구하는 프로세스에 적당하다.
  • UDP는 내부 흐름 및 오류 제어 기법을 가진 프로세스에 적당하다.
  • UDP는 멀티캐스팅을 위한 적당한 전송 프로토콜이다.
  • UDP는 SNMP와 같은 관리 프로세스들을 위하여 사용된다.
  • UDP는 라우팅 정포 프로토콜(RIP)과 같은 경로 갱신 프로토콜을 위하여 사용된다.
  • UDP는 보통 수신 메시지의 영역 사이에 균등하지 않은 지연을 인내할 수 없는 상호 대화 실시간 응용에 사용된다.
728x90