Unix 소켓-클라이언트 서버 모델
대부분의 넷 애플리케이션은 클라이언트-서버 아키텍처를 사용하는데, 이는 두 개의 프로세스 또는 일부 정보를 교환하기 위해 서로 통신하는 두 개의 애플리케이션을 의미합니다. 두 프로세스 중 하나는 클라이언트 프로세스로 작동하고 다른 프로세스는 서버로 작동합니다.
클라이언트 프로세스
이것은 일반적으로 정보를 요청하는 프로세스입니다. 응답을받은 후이 프로세스는 종료되거나 다른 처리를 수행 할 수 있습니다.
Example, 인터넷 브라우저는 하나의 HTML 웹 페이지를 얻기 위해 웹 서버에 요청을 보내는 클라이언트 애플리케이션으로 작동합니다.
서버 프로세스
이것은 클라이언트로부터 요청을받는 프로세스입니다. 클라이언트로부터 요청을받은 후이 프로세스는 필요한 처리를 수행하고 요청 된 정보를 수집하여 요청자 클라이언트로 보냅니다. 완료되면 다른 클라이언트에게 서비스를 제공 할 준비가됩니다. 서버 프로세스는 항상 경고를 받고 들어오는 요청을 처리 할 준비가되어 있습니다.
Example − 웹 서버는 인터넷 브라우저의 요청을 계속 대기하고 브라우저에서 요청을받는 즉시 요청 된 HTML 페이지를 선택하여 해당 브라우저로 다시 보냅니다.
클라이언트는 서버의 주소를 알아야하지만 서버는 연결이 설정되기 전에 주소 나 클라이언트의 존재 여부를 알 필요가 없습니다. 연결이 설정되면 양쪽에서 정보를주고받을 수 있습니다.
2 계층 및 3 계층 아키텍처
클라이언트-서버 아키텍처에는 두 가지 유형이 있습니다.
2-tier architecture−이 아키텍처에서 클라이언트는 서버와 직접 상호 작용합니다. 이러한 유형의 아키텍처에는 몇 가지 보안 허점과 성능 문제가있을 수 있습니다. Internet Explorer와 Web Server는 2 계층 아키텍처에서 작동합니다. 여기서 보안 문제는 SSL (Secure Socket Layer)을 사용하여 해결됩니다.
3-tier architectures−이 아키텍처에서는 클라이언트와 서버 사이에 하나 이상의 소프트웨어가 있습니다. 이 미들 소프트웨어를 '미들웨어'라고합니다. 미들웨어는 부하가 높은 경우 모든 보안 검사 및 부하 분산을 수행하는 데 사용됩니다. 미들웨어는 클라이언트로부터 모든 요청을 받고 필요한 인증을 수행 한 후 해당 요청을 서버로 전달합니다. 그런 다음 서버는 필요한 처리를 수행하고 응답을 미들웨어로 다시 보내고 마지막으로 미들웨어는이 응답을 클라이언트에 다시 전달합니다. 3 계층 아키텍처를 구현하려면 웹 서버와 웹 브라우저 사이에 Web Logic 또는 WebSphere 소프트웨어와 같은 미들웨어를 유지할 수 있습니다.
서버 유형
보유 할 수있는 서버에는 두 가지 유형이 있습니다.
Iterative Server− 이것은 서버 프로세스가 한 클라이언트에 서비스를 제공하고 첫 번째 요청을 완료 한 후 다른 클라이언트의 요청을받는 가장 간단한 형태의 서버입니다. 한편 다른 클라이언트가 계속 기다리고 있습니다.
Concurrent Servers−이 유형의 서버는 한 프로세스가 더 오래 걸리고 다른 클라이언트가 너무 오래 기다릴 수 없기 때문에 한 번에 많은 요청을 처리하기 위해 여러 동시 프로세스를 실행합니다. Unix에서 동시 서버를 작성하는 가장 간단한 방법 은 자식 프로세스를 포크 하여 각 클라이언트를 개별적으로 처리하는 것입니다.
클라이언트를 만드는 방법
연결을 설정하기위한 시스템 호출은 클라이언트와 서버에 대해 다소 다르지만 둘 다 소켓의 기본 구성을 포함합니다. 두 프로세스 모두 자체 소켓을 설정합니다.
클라이언트 측에서 소켓을 설정하는 단계는 다음과 같습니다.
다음으로 소켓 만들기 socket() 시스템 호출.
다음을 사용하여 소켓을 서버 주소에 연결합니다. connect() 시스템 호출.
데이터를 보내고받습니다. 이를 수행하는 방법에는 여러 가지가 있지만 가장 간단한 방법은read() 과 write() 시스템 호출.
서버를 만드는 방법
서버 측에 소켓을 설정하는 단계는 다음과 같습니다.
다음으로 소켓 만들기 socket() 시스템 호출.
다음을 사용하여 소켓을 주소에 바인딩하십시오. bind()시스템 호출. 인터넷의 서버 소켓의 경우 주소는 호스트 시스템의 포트 번호로 구성됩니다.
와의 연결을 들어 listen() 시스템 호출.
다음과의 연결을 수락합니다. accept()시스템 호출. 이 호출은 일반적으로 클라이언트가 서버에 연결할 때까지 연결을 차단합니다.
다음을 사용하여 데이터 송수신 read() 과 write() 시스템 호출.
클라이언트 및 서버 상호 작용
다음은 완전한 클라이언트 및 서버 상호 작용을 보여주는 다이어그램입니다.