RUDP( Reliable UDP )란?

 

  • RUDP( Reliable UDP )란 신뢰할 수 있는 UDP로서 UDP를 랩핑하여 안전한 송.수신을 구현한 프로토콜을 말합니다.

 




RUDP를 사용하는 여러가지 이유

 

  • TCP보다 빠르고 안정적인 송.수신 프로토콜을 구현하기 위해 사용합니다.

 

  • TCP는 IP와 포트를 기준으로 연결을 수립하지만 RUDP는 프로그래머가 어떻게 구현하느냐에 따라서 연결 기준을 변경할 수 있습니다. 이러한 장점은 이동할 때마다 중계기가 변경되어 IP가 바뀌는 모바일 환경에서 매우 이점이 있습니다. 예를들어서 대중교통을 이용하면서 TCP 통신을 하는 모바일 게임을 즐기고 있다면 중계기가 바뀔 때마다 연결이 끊길 것입니다.




RUDP 구현에 필요한 스펙

 

  • TCP의 3-way-handshake와 같이 연결할 PC간의 연결 정보를 교환하여 세션을 수립하는 작업이 필요합니다.

 

  • UDP는 송신하려는 데이터의 크기를 그대로 네트워크 계층으로 전달하기 때문에 네트워크 계층에서 MTU 사이즈 초과로 분할되는 것을 방지하기 위해서 송신하려는 데이터의 크기를 조절하여 사용해야 합니다.

 

  • TCP가 오류 제어, 흐름 제어, 혼잡 제어를 통해서 안전한 송.수신을 구현한 것처럼 RUDP에도 이와 같은 스펙이 구현되어야 합니다.




블로킹 소켓 ( Blocking Socket )

 

  • 블로킹 소켓은 소켓 함수를 호출했을 때 현재 수행할 수 없다면 수행할 수 있을 때 까지 block 되는 소켓을 말합니다.




넌블로킹 소켓 ( Nonblocking Socket )

 

  • 넌블로킹 소켓은 소켓 함수를 호출했을 때 현재 수행할 수 없다면 블락되지 않고 error를 return 하는 소켓을 말합니다.




블로킹 소켓과 넌블로킹 소켓 함수의 차이

 

accept()

 

블로킹 소켓

  • 현재 백로그 큐 ( Backlog Queue ) 에 연결 정보가 없다면 연결 정보가 Enqeue 될 때 까지 블락됩니다.

 

넌블로킹 소켓

  • 현재 백로그 큐 ( Backlog Queue ) 에 연결 정보가 없다면 INVALID_SOCKET 을 return 하며 WSAGetLastError(); 를 호출할 경우 WSAEWOULDBLOCK 이 return 됩니다.




connect()

 

블로킹 소켓

  • SYN 패킷을 보낸 후 상대방으로부터 응답이 올 경우 return 됩니다.

 

넌블로킹 소켓

  • SYN 패킷을 보낸 직후 바로 SOCKET_ERROR를 return 하며 WSAGetLastError(); 를 호출할 경우 WSAEWOULDBLOCK 을 return 합니다.




send()

 

블로킹 소켓

  • 소켓 송신 버퍼의 남은 공간이 송신하려는 데이터 크기보다 부족할 경우 소켓 송신 버퍼의 공간이 확보될 때 까지 블락됩니다.

 

넌블로킹 소켓

  • 소켓 송신 버퍼의 남은 공간이 송신하려는 데이터 크기보다 부족할 경우 남은 공간만큼 복사 후 소켓 송신 버퍼에 복사한 크기만큼 정수 형태로 return 합니다.




recv()

 

블로킹 소켓

  • 소켓 수신 버퍼의 수신된 데이터가 1byte 라도 없으면 소켓 수신 버퍼에 수신 데이터가 복사될 때 까지 블락됩니다.

 

넌블로킹 소켓

  • 소켓 수신 버퍼의 수신된 데이터가 1byte 라도 없으면 SOCKET_ERROR 를 return 하고 WSAGetLastError(); 를 호출했을 때 WSAEWOULDBLOCK 을 return 합니다.

+ Recent posts