Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

KSI일기장

소켓(Socket)통신 개념 본문

Server

소켓(Socket)통신 개념

MyDiaryYo 2024. 4. 24. 17:56

 

 

Socket이란...

*프로세스가 네트워크 세계로 데이터를 내보내거나 받기위해 실제적인 창구 역할을 한다.

*프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 보내거나 소켓으로부터 데이터를   읽어들어야 한다.

*소켓은 떨어져 있는 두 호스트를 연결해주는 도구 역할을 하는데 데이터를 주고 받을 수 있는 구조체로 

  소켓을 통해 데이터 통로가 만들어진다.

*소켓은 프로토콜, IP, 포트(port)로 정의된다.

  -프로토콜 약속을 의미하고, 통신에서는 어떤 시스템이 다른 시스템과 통신을

    원활하게 하도록 해주는 통신 규약입니다.

  -IP는 전 세계 컴퓨터에 부여된 고유 식별 주소입니다.

  -포트(port)는 네트워크 상에서 통신하기 위해 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자이다.

  한 호스트 내에서 네트워크 통신을 하고있는 프로세스를 식별하기 위해 사용되는 값이므로, 같은 호스트내에서 서로 다른

  프로세스가 같은 포트번호를 가질 수 없다. 

 

*소켓은 역할에 따라 서버소켓, 클라이언트 소켓으로 구분된다.

-서버소켓

: 클라이언트 소켓에 연결 요청 대기하다 요청이 오면 클라이언트 소켓을 생성해 통신이 가능하게 한다.

1.소켓생성

2.바인딩(ip, port 번호 설정)

3.listen()으로 클라이언트 요청에 대기열을 만들어 몇개의 클라이언트를 대기시킬지 결정

4.accept()로 클라이언트와 연결

5.데이터 송수신

6.소켓 닫기

 

-클라이언트소켓

:실제로 데이터 송수신이 일어나는것이다.

1.소켓생성 socket()

2.서버에 설정된 ip, port로 통신(연결) 시도 connect()

3.클라이언트의 socket descript 반환 accept()

4.데이터 송수신(통신 과정 반복 read(), write() )  

5.소켓 닫기

 

 

*종류

1.스트림소켓(TCP)

   양방향으로 바이트 스트림을 전송, 연결 지향성

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

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

   소량의 데이터보다 대량의 데이터 전송에 적합 -> TCP를 사용

 

2.데이터그램(UDP)

   비연결형 소켓

   데이터의 크기에 제한이 있다

   확실하게 전달이 보장되지 않음, 데이터가 손실돼도 오류 발생하지 않음

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

 

*특징

  -서버와 클라이언트가 연결을 유지하는 양방향 통신이다

  -서버와 클라이언트가 데이터를 주고받는 상황이 필요한 경우 사용한다.

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

    (단방향 통신이 아닌 응답이 없어도 통신을 주고 받아야할 경우 사용한다.)

 

 

소켓(Socket)과 Http의 차이점

Http는 요청(Request)과 응답(Response)으로 이루어져있다. 한쪽에서 다른쪽으로 요청을 보내면 

 그 신호를 상대쪽에서 응답을 돌려주는 방식이다.

소켓은 두 컴퓨터간 연결을 지속하는 방식인 대신 Http는 단발적으로 요청이 수신되었을 때만 연결되고,

응답까지 완료된 후에는 연결을 해체하는 방식이다.

정보 전달이 다수 발생할 경우 계속해서 연결하고 해체하는 과정을 반복해야하기 때문에 많은 낭비를 하게 됩니다.

또 클라이언트 요청없이는 서버쪽에서 먼저 클라이언트로 전송이 안된다.

-> 모든 정보의 송수신은 클라이언트가 요청을 함으로써 이루어질 수 밖에 없다. 

 

이러한 단점을 보완하기 위한게 소켓통신이다.

 

클라이언트와 서버 두 컴퓨터가 특정 port를 통해 실시간으로 양방향 통신을 가능하게 만든 통신을 의미한다.

(단방향 통신을 주고 받으면서 양방향 통신과 동일하게 구동하는 것이지만, 기능적으로는 거의 동등한 위치에서

  통신을 주고받는다)

Http로는 불가능했던 지속, 반복적인 통신을 더 적은 리소스로 가능하게 하고 서버쪽에서 클라이언트로 먼저 정보전송하며

통신하는것이 가능해진다.