본문 바로가기
공부/네트워크

[네트워크분석] UDP

by PraNi_ 2018. 5. 3.
반응형

UDP

UDP는 전송 프로토콜입니다.

포트번호를 이용해 프로세스-대-프로세스 통신을 생성하는 아이입니다.

최소한의 오류 제어 메커니즘을 수행하고, 프로세스로부터 데이터 단위를 받아 신뢰성 없는 비연결형 전달을 제공하기때문에 최소한의 오버헤드만 사용을합니다. 

그래서 간단하기때문에 통신속도가 TCP에 비해 빠릅니다. 그래서 단순 요청-응답만을 필요로하는 프로세스에 적합하죠.


UDP 전송층 프로토콜의 위치

위 사진을 보면 알 수 있듯이, 전송계층(Transport Layer)에 위치해있습니다.




UDP의 데이터그램

라우터를 거쳐 운반되므로 IP데이터그램에 캡슐화 됩니다.

IP 헤더의 프로토콜 필드 값에는 [0x11] 이 표시되므로 UDP는 17 입력되어있습니다.


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

프로세스는 응용 프로그램? (이메일, HTTP, 카카오톡 등) 정도로 생각하면 간단하게 정의가 될 것 같네요.

1) 클라이언트/서버 방식 사용

가) 호스트-대-호스트 통신 / 프로세스-대-프로세스 통신차이입니다.

- IP는 컴퓨터 레벨 통신(호스트-대-호스트 통신)의 책임이 있습니다.

- IP는 목적지 호스트에게 메시지 전달이 가능합니다.

- 그래서 메시지를 정확한 프로세스에게 전달하기 위해 UDP와 같은 전송층 프로토콜이 필요하게 되는 것입니다.

- 그러한 UDP는 해당 프로세스에게 메시지 전달의 책임이 있습니다.

응용 프로그램과 응용 프로그램 사이는 UDP 프로토콜 영역이 차지하고 있다는 것을 알 수 있습니다.


나) 포트번호

- 클라이언트와 / 서버의 프로세스-대-프로세스 통신의 방법입니다.

- 클라이언트와 서버 프로세스는 서로 같은 이름을 가지게됩니다.

- 예로들자면 daytime client proecess / daytime server 로요.

- 원격 컴퓨터는 여러 개의 서버 프로그램을 실행하고,

- 로컬 컴퓨터는 여러 개의 클라이언트 프로그램을 수행합니다.


다) 프로세스 통신을 위해 필요한 사항

- 로컬 호스트(local host)

- 로컬 프로세스(local process)

- 원격 호스트(remote host)

- 원격 프로세스(remote process)


라) 프로세스 통신에서 포트 번호의 역할

- 로컬 호스트와 원격 호스트 식별은 IP 주소가 담당합니다.

- 프로세스를 구분하는 것은 포트번호가 하구요.

- 포트번호의 범위는 [0 ~ 65,535] 사이의 정수를 가지므로 총 65,536개입니다.

- 포트의 정의는 [잘 알려진 포트 번호(well-known port number), 임시 포트 번호(ephemeral port number)]가 있습니다.

- 서버 프로세스는 포트 번호로 자신을 정의하는데, 이 서버 포트 번호는 임의로 선택할 수 없습니다. 그 이유는 서버 프로세스를 수행하는 서버 측의 컴퓨터가 임의의 포트 번호로 지정하게되면, 서버 사용을 원하는 클라이언트 측의 포트번호는 알 수 없어 접근할 수 없기 때문입니다.

- 물론 특정한 서버에게 특별한 패킷을 보내 포트 번호를 요청할 수도 있지만 오버헤드가 많이 발생하기때문에 많이 사용하지는 않겠죠.

- TCP/IP는 서버를 위해서 범용 포트 번호(well-known port number)를 사용합니다.

- 클라이언트는 임시 포트 번호(ephemeral port number)를 사용하기때문에 통신할때마다 포트번호가 달라집니다.

- 얘기를 길게하자면 카카오톡 서버를 예로들자면, 카카오톡 통신에 필요한 서버 포트가 만약 가정을해서 80번이 필요하다면, 클라이언트는 내보낼때 포트번호를 임의로 아무거나 지정해 보내게되고 서버로 가는 포트만 같다는 겁니다. 그래서 받는 측도 포트번호가 언제든 다릅니다. 서버만 거의 고정이라는 생각을 하고 계시면 될 것 같습니다.


