글
■ 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 |
RECENT COMMENT