일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 웹
- 자바 is-a
- php
- 쿠키
- 스프링
- 웹 개발
- Los
- Lord of sqlinjection
- 해킹
- 서버
- APM
- 세션쿠키
- 스프링구조
- 스프링 종류
- sql
- lord of sqlinjectin
- injection
- XSS
- 보안
- lord of sqlinjection`
- 소켓
- 자바 has-a
- 자바 문법
- 마이크로서비스 아키택트
- 스프링 특징
- 자바 Array list
- 세션
- 클라이언트
- 자바
- sqlinjection
- Today
- Total
LJ
SOCKET 이란 본문
소켓
- 양 끝단 특정 포트와 연결된 종착지이자 연결부
소켓을 간단히 이해하기 위한 설명을 덧붙이면, 친구에게 택배를 보낸다고 했을 때, 상자에 보낼 물건을 넣고 나의 이름, 주소 등의 인적사항과 친구의 집 주소를 적어야 한다.컴퓨터에서는 이 역할을 소켓이 해준다고 보면 된다.
소켓은 데이터를 주고 받을 수 있게 연결해주는 연결부이기에 통신할 두 프로그램에 모두 생성되어야 합니다.
Server는 특정 포트와 연결된 소켓(Server 소켓)을 가지고 컴퓨터 위에서 동작하게 되는데요. 이 Server는 소켓을 통해
Cilent측 소켓의 연결 요청이 있을 때까지 기다리고 있습니다(listening 한다 라고도 표현합니다).
Client 소켓에서 연결요청을 하면(올바른 port로 들어왔을 때) Server 소켓이 허락을 하여 통신을 할 수 있도록 연결(connection)되는 것입니다.
소켓을 이용한 TCP/IP 프로그래밍을 소켓 프로그래밍이라고 한다. 일반적으로 소켓 프로그래밍 하면 유닉스/리눅스 환경을 가리키고, BSD운영 체제에서 처음 소개되었으므로 BSD Socket이라고 표현한다. 윈도우 환경에서는 WinSock(Windows Socket)이라는 명칭을 따로 사용한다.
소켓은 IPC 중 하나인데
Inter-Process Communication
컴퓨터 프로세스간 통신.
운영체제 상에서 실행 중인 프로세스 간에 정보를 주고받는 것을 Inter Process Communication(IPC)라고 한다. 프로세스는 자신에게 할당된 메모리 내의 정보만 접근할 수 있고, 이를 벗어나서 접근할 경우, C언어를 배우는 사람이라면 누구나 한 번쯤은 봤을 Segmentation Fault 등의 오류가 발생하게 된다. 이는 안전성을 위해 운영체제에서 자기 프로세스의 메모리만 접근하도록 강제하고 있다는 것이다.
따라서 한 프로그램에서 병렬성을 키우면서 공유되는 데이터를 사용하기 위해 메모리 공간을 공유하는 스레드를 이용하는 경우가 많다 (물론 스레드를 쓰는 이유는 이것 말고도 매우 다양하다). 하지만 이것은 하나의 프로그램에서만 의미가 있는 것이고, 서로 다른 프로그램(즉, 서로 다른 프로세스)의 데이터를 공유하려면 결국 다른 프로세스의 메모리를 접근할 필요가 발생한다. 따라서 이 때는 IPC라는 것을 사용하게 된다.
다른 것도 있다. 바로 LPC(Local Inter-Process Communication, 로컬 컴퓨터 프로세스간 통신)라는 게 있는데 프로세스가 다른 프로세스와 정보를 주고 받을 때 빠른 속도로 데이터를 교환하기 위해 사용한다. 다만 이건 커널에서만 쓸 수 있으며 일반 프로그램은 LPC를 사용할 수 없다.
1. 소켓 (Socket)
ㅇ 원격 및 동일 호스트 간 프로세스 대 프로세스 통신(IPC) 기능을 범용화시킨,
- 추상적인 포트
2. 소켓 주소 (Addressing) 및 포트 번호 (Port Number)
ㅇ 소켓 주소 (Socket Address)
- IP Address 및 Port Number 를 조합한 것
. 즉, Socket address = IP Address + Port Number
ㅇ 포트 번호 (Port Number) ☞ 소프트웨어 포트, 포트 번호
- 응용 또는 사용자 프로세스들이 사용하는 출입구를 식별
. 이는 UDP 헤더 또는 TCP 헤더 부분에 포함됨
- 포트 번호는 목적지 시스템에서 실행중인 특정 서비스나 어플리케이션을 카리킴
3. 소켓 주소에 의한 TCP 연결(회선)의 식별
ㅇ 2개의 IP 주소 및 2개의 포트 번호에 의해, 4개가 하나의 연결(회선)을 식별함
- (발신지 소켓 주소, 수신지 소켓 주소)
- 즉, ( (발신지 IP 주소, 발신지 포트 번호), (수신지 IP 주소, 수신지 포트 번호) )
ㅇ 결국, 위 4 값에 의해, TCP 연결(커넥션) 및 그 방향도 식별이 가능
4. 소켓 식별자
ㅇ 일단 생성된 소켓은, 응용 프로그램에서, 소켓 식별자 또는 파일 식별자에 의해 구분되어,
- 이를 통해 접근 가능 함
- 즉, 저수준 입출력 함수들(read,write,close; open은 제외)에 의해,
- 마치 파일 처럼 소켓에 접근 가능
즉, OSI 7 계층의 어플리케이션 계층(application layer)에 존재하는 네트워크 응용 프로그램들은 데이터를 송수신 하기 위해 소켓을 거쳐 전송 계층(trasport layer)의 통신 망으로 전달함으로써 데이터를 송수신 하게 된다.
따라서 소켓은 그 사이에 위치하고 있으며, 응용 프로그램에서 TCP/IP를 이용하는 인터페이스 역할을 한다.
통신을 통해 전달되는 모든 데이터 포맷은 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개로 여러 개의 소켓을 열어 다수의 호스트들과 통신도 가능하다. 이때 소켓들을 구분하는 방법은 소켓에 주어지는 소켓 번호로 식별한다.