마) IANA 범위

- 잘알려진 포트 :0 ~ 1,023까지 1024개를 IANA(Internet Assigned Numbers Authority)에 의해 배정했습니다.

- 등록된 포트 : registered port라고하고 1,024 부터 49,151까지 등록 포트라고 합니다.

- 동적 포트 : 말그대로 dynamic port라고하고 49,152 ~ 65,535 까지의 임시포트를 동적포트라고 합니다.




바) UDP에서 사용되는 잘 알려진 포트

- 16개 정도로 정의되어 있는데요.

확인만하고 넘어가시면 될 것 같아요.

DNS(Domain Name Server)는 패킷 사이즈가 길어지면 신뢰가 필요해 TCP를 쓰기도 합니다.


사) 소켓 주소

- 소켓 주소는 각 종단 점에서 연결을 만들기위해 필요한 주소입니다.

소켓 주소 = IP주소+포트번호 라고 생각하시면 됩니다.


2) 사용자 데이터 그램

- 8바이트(16비트*4칸=64비트)의 고정 크기 헤더를 가집니다.

IP 데이터그램내 삽입되는 헤더의 모습입니다.

- Source port number (2바이트)

송신지 호스트상에서 수행되는 프로세스의 포트번호 입니다. 아까 전체 포트의 범위가 들어갑니다.

클라이언트임시 포트 번호, 서버이면 잘 알려진 포트 번호를 사용합니다.

- Destination Port (2바이트)

목적지 호스트상에서 수행되는 프로세스의 번호입니다.

- Total Length (2바이트)

└ UDP헤더와 데이터 길이를 합한 사용자 데이터그램의 전체 길이입니다. 최소 크기는 8바이트입니다.

└ UDP 길이 = IP길이 - IP 헤더 길이를 빼면 계산이됩니다.

- Checksum (2바이트)

└ UDP 헤더와 데이터에 대한 오류 검사로 선택사항입니다.




3) UDP 동작

가) 비 연결형 서비스

- 각 데이터그램은 서로 독립적입니다.

- 그래서 연결 설정과 종료 과정 없이 서로 다른 경로로 전달 될 수 있습니다.

- 작은 메시지를 보내는  프로세스만이 UDP를 사용되게됩니다.


나) 흐름제어와 오류제어

- UDP는 간단하고 신뢰성없는 프로토콜입니다.

- 그래서 흐름제어도 없고 윈도우 메커니즘도 없습니다.

- 검사합 외에는 오류 제어 메커니즘도 없습니다.


4) UDP 동작

마찬가지로 캡슐화와 역캡슐화는 적용됩니다.

가) 큐잉(Queueing)

- 클라이언트에서 프로세스가 시작될 때 운영체제에게 임시 포트번호를 요청합니다.

- 구현에 따라 입력 큐 또는 입/출력 큐가 생성됩니다. 서버와 클라이언트에서 들어오고 나갈때 각각 입출력을 하나씩 가지고 있습니다.

- 프로세스가 종료되면 자연스럽게 큐는 제거됩니다.

- 큐가 생성되어 있지 않으면 ICMP 프로토콜에게 "port unreachable" 메시지를 보낸 데이터그램은 폐기됩니다.

- 큐(Queue)라고 쓰는 이유는 자료구조에서 빨리오는 것 순서대로 줄을 세워 처리해주기때문에 그 것을 큐(Queue)라고 합니다.


5) UDP 사용

- 단순한 요청-응답을 필요로 하는 프로세스에 적합합니다.

- 흐름 제어와 오류 제어가 크게 필요하지 않은 프로세스에 사용합니다.

- 내부적인 흐름 제어와 오류 제어 메커니즘을 가지고 있는 프로세스에 사용합니다.

- 멀티캐스팅과 브로드캐스팅을 위한 전송 프로토콜에 사용합니다.

- SNMP와 같은 관리 프로세스에 사용합니다.

- RIP(Routing Information Protocol)와 같은 경로 갱신 프로토콜에 사용합니다.


이더헤더부터 시작해서 UDP까지 포함한 데이터그램


반응형

댓글