본문 바로가기
개발/통신

소켓(Socket)

by EPdev 2020. 5. 13.
728x90

소켓에 대해서 공부한 내용을 정리한다.

"뽀따"님께서 개념을 쉽게 잘 정리해주셔서 이해에 많은 도움이 되었다.

내가 정리한 내용도 "뽀따"님의 블로그를 보고 내가 필요할 거 같은 부분을 간략히 서술한 것이다.

세부적인 내용은 "뽀따"님의 블로그를 방문해서 학습하자.

 

https://recipes4dev.tistory.com/153

 

소켓 프로그래밍. (Socket Programming)

1. 소켓(Socket) 만약 네트워크와 관련된 프로젝트를 진행하면서, 사용자(User)의 관점이 아닌, 개발자(Developer)의 관점에서 네트워크를 다뤄본 경험이 있다면, "소켓(Socket)"이라는 용어가 아주 낯설��

recipes4dev.tistory.com

소켓이란 ?

위키피디아 내용은 이렇다.

https://ko.wikipedia.org/wiki/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC_%EC%86%8C%EC%BC%93

 

네트워크 소켓 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 네트워크 소켓(network socket)은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점이다. 오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하

ko.wikipedia.org

쉽게 정의해보자면..

네트워크 소켓은 프로그램이 네트워크에서 데이터를 송수신할 수 있도록, "네트워크 환경에 연결할 수 있게 만들어진 연결부" 라고 한다.

보통 OSI 7 layer 중에 4 계층인 TCP 에서 소켓을 사용하는데 이를 TCP 소켓이라고 한다. (UDP 에서 사용하는 소켓은 UDP 소켓)

 

TCP와 UDP의 비교는 지난 게시글에서 약간 다뤘고, 지금 하려는 것은 TCP 통신이므로 TCP 소켓에 대해 알아보자.

TCP/IP socket programming

TCP/IP 소켓 프로그래밍에는 두 개의 소켓이 사용된다.

1. 클라이언트 소켓

2. 서버 소켓 ( + 데이터 송수신 소켓 )

서버 소켓 뒤에 +데이터 송수신 소켓을 넣어놨는데 이는 추후에 설명하겠다.

 

두 개의 시스템(또는 프로세스)이 소켓을 통해 네트워크 연결하기 위해서는 한 곳에서 다른 곳으로 "연결 요청"을 해야한다.

먼저 해당 IP주소와 포트번호로 식별되는 대상에게 연결할 의사가 있다는 것을 알리는 것이다.

"연결 요청"한다고 바로 연결이 되는 것은 아니다. 요청을 받은 대상에서 연결할 준비가 되어야 한다.

그래서 대상이 되는 곳에서는 어떤 연결을 받을지 미리 시스템에 등록하여 준비를 한다. (일반적으로 포트 넘버로 설정됨)

여기서 연결 요청을 보내는 곳을 "클라이언트 소켓", 요청을 받는 곳을 "서버 소켓" 이라고 한다.

그렇다고 "클라이언트 소켓"과 "서버 소켓"이 다른 개념이 아니다. 둘은 같은 소켓이지만, 절차를 구분하기 위해, 그리고 처리되는 흐름(API 순서)이 다르기에 나뉘어 부르는 것이다.

 

소켓 API 흐름에 대해서 알아보자.

 

- 클라이언트 소켓은 처음 소켓을 생성(Socket)한 다음, 서버 측에 연결을 요청(Connect)한다. 서버 소켓에서 요청을 받아주면, 데이터를 송수신(Send/Recv)하고 모든 처리가 완료되면 소켓을 닫는다(Close).

 

- 서버 소켓은 처음 소켓을 생성(Socket)하고 서버가 사용할 IP와 port 번호를 소켓에 결합(Bind)한다. 그런 다음 클라이언트 측에서 연결 요청이 오는지 주시(Listen)하고, 요청이 왔다면 받아들이며(Accept), 데이터 통신을 위한 소켓을 생성한다. 이 새로운 소켓을 통해 연결이 성립(Established)되면, 마찬가지로 데이터를 송수신(Send/Recv)할 수 있다. 서버도 역시 처리가 완료되면 소켓을 닫는다(Close).

출처 : https://recipes4dev.tistory.com/153

각 API 의 자세한 내용들은 이 게시글 맨 위에 링크해놓은 게시글을 참고하자.

서버 소켓의 API 흐름에 잠시 언급했듯이, Accept() 에서 새로운 소켓이 생성되어 데이터 송수신을 담당하고,

서버 소켓은 다른 클라이언트 소켓들을 위해 생성-결합-주시-수락-닫기 사이클을 계속 한다는 것을 기억하자.

728x90

'개발 > 통신' 카테고리의 다른 글

InputStream, OutputStream  (0) 2020.05.17
TCP/IP  (0) 2020.05.07

댓글