Today I Learned …

[공부] 소켓 (Socket) 본문

Computer/공부

[공부] 소켓 (Socket)

염베리 2021. 11. 6. 03:48

* 개인적인 공부 내용을 기록한 글입니다.


사담

이쪽 공부를 하다보면 소켓이라는 단어를 자주 듣게 된다.

소켓을 만들어서 뭘 연결해서 뭘 어떻게 해서....

대체 그 소켓이 뭔데?? 라는 물음에서 이번 포스팅을 시작해본다.


소켓 (Socket)

 

1. 소켓이란?

프로세스가 네트워크 상으로 데이터를 내보내거나

네트워크로부터 데이터를 받으려면 일종의 창구가 필요하다.

그 역할을 하는 것이 소켓이다.

 

2. 소켓의 정의

[1] Protocol

[2] IP Address

[3] Port Number

 

3. 소켓의 형식

[1] 스트림

① 양방향, 연결 지향형 소켓

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

③ 각 메세지를 보내기 위해 별도의 연결을 맺음 → 오버헤드* 발생

④ 소량의 데이터보다는 대량의 데이터를 보내는 경우에 적합

⑤ TCP를 사용함

* 오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 또는 메모리를 의미함

 

[2] 데이터그램

① 비연결형 소켓

② 대상 소켓으로 메세지를 전송

③ 스트림 소켓에 비하면 다소 신뢰성이 떨어지나, 오버헤드가 발생하지 않는다는 이점이 있음

④ 메세지의 크기에 약간의 제한이 있으며 메세지의 확실한 전달을 보장하지 않음

⑤ UDP를 사용함

 

[3] RAW

① TCP/IP 스택 상의 TCP, UDP 계층을 우회하여 바로 어플리케이션으로 송신하는 소켓

② TCP/IP 필터를 거치지 않으므로 원형 그대로의 패킷을 볼 수 있음

③ 데이터를 적절히 처리하는 과정은 모두 수신 애플리케이션 측에서 담당해야함

④ 실제 RAW 소켓을 이용하여 프로그래밍을 하는 일은 매우 드묾

⑤ 시스템 소프트웨어나 패킷을 분석하는 프로그램을 개발할 경우 필요할 수도 있음


소켓 (Socket) 통신

 

0. 들어가기 전

[1] 소켓은 통신을 위한 일종의 통로 역할을 한다.

[2] 통신을 원하는 프로세스 양측에 소켓을 생성해주어야한다.

[3] 연결 시 역할에 따라 Client 소켓과 Server 소켓으로 나뉜다.

 

1. Client 소켓과 Server 소켓

[1] Client 소켓 : 연결 요청을 보내는 소켓

[2] Server 소켓 : 연결 요청을 받아들이는 소켓

[3] Client 소켓과 Server 소켓은 태생적으로는 동일하나, 소켓의 역할과 구현 절차 구분을 위해 다르게 부르는 것일 뿐이다.

[4] Server 소켓은 Client 소켓의 연결 요청을 받아들이는 역할만 수행할 뿐, 직접적인 데이터 송수신은 Server 소켓의 연결 요청 수락의 결과로 생성되는 새로운 소켓을 통해 처리된다.

 

2. 소켓 통신의 흐름

[1] Client 소켓

① 소켓을 생성(create)하고,

② 서버 측에 연결(connect)을 요청한다.

③ Server 소켓에서 연결이 받아들여지면 데이터를 송수신(send/recv)하고,

④ 데이터 송수신이 완료되면 소켓을 닫는다(close).

 

[2] Server 소켓

① 소켓을 생성(create)하고,

② 서버가 사용할 IP 주소와 Port 번호를 생성한 소켓에 결합(bind)시킨다.

③ 그 다음, Client 소켓으로부터 연결 요청이 수신될 때까지 대기(listen)하고,

④ 요청이 수신되면 요청을 받아들여(accept) 데이터 통신을 위한 새로운 소켓을 생성한다.

새로운 소켓을 통해 연결이 수립되면, 클라이언트와 마찬가지로 데이터를 송수신(send/recv)할 수 있다.

⑥ Server 소켓은 또 다른 연결 요청을 처리하기 위해 다시 대기(listen)한다.

⑦ 데이터 송수신이 완료되면 소켓을 닫는다(close).

* 이처럼, 실질적인 데이터 송수신은 Server 소켓이 아닌, 연결이 수립된 새로운 소켓을 통해 처리된다.

 

참고 포스팅

https://recipes4dev.tistory.com/153

https://helloworld-88.tistory.com/215

https://medium.com/@su_bak/term-socket%EC%9D%B4%EB%9E%80-7ca7963617ff

https://clarus.tistory.com/entry/TCPIP-%EC%86%8C%EC%BC%93%EC%9D%98-%EC%A0%95%EC%9D%98-%EB%B0%8F-%EC%A2%85%EB%A5%98

프로필사진
berry
FE Developer, loves React & better DX
Comments