본문 바로가기

임베디드 리눅스

네트워크 프로그래밍 - 다중 접속 서버 이론

728x90
반응형

 

안녕하세요. WH입니다.

적게 나마 제 글을 누군가는 찾아주시고

누군가는 읽어 주시더라구요.

언젠가는 누군가와 소통하는 날이 오질 않겠나 하며 오늘도 열심히 정리해보겠습니다.

 

서버 구현 기초에서 구현했던 통신 구조

  조금은 오래되어 기억이 안나실라나요? 네트워크 프로그래밍 서버에 대해서 간단히 구현을 했었죠? 기억이 나질 않으시면 간단하게 아래 글을 참조해주세요

2022.02.04 - [임베디드 리눅스] - 네트워크 프로그래밍-소켓 통신 서버 구현 4

 

네트워크 프로그래밍-소켓 통신 서버 구현 4

안녕하세요. WH입니다. 기본적으로 서버에 연결하면 연결되었음을 확인하도록 보내는 서버를 구현해 보았는데요, 이번에는 파일을 전송하는 서버를 구현해보겠습니다. 시작할까요? 해당 내용을

developer-wh.tistory.com

 

 

여튼 채팅을 보내는 서버나, 파일을 보내는 서버나 지금까지의 서버는 같은 구조를 가지고 있었습니다.

 

이런 방식을 사용했습니다. 우리는 이번에는 어떤걸 해보고자 하는 거냐, 바로 fork()를 이용해 부모 서버 프로세스를 여려개의 자식 프로세스가 생기도록 만들어서 각자 통신을 하게 할겁니다. 어떻게요? 

 

잠깐 review 하나만 하고 갈게요. 반드시 알아야 해서요. 모르면 이해가 안가요. 자세한 내용은 아래 글을 참조해 주세요

2022.02.03 - [임베디드 리눅스] - 네트워크 프로그래밍-소켓 통신 구현 1

2022.02.04 - [임베디드 리눅스] - 네트워크 프로그래밍-소켓 통신 서버 구현 3

위의 글에서 보셔야 할 부분은 listens() 과 accept() 특히 3번 글을 참조해주시길 바랍니다. 짧게 짚고 넘어가겠습니다.

 

listen() - > 연결 대기 상태로의 진입을 위한 함수

 ( listen() 함수 호출 시 서버 소켓이 만들어지고, 두 번째 인자로 전달되는 정수의 크기에 해당되는 대기실이 만들어짐 )

accept() -> 클라이언트의 연결 요청 시 들어온 순서대로 수락해주는 소켓을 만들기  위한 함수

  ( listen() 함수 호출 이후 시점, Connecting socket(connected socket)을 생성 )

반응형

즉 바로 위 그림은 네트워크 프로그래밍 -소켓통신 서버 구현 3번의 accept의 내용이에요

즉 listening Socket이 존재하고 Connetcing Socket이 존재한다는게 핵심입니다.

 

또한 listening 소켓으로 연결 요청이 들어오면 3 wayhand shake 이후 정보를 queue로 넘긴후 connecting socket이 client와 연결을 진행하다는 점을 꼭 기억해야 합니다.

 

자 그럼, 지금부터 부모와 자식의 역할을 나눠보겠습니다.

부모 서버

  - 연결 요청에 대해 듣기만 

자식

  - 연결만

즉, 클라이언트는 부모 서버에 1번처럼 연결 요청을 하면 2번을 통해 부토 서버는 자식 서버를 fork 하고 accept() 하도록 하는 겁니다. 그럼 3번과 같은 효과를 내고 최종적으로 아래 그림처럼 연결된 상황이 되는 거죠.

여기까지가 다중 접속 서버, 멀티 프로세스롤 이용하여 구현을 위한 기초 이론이었습니다.

다음 글에서는 직접 구현보자구요. 이상 WH 였습니다. 

728x90
반응형