서버는 HTTP 요청에 대해 어떻게 알림을 받습니까?


8

HTTP 작동 방식에 대한 기본적인 이해가 있습니다. 클라이언트 (웹 브라우저)가 요청을하고 서버가 요청에 다시 응답한다는 것을 알고 있습니다. 그러나 내가 이해하지 못하는 것은 클라이언트가 요청을 할 때 웹 서버가 어떻게 알 수 있습니까?

누군가 전화하면 전화벨이 울리고 알림을받습니다. 마찬가지로 웹 서버는 요청에 대해 어떻게 알림을 받습니까?


2
수퍼 유저가 시작된 후 5 년이 지나면 어떻게 중복되지 않습니까?
피터 Mortensen

답변:


28

여기에는 많은 레이어가 있습니다. 그리고 중요한 것은, 그들 중 많은 것이 상호 교환 가능하다는 것입니다.

예를 들어, 물리적 수준에서 동축 케이블 네트워크, 이더넷 또는 Wi-Fi를 다운시킬 수 있습니다. HTTP는 그 모든 것 위에서 작동하지만 각각의 페이로드가 약간 다르게 처리됩니다.

HTTP는 TCP라고하는 다른 프로토콜 위에서 작동하며, IP (현재는 대부분 IPv4와 IPv6의 두 가지 변형)라는 다른 프로토콜 위에서 실행됩니다.

따라서 HTTP 서버 는 운영 체제에 184.38.45.1TCP 포트 ( 80HTTP의 기본값이지만 일반적으로 1~에서 65535)와 함께 IP 주소 (예 : 또는 가장 자주 "any")를 등록 합니다. 이제 HTTP 서버는 데이터 (또는 다른 메시지)가 오면 OS에게 핑을하도록 지시합니다. 네트워크 인터페이스 카드 드라이버가 알려주기 때문에 OS는 언제 발생하는지 알고 있습니다. 그리고 NIC 드라이버는 NIC 자체에 의해 알려집니다. NIC 자체는 실제로 네트워크 케이블의 전기 신호 (또는 공중의 무선 신호 등)를 해석하기위한 자체 소프트웨어를 가지고 있습니다.

사이드 노트 :

NIC가 드라이버 / OS와의 통신을 시작하는 방법에 대한 자세한 내용을 보려면 하드웨어 인터럽트에 대한 기본 정보를 찾아보십시오. 기본적으로 CPU가 현재 수행중인 작업이 중지되고 프로그램 흐름이 인터럽트로 전환됩니다. 처리기 루틴-시스템에 통보하는 매우 간단한 코드 조각으로 CPU가 수행했던 원래 작업으로 즉시 제어를 되돌립니다. 실제로 운영 체제가 실행중인 응용 프로그램에서 CPU를 "훔치고"동시에 실행중인 다른 응용 프로그램간에 CPU 리소스를 섞는 방법과 같이 OS의 내부 작업과 컴퓨터 자체에 대한 많은 질문에 대답 할 수 있습니다. 그들이 협력하지 않더라도.

사업으로 돌아 가기 :

수동 전화 비유에서 전화가 실제로 울리지 않는다고 가정하십시오. 전화 통화를 시도하고 있는지 확인하려면 화면을 주기적으로보고 확인해야합니다. HTTP 서버를 관리하기 쉽게하기 위해 (정기 점검을 수행하는 계층이 이미 많기 때문에) 실제로 점검 시도를 차단할 수 있습니다 .

따라서 확인하는 대신 아무것도없는 것을 확인하고 다시 확인하는 것은 기본적으로 항상 화면을 계속보고 있습니다. 그러나 기본적으로이를 처리하기위한 별도의 시스템 (귀하의 경우 유용한 정보에 대한 공기 진동을 검사하는 청력 센터, 링)이 있으므로 실제로주의를 기울일 필요는 없습니다 (CPU 시간).

한 번에 많은 연결 (IOCP)을 모니터링 할 수있는 기술로 더욱 향상되었습니다. 이것은 전화 벨소리 시스템에 점점 더 가까워지고 있습니다. 전화가 10 만 대나되는 방이 있지만 현재 울리는 장치 만 신경 쓰지만 다른 장치는주의를 기울이지 않습니다.


조심스럽게 "ping"은 네트워킹에서 전혀 관련이없는 다른 의미를 갖습니다. 또한 왜 "하드웨어 인터럽트"를 언급하지 않았습니까?
Lie Ryan

