2013년 5월 20일 월요일

소켓(Soket) 통신이란?

오전 8:24 Posted by jonnung 4 comments

Node.js를 공부하면서 Soket.io 사용하는 부분을 배우기 전에 간단하게 소켓 통신에 대한 개념에 대해 조사를 해 보았다.

잘 맞는 것인지는 모르겠지만 조사를 하는 과정에서 추상적이지만 개념정도는 정립이 된 것 같다.

UDP는 예전에 친구들과 PC방에서 편먹고 스타크래프트1 할 때 들어가던 메뉴 였던 것으로 기억하는데 이제야 뭔지 알게 되었다.ㅋㅋ

소켓 통신

네트워크를 통하여 서로 다른 컴퓨터에서 수행되는 프로세스간의 통신 채널이다.

소켓통신에는 신뢰성 프로토콜인 TCP(Transfer Control Protocol)와 비신뢰성 프로토콜인 UDP(User Datagram Protocol)가 있다.

TCP 통신의 개념

TCP 통신은 쉽게 전화 통화하는 방식으로 동작한다. 상대방의 전화번호를 알고 있어야 전화를 걸 수 있듯이 상대방의 IP 주소와 포트를 알고 있어야 연결을 할 수 있다. 

서버가 응답을 받아주지 않으면 계속적으로 요청을 하게 된다. 어느 시점에서 요청을 포기하게 될 수도 있다.

이처럼 TCP 통신은 계속적으로 소켓을 통해 데이터를 주고 받을 수 있는 양방향 통신이 가능하다. 또한 데이터를 받지 못했을 때 다시 요청하는 메커니즘을 가지고 있다.

UDP 통신의 개념

상대방과 연결되어 있는 개념이 아니다. 소켓을 개설하고 그냥 데이터를 보내는 개념이다. 

이는 편지를 보내는 방식과 유사하다. 편지를 보냈더라도 편지를 받는 사람은 편지함을 열어보기 전에는 편지가 왔는지 안왔는지 알 수 없다. 

따라서 UDP 통신은 UDP 소켓을 통해서 자신의 포트를 열어보기 전에는 데이터가 왔는지 오지 않았는지 알 수 없다.

TCP와 UDP의 비교

TCP 통신은 데이터를 주고 받을 때 데이터가 도착했는지 여부를 내부적으로 확인한다.

만약 데이터가 오지 않았다면 재요청을 하는 메커니즘을 가지고 있어 양방향으로 연결 되어 있지만 이러한 확인 절차로 인해 속도면에서 느리다. 

하지만 UDP는 이러한 확인 절차를 거치지 않고 계속적으로 데이터를 전송하기만 하기 때문에 속도면에서 훨씬 빠르다.

속도면에서는 UDP가 빠르지만 UDP는 데이터가 도착했는지 알 수 었는 비신뢰성 프로토콜이다.