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 프로토콜의 관점에서 소켓은 인터페이스이다. 애플리케이션이 통신하기 위해 양쪽 모두 동일한 소켓을 사용해야 하는 것은 아니다. 둘 다 같은 프로토콜을 사용하고 정해진 형식과 절차에 따라 데이터를 주고받기만 하면 된다.

reference

Comments