■ TCP와 UDP의 가장 큰 차이는 연결지향이냐, 비연결형이냐 이다.


(1) UDP 통신의 흐름


- UDP통신은 listen(연결대기상태), connect(연결요청), accept(연결허용) 과정이 따로 존재하지 않는다.
- 연결을 하지 않고 sendto( )와 recvfrom( )에 도착지의 주소와 데이터를 같이 실어 전송한다.


(2) UDP 소켓 통신의 특징
: 송수신 함수가 호출되는 순간에만 커널은 소켓과 연결된다.



- 함수 호출 전(위 그림)에는 커널과 소켓이 끊어져있다.
- 함수가 호출되면(아래 그림) 커널과 소켓이 연결된다.
- 함수 호출 후(위 그림) 커널과 소켓은 다시 끊어진다.


(3) UDP 통신의 connect() 활용

○ TCP의 connect() 함수와의 차이
  - TCP소켓의 connect()는 2가지 일을 진행한다. (IP, Port 할당 / 연결요청)
  - UDP소켓의 connect()는 오직 IP와 임의의 Port를 할당하는 일만 진행한다.

○ UDP 소켓 통신에서 connect()의 이점과 단점
  - 송수신 함수(sendto / recvfrom)가 호출되는 순간 커널과 소켓이 연결되고, 데이터 전송이 끝난 후 다시 연결이 끊어진다.
  - 커널과 소켓을 연결하는 과정이 전체 전송 시간의 1/3을 소비하게 된다.
  - connect() 함수를 사용하여 IP와 Port를 소켓에 할당해 놓으면 커널은 해당 소켓과의 연결을 유지한다.
  - 그리하여 더 빠른 속도를 제공하며, TCP기반의 read() / write() 함수도 사용할 수 있게 된다.

  

                                            < connect()함수를 통해 kernel과 socket이 연결을 유지 >

  - 하지만 연결이 이루어진 후에는 지정한 주소로만 데이터의 송수신이 가능하다.


※ UDP 통신에서 클라이언트가 connect()함수를 사용하여 read()/write()로 데이터를 송수신 할 경우 서버의 미실행 오류를 알 수 있다. write() 함수 실행 시 서버가 off 상태일 경우 UDP connect error 발생.

'P rogramming > Socket' 카테고리의 다른 글

리눅스 특정 포트 열기 / 닫기  (0) 2013.10.12
9. 다중입출력 - select()  (1) 2012.03.12
TCP 소켓 프로그래밍 (Echo Client)  (1) 2012.03.06
TCP 소켓 프로그래밍 (Echo Server)  (0) 2012.03.06
8. 연결요청 - connect()  (7) 2012.03.06
by 민트앤라떼 2012. 3. 8. 20:04