답변:
여기에는 많은 레이어가 있습니다. 그리고 중요한 것은, 그들 중 많은 것이 상호 교환 가능하다는 것입니다.
예를 들어, 물리적 수준에서 동축 케이블 네트워크, 이더넷 또는 Wi-Fi를 다운시킬 수 있습니다. HTTP는 그 모든 것 위에서 작동하지만 각각의 페이로드가 약간 다르게 처리됩니다.
HTTP는 TCP라고하는 다른 프로토콜 위에서 작동하며, IP (현재는 대부분 IPv4와 IPv6의 두 가지 변형)라는 다른 프로토콜 위에서 실행됩니다.
따라서 HTTP 서버 는 운영 체제에 184.38.45.1
TCP 포트 ( 80
HTTP의 기본값이지만 일반적으로 1
~에서 65535
)와 함께 IP 주소 (예 : 또는 가장 자주 "any")를 등록 합니다. 이제 HTTP 서버는 데이터 (또는 다른 메시지)가 오면 OS에게 핑을하도록 지시합니다. 네트워크 인터페이스 카드 드라이버가 알려주기 때문에 OS는 언제 발생하는지 알고 있습니다. 그리고 NIC 드라이버는 NIC 자체에 의해 알려집니다. NIC 자체는 실제로 네트워크 케이블의 전기 신호 (또는 공중의 무선 신호 등)를 해석하기위한 자체 소프트웨어를 가지고 있습니다.
사이드 노트 :
NIC가 드라이버 / OS와의 통신을 시작하는 방법에 대한 자세한 내용을 보려면 하드웨어 인터럽트에 대한 기본 정보를 찾아보십시오. 기본적으로 CPU가 현재 수행중인 작업이 중지되고 프로그램 흐름이 인터럽트로 전환됩니다. 처리기 루틴-시스템에 통보하는 매우 간단한 코드 조각으로 CPU가 수행했던 원래 작업으로 즉시 제어를 되돌립니다. 실제로 운영 체제가 실행중인 응용 프로그램에서 CPU를 "훔치고"동시에 실행중인 다른 응용 프로그램간에 CPU 리소스를 섞는 방법과 같이 OS의 내부 작업과 컴퓨터 자체에 대한 많은 질문에 대답 할 수 있습니다. 그들이 협력하지 않더라도.
사업으로 돌아 가기 :
수동 전화 비유에서 전화가 실제로 울리지 않는다고 가정하십시오. 전화 통화를 시도하고 있는지 확인하려면 화면을 주기적으로보고 확인해야합니다. HTTP 서버를 관리하기 쉽게하기 위해 (정기 점검을 수행하는 계층이 이미 많기 때문에) 실제로 점검 시도를 차단할 수 있습니다 .
따라서 확인하는 대신 아무것도없는 것을 확인하고 다시 확인하는 것은 기본적으로 항상 화면을 계속보고 있습니다. 그러나 기본적으로이를 처리하기위한 별도의 시스템 (귀하의 경우 유용한 정보에 대한 공기 진동을 검사하는 청력 센터, 링)이 있으므로 실제로주의를 기울일 필요는 없습니다 (CPU 시간).
한 번에 많은 연결 (IOCP)을 모니터링 할 수있는 기술로 더욱 향상되었습니다. 이것은 전화 벨소리 시스템에 점점 더 가까워지고 있습니다. 전화가 10 만 대나되는 방이 있지만 현재 울리는 장치 만 신경 쓰지만 다른 장치는주의를 기울이지 않습니다.
컴퓨터는 전화 교환 대에 대한 "확장"과 유사한 "포트"라는 개념을 사용합니다. 클라이언트는 서버 IP 주소를 "호출"할뿐만 아니라 해당 서버의 특정 포트로 요청을 보냅니다.
수천 개의 포트 ( wikipedia list )가 있습니다. 예를 들어 포트 80은 HTTP의 기본값입니다.
트릭은 웹 서버와 같은 프로그램이 특정 포트에서 수신 대기하도록 자체 등록 할 수 있다는 것입니다. 그런 다음 OS는 해당 포트에서 들어오는 모든 요청을 해당 프로그램으로 전달합니다.
여러 포트를 갖는 요점은 서로 간섭하지 않는 다른 포트를 사용하여 동일한 서버에서 여러 서비스를 동시에 실행할 수 있다는 것입니다.
다음 프로세스를 통해 웹 서버에 알림
Accept ()
Liseten()
bind()
socket()
웹 서버가 포트 80에서 수신 대기한다고 가정하면 클라이언트의 요청이 포트 80에 도달하면 accept () 시스템 호출과의 연결을 수락합니다. 이 호출은 일반적으로 클라이언트가 서버와 연결될 때까지 차단됩니다.
그런 다음 listen () 시스템 호출과의 연결을 청취하고 bind () 시스템 호출을 사용하여 소켓을 주소에 바인딩하십시오.
Atlast는 socket () 시스템 호출로 소켓을 만듭니다.
도움이 되었기를 바랍니다!
다음 디렉토리가있는 / var / log / apache2 디렉토리가 있습니다.
access.log
error.log
other_vhosts_access.log
클라이언트가 원하는 것과 관련이 있으며 알림, SMS, 전자 메일 등의 방법과 관련이 있습니다.
내 제안 :
로그 서버를 만들고 메일 서버, DNS 서버, 웹 서버 등과 같은 모든 로그를 보낼 수 있습니다. 그런 다음 동일한 서버에서도 db를 사용하고 쿼리를 실행할 수 있습니다.
웹 서버가 포트로 콜백 함수를 등록한다고 생각합니다.
특정 포트에서 어떤 것이라도 수신 될 때마다 시스템은 이전에 등록 된 기능을 호출합니다. 콜백 내부에서 이벤트 또는 이와 유사한 것을 설정하면 웹 서버는 해당 이벤트를 기다리는 전용 스레드를 갖습니다. 이 스레드는 웹 서버가 이미 처리중인 기본 요청 목록에이 요청을 실행하고 큐에 넣습니다.
내가 여기에 준 것은 일어나는 일에 대한 매우 피상적이며 거시적 인 견해입니다. 보다 정확한 답변을 위해 전문가가 올 때까지 기다리십시오.