yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

소켓(Socket) 통신 본문

기타 기본 지식

소켓(Socket) 통신

yehey 2020. 9. 13. 20:25

소켓(Socket): 클라이언트와 서버가 연결, 통신하도록 도와주는 소프트웨어(도구)

네트워크 상에서 클라이언트 프로그램과 서버 프로그램간 양방향 통신 엔드포인트 프로세스가 데이터를 송수신할 때 반드시 소켓을 열어 소켓에 데이터를 작성하거나 소켓으로부터 데이터를 읽어야한다.

 

엔드 포인트: IP주소와 Port 번호의 조합

소켓 통신: Client가 port를 통해 실시간으로 양방향 통신을 한다.

-Server와 Client가 계속 연결을 유지하는 양방향 통신

-Server와 Client가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용한다.

-실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 주로 사용한다.

 

더보기

HTTP 통신: Client의 요청이 있을 때만 서버가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료

-Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신

-Server로부터 응답을 받은 후에는 연결이 바로 종료된다

-실시간 연결이 아니라 필요한 경우에만 Server로 요청을 보내는 상황에 유용하다.

-요청을 보내 Server의 응답을 기다리는 어플리케이션 개발에 주로 사용

소켓 통신 과정

 

Client, Server 소켓 통신 간략화

 

클라이언트는 Client Socket을 사용하고 서버는 Server Socket을 사용한다.

 

Client Socket

: 요청대기가 필요하지 않음, 바로 소켓을 생성하고 서버 프로그램에 연결을 요청하고 데이터를 전송한다.

 

Server Socket

: 서버에서 사용하는 소켓, 클라이언트의 연결 요청을 기다리며, 요청 발생 시 클라이언트와 연결을 맺거나 다른 소켓을 만든다.

 

소켓(Socket) 통신의 자세한 흐름

소켓은 운영체제가 제공을 해준다.(운영체제로부터 빌려서 사용한다=소켓 요청을 한다)

 

Socket 통신 흐름

Server Socket의 과정

1. socket(): 서버 소켓을 사용하기 위해 소켓 생성

2. bind(): IP 주소와 Port 번호 설정

 

bind() ; 소켓 바인딩, 소켓 바인드
서버 소켓은 고정된 port번호를 사용하는데, 운영체제가 특정 포트 번호를 서버 소켓이 사용하도록 만들기 위해 소켓과 포트번호를 결합할 때 사용하는 API이다. 

3. listen(): 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정하고 client에 의한 연결 요청이 수신될 때까지 기다림

4. accept(): 연결 요청을 받아들여 소켓 간의 실질적인 연결 수립

5. send()/recv(): 연결된 소켓을 통해 데이터를 송수신

6. close(): 더이상 데이터 송수신이 필요없게 되면, 소켓을 닫기 위해 호출, 닫힌 소켓은 더이상 유효하지 않으며 해당 소켓을 사용하여 데이터를 송수신 할 수 없다.

 

Client Socket의 과정

1. socket(): 소켓 통신을 위한 소켓 생성 (소켓 종류를 지정할 수 있다.)

2. connect(): IP 주소와 port 번호로 식별되는 대상으로 연결 요청을 전송

3. send()/recv(): 연결된 소켓을 통해 데이터를 송수신

4. close(): 소켓을 닫기 위해 호출

 

소켓의 종류

STREAM(스트림)

-TCP 프로토콜 기반

-양방향으로 바이트 스트림을 전송할 수 있는 연결 지향형 소켓

-양쪽 어플리케이션이 모두 데이터를 주고 받을 수 있음

-송신된 순서에 따라 중복되지 않게 데이터를 수신

-각 메시지를 보내기 위해 별도의 연결을 맺기 때문에 오버헤드 발생

-오류 수정, 전송 처리, 흐름 제어 등을 보장

-대량의 데이터 전송에 적합

 

데이터그램(DATAGRAM)

-UDP 프로토콜 기반

-명시적으로 연결을 맺지 않은 상태로 데이터를 주고 받는 비연결형 소켓

-스트림 소켓이 신뢰성 높은 방법이지만 연결 수립시 오버헤드가 발생한다.

-빠르기가 중요한 소량의 데이터 전송 시 연결이나 해체 과정이 없어 속도가 빠른 데이터그램 소켓 사용

-데이터 크기에 제한, 확실한 전달이 보장되지 않는다. (데이터가 손실되어 오류가 발생하지 않음)

-실시간 멀티미디어 정보를 처리하기 위해 주로 사용 

'기타 기본 지식' 카테고리의 다른 글

알고리즘  (0) 2020.10.19
Port 스캔  (0) 2020.10.10
백도어  (0) 2020.09.28
FTP 취약점 및 보안  (0) 2020.09.15
FTP 프로토콜  (0) 2020.09.14
Comments