본문 바로가기

TCP/IP Protocol

TCP / IP 프로토콜 - 4 ( UDP 분석 )

★ UDP에 대해서..

UDP는 비연결형, 신뢰성 없는 전송 프로토콜이라고 한다.

UDP는 Host - Host, Process - Process 통신을 제공하는것 이외에는 IP 서비스에 추가하는 것이 아무 것도 없다. 그리고 수신된 패킷에서 오류를 탐지하면 이를 폐기하는 정도의 오류제어 기능만 제공한다.

Host - Host 통신 : IP는 목적지 Host 에게만 메시지를 전달할 수 있다.
Process - Process 통신 : UDP, TCP는 메시지를 정확한 프로세스에게 전달시킬 수 있으며 Port 번호가 필요하다.

이런 차이점 때문에 전송계층 프로토콜이 필요한 것이다.

그렇다면 신뢰성있는 TCP를 사용하면 되는데 왜 UDP를 사용하는가에 대한 의문이 생길 수 있을것이다.

그렇다면 UDP가 가진 장점은 무엇일까?

정답은 바로 처리속도. 다시 말해 데이터 전송률인 것이다.

1000개의 패킷을 전송할 경우 10개의 패킷이 손상이 되거나 분실되었다고 가정해보자. TCP는 이 10개의 패킷을 재전송하기 위해 시간이 더 걸릴 것이다. 하지만 UDP의 경우 이 10개의 패킷을 무시하고 전송하기 때문에 TCP보다 전송률이 더 좋을 것이다.

그렇기 때문에 소수 패킷들의 손실은 크게 영향을 미치지 않는 온라인 게임이나, 실시간 방송, 스트리밍 서비스 등에 주로 이용된다.

위의 내용을 정리하여 UDP의 사용경우들을 말하자면,

1. UDP는 단순한 요청-응답 통신을 필요로 하고 흐름 제어와 오류 제어에는 큰 관심이 없는 프로세스에 적절.
2. UDP는 내부적인 흐름 제어와 오류 제어 메커니즘을 가지고 있는 프로세스에 적절.
3. UDP는 멀티캐스팅과 브로드캐스팅을 위한 전송 프로토콜로 적절.
4. UDP는 SNMP와 같은 관리 프로세스에 사용.
5. UDP는 RIP와 같은 경로 갱신 프로토콜에 사용.



위의 그림으로 IP header 에는 IP address가 UDP header 에는 Port Number가 붙는걸 알 수 있고 IP address로 호스트를 Port Number로 프로세스를 찾는걸 알 수 있다.



★ UDP의 Well-Known Ports 
- UDP에서 사용되는 Well-Known Port

Port      Protocol          Description
-----       ------------         ----------------
7          Echo              Echoes a received datagram back to the sender
9          Discard           Discards any datagram that is received
11      1 Users             Active users
13       1Daytime          Returns the date and the time
17       1Quote            Returns a quote of the day
19       1Chargen          Returns a string of characters
53       1Nameserver    Domain Name Service
67       1Bootps           Server port to download bootstrap information
68       1Bootpc          Client port to download bootstrap information
69       1TFTP             Trivial File Transfer Protocol
111       RPC               Remote Procedure Call
123       NTP               Network Time Protocol
161       SNMP            Simple Network Management Protocol
162       SNMP            Simple Network Management Protocol(trap)



아래의 그림이 UDP( user datagram protocol )Header 부분이다.


★ Source Port ( 16bit )
- 발신지 포트 번호




★ Destination Port ( 16bit )
- 목적지 포트 번호




★ Length ( 16bit ) // 가변적
- UDP 사용자 데이터그램은 전체 길이가 65535 Byte인 IP 데이터그램 내에 저장된다.
- UDP 사용자 데이터그램의 전체 길이는 이보다 매우 작아야 한다.
- 길이(length) : 헤더 + 데이터
- UDP 길이 = IP 길이 - IP 헤더 길이




★ Checksum ( 16bit )  // 의사 헤더 관련 내용은 아래에 설명
* 송신자
    - UDP 사용자 데이터그램에 의사 헤더를 추가한다.
    - 검사합 필드를 0으로 만든다.
    - 전체 비트들을 16비트 단어로 나눈다.
    - 만약 전체 바이트 수가 짝수가 아니면 전부 0인 패딩을 한 바이트 추가한다.
      (패딩은 검사합을 게산하기 위해서 사용되고 그 이후 폐기된다.)
    - 1의 보수 연산을 사용하여 16 비트 섹션을 전부 더한다.
    - 0을 1로 // 1은 0으로 바꾸는 방법으로 결과물의 보수를 구한다. 이 16 비트 값을 검사합 필드에 삽입한다.
    - 의사 헤더와 추가된 패딩을 없앤다.
    - 캡슐화를 위해 UDP 사용자 데이터그램을 IP 소프트웨어에 전달한다.

* 수신자
    - 의사 헤더를 UDP 사용자 데이터그램에 더한다.
    - 필요하면 패딩을 더한다.
    - 전체 비트를 16 비트 섹션으로 나눈다.
    - 1의 보수 연산을 사용하여 모든 16 비트 섹션의 합을 구한다.
    - 그 결과의 보수를 구한다.
    - 만약 결과가 0이면 의사 헤더와 추가된 헤더를 없애고 사용자 데이터그램으로 받아들인다. 그렇지 않으면 폐기한다.




★ Pseudo Header ( 의사 헤더 )
- Pseudo 헤더는 IP 헤더와 UDP 헤더로부터 선택된 필드들로 구성된다.
- IP 헤더에서 참조 되는 것 : Source & Destination Address, Protocol
- UDP 헤더에서 참조 되는 것 : UDP Length
- 8 bit는 Zero로 채워짐.
- Optional Pad는 32 bit를 채우지 못하면 Zero로 빈공간을 채운다.
- Pseudo 헤더는 실제로 destination 로 전송되지 않으며 UDP checksum 계산을 보조하기 위해 논리적으로 구성된 것이다.