1
@LieRyan 네, NIC가 NIC 드라이버에게 알려주는 부분입니다. 그것은 단지 관련된 추상 목록의 작은 얼룩처럼 느껴지며 실제로 구식 아키텍처, 임베디드 장치 또는 드라이버 개발자와 놀고있는 사람들 외부에서는 슬프게도 지식이 모호합니다. 그러나 글쎄, 나는 빠른 언급을 추가 할 것 같아요.
Luaan

1
포트는 단지 숫자입니까? 또는 NIC 카드의 물리적 핀입니까? 65536 개의 항구가 있다고 상상하기 어렵다
Dhiwakar Ravikumar

2
@DhiwakarRavikumar : 예, 포트는 숫자입니다. 그것들은 프로그램이나 운영 체제에 의해 구성되며 하드웨어의 어떤 것도 해당하지 않습니다.
sleske 2013

1
@DhiwakarRavikumar 포트는 숫자에 불과하지만 하드웨어 인터럽트는 실제로 CPU의 하드웨어 핀으로 사용되었습니다 (따라서 "0으로 나누기!"와 "알람 시계가 울림"에 대한 핀이 다릅니다). 따라서 3 ~ 7 개의 서로 다른 인터럽트 또는 대부분의 시간 만있었습니다. 기존 전화 스테이션과 비슷합니다. 실제로 전화를 걸기 위해 연결해야하는 물리적 핀이 있었지만 요즘에는 TCP 포트처럼 소프트웨어로 전환되었습니다.
Luaan

9

컴퓨터는 전화 교환 대에 대한 "확장"과 유사한 "포트"라는 개념을 사용합니다. 클라이언트는 서버 IP 주소를 "호출"할뿐만 아니라 해당 서버의 특정 포트로 요청을 보냅니다.

수천 개의 포트 ( wikipedia list )가 있습니다. 예를 들어 포트 80은 HTTP의 기본값입니다.

트릭은 웹 서버와 같은 프로그램이 특정 포트에서 수신 대기하도록 자체 등록 할 수 있다는 것입니다. 그런 다음 OS는 해당 포트에서 들어오는 모든 요청을 해당 프로그램으로 전달합니다.

여러 포트를 갖는 요점은 서로 간섭하지 않는 다른 포트를 사용하여 동일한 서버에서 여러 서비스를 동시에 실행할 수 있다는 것입니다.


65,535 개의 포트가
정확함

3

다음 프로세스를 통해 웹 서버에 알림

Accept ()
Liseten()
bind()
socket()

웹 서버가 포트 80에서 수신 대기한다고 가정하면 클라이언트의 요청이 포트 80에 도달하면 accept () 시스템 호출과의 연결을 수락합니다. 이 호출은 일반적으로 클라이언트가 서버와 연결될 때까지 차단됩니다.

그런 다음 listen () 시스템 호출과의 연결을 청취하고 bind () 시스템 호출을 사용하여 소켓을 주소에 바인딩하십시오.

Atlast는 socket () 시스템 호출로 소켓을 만듭니다.

도움이 되었기를 바랍니다!


0

다음 디렉토리가있는 / var / log / apache2 디렉토리가 있습니다.

access.log
error.log
other_vhosts_access.log

클라이언트가 원하는 것과 관련이 있으며 알림, SMS, 전자 메일 등의 방법과 관련이 있습니다.

내 제안 :

로그 서버를 만들고 메일 서버, DNS 서버, 웹 서버 등과 같은 모든 로그를 보낼 수 있습니다. 그런 다음 동일한 서버에서도 db를 사용하고 쿼리를 실행할 수 있습니다.


답장을 보내 주셔서 감사하지만 내 질문을 오해 한 것 같습니다. 전화를 받았을 때 전화벨이 울립니다. 전화가 울려 전화가 왔음을 알았습니다. 마찬가지로 클라이언트가 요청을 할 때 웹 서버는 어떻게 알림을 받습니까?
raj curious

0

웹 서버가 포트로 콜백 함수를 등록한다고 생각합니다.

특정 포트에서 어떤 것이라도 수신 될 때마다 시스템은 이전에 등록 된 기능을 호출합니다. 콜백 내부에서 이벤트 또는 이와 유사한 것을 설정하면 웹 서버는 해당 이벤트를 기다리는 전용 스레드를 갖습니다. 이 스레드는 웹 서버가 이미 처리중인 기본 요청 목록에이 요청을 실행하고 큐에 넣습니다.

내가 여기에 준 것은 일어나는 일에 대한 매우 피상적이며 거시적 인 견해입니다. 보다 정확한 답변을 위해 전문가가 올 때까지 기다리십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.