1. 소켓 (Socket) 이란?
ㅇ [일반] 전선/리드선,플러그 등을 접속하기 위한 홀/구멍을 말함
ㅇ [전산] 소프트웨어로 구현시킨 추상적인 포트를 말함
- 원격 및 동일 호스트 간 프로세스 대 프로세스 통신(IPC) 기능을 범용화시킨 추상적인 포트
. 통신 상의 양 끝점(endpoint)
- UNIX 등 대부분의 운영체제에서 이를 지원
2. [전산] 소켓의 출현 및 확산
ㅇ BSD 계열의 UNIX 시스템에서부터 시작됨
- 프로세스간 통신(IPC)에 공통적인 연결 방법을 제공하고,
- 복잡한 네트워크 프로토콜들을 단순하게 사용하는 Socket 이라는 메커니즘을 개발함
ㅇ 오늘날에는 BSD 계열 UNIX 이외에도 소켓 기능이 기본적으로 실장되어 있음
- 소켓은 통신 관련 어느 표준화 기구에서도 표준화 노력이 없었으나,
- 산업계에서는 사실상의 표준으로 받아들여지고 있음
- 심지어 MS社의 윈도우즈에서도 이를 활용하고 있음 ☞ Winsock 참조
3. [전산] 소켓 인터페이스의 특징
ㅇ 소켓 인터페이스 그 자체는 TCP/IP 표준이 아니나,
- 소켓은 네트워킹 프로그램을 작성할 때 매우 유용한 도구역할을 함
ㅇ 소켓 API는 주로 운영체제에서 제공됨
- 응용 프로그램과 통신 프로토콜들과의 인터페이스(API)를 위함
. 결국, 특정 운영체제 및 프로그램 언어에 의존적으로 동작함
ㅇ 소켓은 기본적으로, 네트워킹을 위한 I/O (입출력) 임 ☞ 아래 5.항 및 파일 I/O 참조
- 양 종단 간의 통신
ㅇ 소켓 통신은 클라이언트/서버 모델에 기초함
4. [전산] 소켓의 구조, 호출, 주소, 연결
ㅇ 소켓 구조
- 인터넷 통신용 소켓은, 응용 프로그램이 읽고 쓸 수 있는 소프트웨어 자료 구조임
ㅇ 소켓 호출
- 소켓의 생성,읽기,쓰기,종료 등
ㅇ 소켓 주소 : (Socket address = IP Address + Port Number)
- 통신 상의 양 끝점 각각에서 소켓 주소를 갖음
. 모든 소켓은, 항상 유일해야 만 함 ☞ 소켓 식별 (소켓 주소) 참조
ㅇ 소켓 연결 : 한 쌍의 소켓으로 구성됨
- (양끝단에 하나씩 서로 연결 관계를 갖음)
ㅇ 소켓 방향성 : 데이터 전달이 양방향성으로 가능
5. [전산] 소켓 I/O 및 화일 I/O 비교
※ UNIX 에서는 기존 I/O 방식과 네트워크 I/O 방식이 비슷하면서도 약간 다르게 취급
ㅇ 기존 I/O 방식 : 화일, 장치, 파이프
- 어떠한 입출력이라도 기본적으로 표준 화일식별자를 사용하여 입출력을 수행
ㅇ 네트워크 I/O 방식 : 소켓
- 소켓의 생성
. 일반적인 표준 화일과 관련된 시스템 호출을 사용하지 않고,
. 자체 소켓 시스템 호출(BSD)을 사용하게 됨
- 소켓 (연결)의 식별
. 일단 생성된 소켓은, 소켓 식별자로 구분되며,
. 이때부터, 소켓,파일 간에 구분 없이, 파일 식별자에 의해서도 해당 소켓에 접근 가능함
.. 저수준 입출력 함수들(read,write,close; open은 제외)에 의해,
.. 마치 파일 처럼 소켓에 접근 가능
- 소켓의 방향성
. 통상, 소켓 데이터 흐름은, 양방향성(bi-directional)의 특징을 갖음
6. [전산] 통신계층 상에서 소켓의 의미
ㅇ 양방향 (two-way) 통신 경로 상의 양끝점(End Point)
- 서비스 인터페이스에 중점을 둔 개념
- OSI의 SAP(Service Access Point)와 비슷
ㅇ 응용 프로세스와 전송계층 프로토콜 간의 인터페이스
- 또는, 전달하려는 메세지에 대한 출입구
7. [전산] `프로세스` 및 `TCP 프로토콜` 간의 소켓 연결 例
ㅇ 클라이언트 측의 프로세스는 요청용 소켓을 생성할 때,
- 서버 측의 IP 주소,포트번호 (소켓 주소)를 명시하고, TCP 연결 요청을 함
ㅇ 서버 프로세스는 그 응답으로 서버용 소켓을 생성하며,
- 양 소켓 간에는 TCP 연결 회선이 확립됨