티스토리 뷰

IT/Network

[네트워크] connected/unconnected UDP 소켓이란 ?

주인장 진빼이

unconnected UDP 소켓이란 ?

소켓 간에 연결되지 않은 소켓을 말하는데 데이터를 송신할 때 마다 목적지 정보를 임시로 등록하고 삭제하는 것을 말한다.

송신하는 대상이 정해져 있지 않았다고 생각하면 된다.

그러므로 UDP 소켓은 다양한 목적지로 데이터 전송이 가능하다.

UDP 소켓을 만들면 unconnected UDP 소켓으로 만들어진다.

 

unconnected UDP 소켓에서 데이터를 송신할 땐 다음과 같은 과정을 거친다.

  • 1단계: UDP 소켓에 목적지 IP, PORT 정보 등록
  • 2단계: 데이터 전송
  • 3단계: UDP 소켓에 등록된 정보 삭제

즉, sendto() 함수가 호출될 때마다 위 3단계 과정을 계속 반복하는 것이다.

이는 비용 낭비라고 볼 수 밖에 없다.

 

하나의 서버와 지속적, 자주 통신을 해야하는 상황이라면 

만들어진 unconnected UDP 소켓을 connected UDP 소켓으로 변경하는 것이 효율적이다.

 

connected UDP 소켓이란 ?

소켓 간에 연결된 소켓을 말하는데 데이터를 송신할 때마다 미리 목적지 정보를 등록하여 데이터를 송신하는 것을 말한다.

송신하는 대상이 정해졌다고 생각하면 된다.

그러므로 하나의 호스트와 지속적으로 통신할 때 사용하는 것이 바람직하다.

 

송신하는 대상이 정해졌다고 해서 TCP 프로토콜에서 연결될 때 이루어지는 Three-way handshake 과정을 거치는 것은 아니다.

목적지 정보가 등록되었으므로 send(), read() 함수들도 호출이 가능해진다.

 

connected UDP 소켓 생성 방법

TCP 프로토콜에서 클라이언트가 서버에게 연결 요청할 때 connect() 함수를 호출하여 연결이 성립(establish)되면

반환된 소켓 식별자(ID)를 이용하여 데이터를 주고 받았다.

 

connected UDP 소켓을 만들때에도 동일하게 connect() 함수를 이용하면 된다.

하지만 반환값을 사용하지도 않고 UDP 소켓은 TCP 서버에 연결 요청하듯이 TCP 연결 설정 과정을 거치지 않는다.

(코드로만 봤을 때는 TCP 서버에게 연결요청하듯이 동일하다)

 

conenct()함수를 호출할 땐 연결할 주소 정보와 커널에 unconnected UDP 소켓 핸들(식별자)를 매개변수로 전달한다.

SOCKET hClntSock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SOCKADDR_IN toAddr = { 0, };
// ... 주소 등록 과정 생략
connect(hClntSock, (LPSOCKADDR)&toAddr, sizeof(toAddr));

 

위 코드를 사용함으로서 unconnected UDP 소켓을 connected UDP 소켓으로 변경할 수 있다.

호스트 간 통신할 때 sendto, recvfrom 함수를 대신하여 send, recv 함수를 호출하여 통신할 수 있다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함