소켓(socket)이란?
Network - socket
최초의 socket은 BSD UNIX가 개발한 네트워크 프로그래밍 인터페이스였다. 이것을 윈도우에서 사용할 수 있게 만든 것을 Windows Socket(줄여서 Winsock)이라고 한다. 네트워크 프로그래밍 인터페이스를 사용하면 하드웨어와 운영체제를 직접 조작하지 않아도 네트워크 프로그램을 만들 수 있다. 네트워크 통신을 사람들이 전화 통화를 하는 상황에 비유한다면 전화를 하는 사람은 컴퓨터 프로그램에, 전화기는 소켓에 대응된다.
socket은 데이터 타입, 엔드포인트, 네트워크 프로그래밍 인터페이스 등 세 가지 관점에서 해석할 수 있다.
데이터 타입
- Linux - 소켓도 파일이 때문에 소켓은 int type의 file descriptor로 조작된다. 인터페이스가 파일과 거의 비슷(
write()
read()
함수 사용)하다. - Windows -
SOCKET
이라는 별도의 데이터 타입이 존재한다.recv()
send()
함수를 사용한다.
애플리케이션이 네트워크 통신을 하기 위해서는 다음과 같은 요소를 결정해야 한다.
- 사용할 프로토콜(TCP/IP, UDP/IP)
- 데이터를 보내는 호스트(PC)의 IP 주소
- 데이터를 보내는 애플리케이션의 port 번호
- 데이터를 받는 호스트(PC)의 IP 주소
- 데이터를 받는 애플리케이션의 port 번호
엔드포인트
애플리케이션의 관점에서 소켓은 통신의 양 끝점(endpoint)이다. 각 호스트들은 소켓에 데이터를 읽고 쓰는 것으로 데이터를 주고 받는다.
인터페이스
TCP/IP 프로토콜의 관점에서 소켓은 인터페이스이다. 애플리케이션이 통신하기 위해 양쪽 모두 동일한 소켓을 사용해야 하는 것은 아니다. 둘 다 같은 프로토콜을 사용하고 정해진 형식과 절차에 따라 데이터를 주고받기만 하면 된다.
Comments