게임서버 공부_winsock

네트워크에서 소켓의 역할

네트워크 통신을 하기위해서는 HW수준의 신호처리부터 운영체에의 프로토콜 구현 등 여러 계층의 장비가 필요하다. 하지만 OS가 제공하는 소켓을 이용하면 아래 계층의 과정을 신경쓰지 않고 네트워크 통신을 할 수 있다. 우편을 보낼때 건물의 주소(IP)와 주소(PORT)만 알면 되는것 처럼.

소켓의 3가지 관점

데이터 타임 관점에서의 소켓

유닉스 시스템에서는 파일디스크립터, 윈도우 시스템에서는 핸들과 유사한 개념으로 사용된다.

SOCKET sock = socket(...);
...
recv(sock, ...);
send(sock, ...);

이때 socket(...)로 전달받은 ~로 아래와 같은 OS에서 관리하는 네트워크 정보에 접근할수 있다.

따라서 소켓을 이용해 다른 네트워크 통신 함수에도 사용할수 있는 데이터 타입으로 볼 수 있다.

통신 종단점 관점에서의 소켓

소켓은 응용프로그래밍 관점에서 통신 종단점(출발점과 시작점)이다. 네트워크 통신에서 데이터의 최종목적이가 port이고, 소켓은 port에서 데이터를 송수신하고 필요한 정보를 관리하기 때문이다.

응용 프로그래밍은 소켓을 이용하여 데이터 통신을 할 대 특정 위치(IP:port)에 정해진 방식(프로토콜)만 알고있으면 된다.

네트워크 프로그래밍 인터페이스 관점에서의 소켓

소켓_API 3, 4계층의 통신은 OS가 관리하는 통신이다. OS는 사용자에게 네트워크 기능을 제공하면서 이를 보호하기 위해 API를 제공하는데, 이것이 소켓이다.

윈도우 소켓

유닉스에서 쓰던 소켓을 윈도우 환경에서 사용 가능하게 만든게 윈도우 소켓, 줄여서 윈속이다. 대부분은 유닉스의 소켓과 유사하나, 다음과 같은 차이점을 가진다.

현재 윈속 버전은 2.2이며, TCP/IP, IPv6, IrDA, Bluetooth기능을 지원한다. 윈속의 장점

단점

윈속 구조

윈속이 지원하는 대부분의 기능은 WS2_32.DLL로 제공된다. 이때 WS2_32는 32bit 동적 라이브러리 이지만, 64bit에 맞게 포팅?되어서 신경쓰지 않아도 된다.

(굉장히 좋은 글)[https://recipes4dev.tistory.com/153]