왓풀(whatpull)
소켓(Socket) 본문
소켓(socket)은 다음을 가리키는 말이다.
소켓은 특정한 파이프의 끝, 파이프 이음쇠 또는 위생 기구를 수용하기 위해 확장한 것으로, 또 다른 파이프의 끝이나 파이프 이음쇠을 가리킨다. 또한 소켓(socket)은 통신선 또는 전기선, 전구 따위를 끼워 넣어 연결선과 접속하게 하는 연결기구를 가리킨다.
소켓 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 소켓(socket)은 다음을 가리키는 말이다. 소켓은 특정한 파이프의 끝, 파이프 이음쇠 또는 위생 기구를 수용하기 위해 확장한 것으로, 또 다른 파이프의 끝이나
ko.wikipedia.org
네트워크 소켓(network socket)은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점이다. 오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으므로, 대부분의 네트워크 소켓은 인터넷 소켓이다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다. 소켓은 RFC 147에 기술사항이 정의되어 있다.
인터넷 소켓은 다음과 같은 요소들로 구성되어 있다.
인터넷 소켓은 크게 두 개의 타입으로 분류할 수 있다.
즉, OSI 7 계층의 어플리케이션 계층(application layer)에 존재하는 네트워크 응용 프로그램들은 데이터를 송수신 하기 위해 소켓을 거쳐 전송 계층(trasport layer)의 통신 망으로 전달함으로써 데이터를 송수신 하게 된다.
5-Tuple
통신을 통해 전달되는 모든 데이터 포맷은 5-tuple 이라는 규격에 맞추어 흐르게 된다.
- 프로토콜 (Protocol)
- 호스트 IP 주소 (source IP address)
- 호스트 port 번호 (source port nunber)
- 목적지 IP 주소 (destination IP address)
- 목적지 port 번호 (destination port number)
- IP 주소: 호스트(컴퓨터, 스마트 폰 등의 단말기)들을 식별할 수 있는 고유한 주소다. IP 주소가 있으면 어떤 호스트에 데이터를 보내는 지, 누가 보내는 지를 알 수 있다.
- port 번호: 호스트 내의 프로세스들을 식별할 수 있는 번호다.
소켓도 위 정보들인 프로토콜, IP 주소, port 번호가 있어야 정의된다.
먼저 보통 소켓은 인터넷 소켓이며, 위에서도 말했듯이 전송 계층 위에서 동작하므로 프로토콜은 TCP/UDP 가 된다. 프로토콜이 정의되면 네트워크 상에서 데이터를 송수신할 수 있는 방법, 규칙이 정의된 것이다.
이제 누가 어디로 보낼 지를 정의하기 위한 주소로 IP와 port 정보가 필요하다. IP 주소는 어떤 호스트(단말기)로 데이터를 보내야 할 지 알려준다. IP 주소를 이용해 원하는 호스트에 도착했다고 끝이 아니라 송수신할 프로세스를 찾아야 한다. 소켓은 프로세스 간 통신을 하기 위한 api다. 이때 port 번호를 통해 어떤 프로세스에 가야할 지 정할 수 있다.
즉, 호스트의 어떤 프로세스와 다른 호스트(목적지 호스트)의 프로세스가 네트워크 상에서 통신하기 위해 당연하게 위 정보들이 필요하게 된다.
또 중요한 부분이 1개의 프로세스는 1개 이상의 소켓을 사용할 수 있다. 따라서 1개의 호스트 내의 프로세스 1개로 여러 개의 소켓을 열어 다수의 호스트들과 통신도 가능하다. 이때 소켓들을 구분하는 방법은 소켓에 주어지는 소켓 번호로 식별한다.
Secket 통신의 특징
server-client 구조
TCP/UDP 위에서 동작하므로 당연하게 server-client 통신 구조를 갖춘다.
처음에 데이터를 보내는 쪽이 client가 되고, 받는 쪽이 server가 된다. 이후에는 서로가 데이터를 송수신할 수 있다. (자세한 설명은 아래)
양방향 통신
socket은 한 쪽에서 데이터를 보내고 반대 편에서 이를 수신한 뒤 연결이 끊어지는게 아니라 양 쪽에서 실시간으로 데이터를 송수신할 수 있다. 따라서 실시간 스트리밍이나 채팅에 주로 유용하게 사용된다.
프로그래밍 언어나 운영체제에 종속적
socket은 TCP/IP 표준이 아니라 네트워크 프로그래밍 인터페이스다. 따라서 운영체제마다 사용법이 약간씩 다르며, 그 안에서 또 프로그래밍 언어마다 소켓 aip를 구현한 라이브러리가 다 다르다.
소켓의 종류 및 통신 흐름
Stream sockets - TCP (Transmission Control Protocol)
- TCP를 사용하므로 연결 지향형(Connection-oriented) 소켓
- 신뢰성을 보장한다
- 데이터가 순서대로 송수신된다
- 점대점(point-to-point) 연결

Server
- socket(): 소켓 생성(TCP는 stream)
- bind(): 사용할 IP address와 Port number 등록
- listen(): 연결 되지 않은 소켓을 요청 수신 대기 모드로 전환(Block 상태)
Client
- socket(): 마찬가지로 소켓 생성(TCP는 stream)
- connect(): Client에서 Server와 연결하기 위해 소켓과 목적지 IP address, Port number 지정 (Block 상태)
Server
- accept(): client의 요청 수락 후 실질적인 소켓 연결 → 통신을 위한 새로운 소켓 생성
(참조 : 처음 만들어 진(bind() 후 listen()한) 소켓은 그 이후로도 새로운 Client의 요청을 대기하기 위해 쓰임)
Server-Client
- send(), recv(): Client는 처음에 생성한 소켓으로, Server는 새로 반환(생성)된 소켓으로 client와 server간에 데이터 송수신
- close(): 소켓을 닫음
Datagram sockets - UDP (User Datagram Protocol)
- UDP를 사용하므로 비 연결형(Connectionless) 소켓
- 신뢰성을 보장할 수 없다.
- 데이터가 순서대로 송수신될 지를 보장하지 못한다.
- 점대점 연결뿐만 아니라 일대다도 가능
connect()과정이 필요 없기 때문에 소켓을 생성한 후 바로 데이터 전송
따라서 주로 일 대 다 통신에 많이 쓰임
'웹개발 > [지식] 프로그래밍' 카테고리의 다른 글
HTTP(HyperText Transfer Protocol) (0) | 2022.07.31 |
---|---|
FTP(File Transfer Protocol) (0) | 2022.07.31 |
XML-RPC (0) | 2022.07.31 |
SOAP (0) | 2022.07.31 |
IPC(Inter-Process Communication) Windows thread (0) | 2022.07.31 |