반응형
참고서적 : 성공과 실패를 결정하는 1%의 네트워크 원리
개념적 차이
- 클라이언트: 서버에게 서비스를 요청하고, 받은 응답을 사용자에게 표현하는 시스템
- 서버 : 클라이언트의 요청에대한 서비스(응답)을 제공하는 컴퓨터 시스템
구조적 차이
- 클라이언트 : 한 번에 하나의 서버에 요청을 보낸다.
- 서버 : 동시에 다수의 클라이언트 PC에 응답하는 구조
- 이러한 차이로 인해 소켓의 접속 동작에서 차이를 보인다.
- 클라이언트는 소켓 접속동작을 하고, 서버는 접속대기 역할을 한다.
- 더 구체적으로는 Socket 라이브러리를 호출하는 과정에 차이가 있다.
bind
: 소켓에 포트번호 기록(클라이언트에서 지정한 서버측 소켓에 할당할 포트번호)listen
: 접속 대기상태라는 제어 정보를 기록하는 용도accept
: 접속 접수(실제 접속 기다리는 상태)
서버 애플리케이션의 구조
서버 애플리케이션과 클라이언트의 1:1 매칭
하나의 프로그램으로 여러 클라이언트와 대화 할 경우, 어느 클라이언트와 어디까지 대화가 진행되고 있는지 파악하기 어려우므로, 클라이언트가 접속할 때마다 새로 서버 프로그램을 작동. 서버 애플리케이션이 클라이언트와 1:1로 매칭되게 한다.
서버 프로그램을 만드는 방법
- 서버 프로그램 → 접속을 기다리는 부분 + 클라이언트와 대화하는 부분
- 서버 프로그램 작동 후 초기화 동작을 마쳤을 때 접속을 기다리는 부분을 실행.
- 접속을 기다리는 부분이 소켓을 작성하고, 소켓을 '클라이언트에서의 접속 동작을 기다리는 상태'로 만든 뒤 쉬는 상태가 됨
- 이후 클라이언트가 접속하면 다시 작동해서 접속을 기다림.
- 클라이언트와 대화하는 부분을 작동시켜 그곳에 접속이 끝난 소켓을 건네주고, 동작을 계속하면 클라이언트와 대화하는 부분은 접속이 끝난 소켓을 사용하여 클라이언트와 대화하기 시작
- 대화가 끝나면 연결을 끊고 이 부분을 종료
클라이언트와 대화하는 부분은 새 클라이언트가 접속할 때마다 기동 → 1:1로 대응
서버 OS는 멀티태스크 나 멀티스레드 라는 기능을 이용해 다수의 프로그램을 동시에 작동하는데, 이를 이용한 것.
클라이언트가 접속했을 때 새로 프로그램을 기동하는 부분에서 시간이 걸리고 응답 시간이 추가 소요된다는 단점이 있다.
- 해결: 미리 클라이언트와 대화하는 몇 개의 부분을 작동시켜두고, 클라이언트가 접속했을 때 비어있는 것을 찾아 접속한 소켓을 건네주는 방법도 있다.
멀티태스크 & 멀티쓰레드
- 접속 패킷이 동작했을 때 새 소켓을 복사하여 접속한다.
- 원래 소켓은 계속 접속 대기상태로 두어 동시에 다수의 클라이언트와 접속할 수 있게 된다.
- 멀티태스크와 멀티쓰레드는 동시에 복수의 액세스를 병행하여 처리하는 OS의 기능을 말한다.
- 태스크는 하나하나 별도의 프로그램을 의미하며, 쓰레드는 한 개의 프로그램을 몇 개의 부분으로 나눈 것으로 취급된다.
좌우 대칭의 통신 프로토콜
- 클라리언트와 서버를 고정시켜 나누기보다는 좌우 대칭으로 어디서나 자유롭게 데이터를 송신할 수 있도록 하는 것이 좋다. (TCP의 배경에 이 개념이 있다.)
- 하지만 어떻게 해도 좌우 대칭이 되지 않는 부분 →
접속 동작
- 접속하는 측이 클라이언트, 기다리는 측이 서버
새 소켓을 만들 때의 포트 번호를 어떻게 해야 할까
복사하는 포트번호를 다르게 한다면?
- 클라이언트에서 지정한 포트 번호로 소켓을 보냈을 때 돌아오는 소켓의 포트 번호는 다르게 된다. -> 회답이 올바른 상대로부터 왔는지, 다른 상대로부터 왔는 지 알 수 없게 된다.
복사하는 포트번호를 같게 한다면?
같은 포트번호를 가진 소켓이 여러 개 존재해서 포트번호로 소켓을 식별할 수 없게 된다.
이 문제를 해결하기 위해 추가로 네 가지의 정보를 더 사용하여 소켓을 식별한다.
- 클라이언트측 IP주소
- 클라이언트측 포트 번호
- 서버측 IP주소
- 서버측 포트 번호
❓ 그럼 디스크립터는 왜 필요하지?
접속 대기 상태의 소켓에는 아직 클라이언트 측의 IP주소와 포트번호가 기록되어 있지 않기 때문이다.
따라서 접속 대기 이전 상태에서는 디스크립터가 필요하며 한 가지 정보만으로 식별할 수 있다는 간편함도 있다.
반응형
'CS > Network' 카테고리의 다른 글
[CS Network] 방화벽 DNS 캐시 프록시 등 용어 정리 (0) | 2021.06.22 |
---|---|
[CS Network] 액세스 회선 ADSL FTTH 주요 용어 정리 (0) | 2021.06.22 |
[CS Network] LAN 라우터 이더넷 등 주요 용어 정리 (0) | 2021.06.22 |
[CS Network] TCP/IP 클라이언트-서버 통신 주요 용어 정리 (0) | 2021.06.22 |
[CS Network] 웹 브라우저와 메시지 주요 용어 정리 (0) | 2021.06.22 |