Làm thế nào để một máy chủ nhận được thông báo về yêu cầu HTTP?


8

Tôi có một sự hiểu biết cơ bản về cách thức hoạt động của HTTP . Tôi hiểu khách hàng (trình duyệt web) đưa ra yêu cầu và máy chủ phản hồi lại yêu cầu. Tuy nhiên, điều tôi không hiểu là làm thế nào để một máy chủ web biết khi nào khách hàng đưa ra yêu cầu?

Nếu ai đó gọi cho tôi, điện thoại của tôi đổ chuông và tôi nhận được thông báo. Tương tự như thế nào để một máy chủ web nhận được thông báo về yêu cầu?


2
Làm thế nào đây không phải là một bản sao 5 năm sau khi Super User được ra mắt?
Peter Mortensen

Câu trả lời:


28

Có rất nhiều lớp để làm điều này. Và quan trọng, nhiều người trong số họ có thể thay thế cho nhau.

Ví dụ: bạn có thể có mạng cáp đồng trục, ethernet hoặc Wi-Fi ở mức vật lý. HTTP hoạt động trên tất cả những thứ đó, nhưng mỗi trong số chúng có cách xử lý tải trọng hơi khác nhau được gửi xung quanh.

HTTP hoạt động trên giao thức khác, được gọi là TCP, lần lượt chạy ít nhiều trên giao thức khác, được gọi là IP (ngày nay chủ yếu ở hai biến thể - IPv4 và IPv6).

Vì vậy, máy chủ HTTP đăng ký một địa chỉ IP (như 184.38.45.1, hoặc thường xuyên nhất là "bất kỳ"), cùng với cổng TCP ( 80là mặc định cho HTTP, nhưng nói chung là mọi thứ từ 1đến 65535), với hệ điều hành. Bây giờ, máy chủ HTTP yêu cầu HĐH ping nó khi có dữ liệu (hoặc thông báo khác). HĐH biết khi nào điều đó xảy ra, bởi vì trình điều khiển thẻ giao diện mạng cho nó biết điều đó. Và trình điều khiển NIC được nói bởi chính NIC, nơi thực sự có phần mềm riêng để giải thích các tín hiệu điện trên cáp mạng (hoặc tín hiệu không dây trong không khí, v.v., bạn hiểu ý).

Lưu ý bên :

Nếu bạn muốn biết thêm về cách mà NIC có thể bắt đầu giao tiếp với trình điều khiển / HĐH, bạn có thể muốn tra cứu một số thông tin cơ bản về các ngắt phần cứng - về cơ bản, bất cứ điều gì CPU hiện đang làm đều bị dừng và luồng chương trình chuyển sang gián đoạn thủ tục xử lý - một đoạn mã cực kỳ đơn giản, đảm nhiệm việc thông báo cho hệ thống, và sau đó ngay lập tức trả lại quyền điều khiển trở lại điều ban đầu mà CPU đang làm. Trên thực tế, nó có thể trả lời cho bạn rất nhiều câu hỏi về hoạt động bên trong của HĐH và chính máy tính - như cách một hệ điều hành có thể "đánh cắp" CPU khỏi các ứng dụng và xáo trộn tài nguyên CPU giữa các ứng dụng khác nhau chạy cùng một lúc, ngay cả khi họ không hợp tác.

Trở lại kinh doanh:

Trong tương tự điện thoại thủ công của bạn, hãy tưởng tượng rằng điện thoại của bạn không thực sự đổ chuông. Để biết bạn đang có một cuộc gọi điện thoại, bạn sẽ phải nhìn vào màn hình định kỳ và kiểm tra. Để làm cho việc quản lý này trở nên dễ dàng hơn đối với máy chủ HTTP (vì đã có khá nhiều lớp thực hiện kiểm tra định kỳ đó), bạn thực sự có thể chặn trên nỗ lực kiểm tra.

Vì vậy, thay vì kiểm tra, thấy không có gì ở đó và kiểm tra lại, về cơ bản bạn cứ nhìn vào màn hình mọi lúc. Tuy nhiên, về cơ bản, bạn đã có một hệ thống hoàn toàn riêng biệt để xử lý việc này (trong trường hợp của bạn, trung tâm trợ thính, kiểm tra các rung động không khí để biết thông tin hữu ích, vòng), vì vậy nó không thực sự cần sự chú ý của bạn (thời gian CPU).

Điều này được cải thiện hơn nữa bằng các kỹ thuật cho phép bạn giám sát nhiều kết nối cùng một lúc (IOCP). Điều này càng ngày càng gần với hệ thống chuông điện thoại - bạn có một căn phòng với mười nghìn điện thoại, nhưng bạn chỉ quan tâm đến những người đang đổ chuông vào lúc này, những người khác không chú ý đến bạn.


Cẩn thận, "ping" có một ý nghĩa hoàn toàn không liên quan trong mạng. Ngoài ra, tại sao không ai đề cập đến "ngắt phần cứng"?
Lie Ryan

1
@LieRyan Chà, vâng, đó là phần mà NIC nói với trình điều khiển NIC. Nó chỉ cảm thấy như một đốm nhỏ trong danh sách trừu tượng khổng lồ có liên quan, và thực sự, bên ngoài những người chơi xung quanh với kiến ​​trúc trường học cũ, thiết bị nhúng hoặc nhà phát triển trình điều khiển, thật đáng buồn. Nhưng tốt, tôi đoán tôi sẽ thêm một đề cập nhanh.
Luaan

1
Có phải cổng chỉ là số? hoặc chúng là các chân vật lý trên Thẻ NIC? Tôi thấy thật khó để tưởng tượng có thể có 65536 cổng
Dhiwakar Ravikumar

2
@DhiwakarRastaumar: Vâng, cổng chỉ là con số. Chúng được tạo bởi một chương trình hoặc hệ điều hành, chúng không tương ứng với bất cứ thứ gì trong phần cứng.
sleske

1
Các cổng @DhiwakarRastaumar chỉ là những con số, nhưng các ngắt phần cứng thực sự được sử dụng làm chân phần cứng trên CPU (vì vậy bạn có một chân khác cho "có số chia cho 0!" Và một số khác cho "đồng hồ báo thức đang reo"). Vì vậy, bạn chỉ có ba hoặc bảy ngắt khác nhau hoặc hầu hết thời gian. Nó tương đương với các trạm điện thoại cũ - chúng thực sự có các chân vật lý mà bạn phải kết nối để thực hiện cuộc gọi, nhưng ngày nay chúng được chuyển đổi trong phần mềm giống như các cổng TCP.
Luaan

9

Máy tính sử dụng khái niệm gọi là "cổng", tương tự như "tiện ích mở rộng" cho tổng đài điện thoại: Máy khách không chỉ "gọi" địa chỉ IP của máy chủ mà còn gửi yêu cầu đến một cổng cụ thể trên máy chủ đó.

Có hàng ngàn cổng ( danh sách wikipedia ), ví dụ cổng 80 là mặc định cho HTTP.

Thủ thuật là một chương trình, ví dụ máy chủ web, có thể tự đăng ký để nghe trên một cổng cụ thể. Sau đó, HĐH sẽ chuyển bất kỳ yêu cầu nào đến trên cổng đó cho chương trình đó.

Điểm có nhiều cổng là bạn có thể có nhiều dịch vụ chạy trên cùng một máy chủ cùng một lúc, bằng cách sử dụng các cổng khác nhau mà chúng sẽ không can thiệp lẫn nhau.


Chính xác là 65.535 cổng
ub3rst4r

3

Máy chủ web được thông báo với quy trình sau

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

Giả sử máy chủ web lắng nghe trên cổng 80, khi yêu cầu từ máy khách đến cổng 80, nó sẽ chấp nhận kết nối với lệnh gọi hệ thống accept (). Cuộc gọi này thường chặn cho đến khi máy khách kết nối với máy chủ.

Sau đó, lắng nghe các kết nối với cuộc gọi hệ thống lắng nghe () và Liên kết ổ cắm đến một địa chỉ bằng cách sử dụng lệnh gọi hệ thống bind ().

Atlast tạo ra một socket với lệnh gọi hệ thống socket ().

Hi vọng điêu nay co ich!


0

Bạn có thư mục / var / log / apache2 với thư mục sau:

access.log
error.log
other_vhosts_access.log

Nó liên quan đến bạn muốn từ khách hàng và cách thông báo, tin nhắn, email, v.v.

Suggesstion của tôi:

Bạn có thể tạo một máy chủ nhật ký và gửi mọi nhật ký của mình như máy chủ thư, máy chủ dns, máy chủ web, v.v. Sau đó, bạn có thể phân tích cú pháp, Ngay cả cùng một máy chủ sử dụng db và bạn có thể chạy truy vấn.


Cảm ơn đã trả lời, nhưng tôi nghĩ bạn đã hiểu nhầm câu hỏi của tôi. Ý tôi là khi tôi nhận được một cuộc gọi, điện thoại của tôi đổ chuông. Vì vậy, tôi biết rằng tôi đã nhận được một cuộc gọi điện thoại vì điện thoại của tôi reo. Tương tự khi khách hàng đưa ra yêu cầu, máy chủ web được thông báo như thế nào?
raj tò mò

0

Tôi đoán các thanh ghi máy chủ web gọi lại các chức năng với cổng.

Vì vậy, bất cứ khi nào nhận được bất cứ thứ gì trên cổng cụ thể đó, hệ thống sẽ gọi lại chức năng gọi lại đã đăng ký trước đó. Trong cuộc gọi lại đó, nó có thể đặt một sự kiện hoặc một cái gì đó tương tự và sau đó máy chủ web sẽ có một chuỗi dành riêng chờ trong sự kiện đó. Chuỗi này sẽ chạy và xếp hàng yêu cầu này vào danh sách chính các yêu cầu mà máy chủ web đang xử lý.

Những gì tôi đã đưa ra ở đây là một cái nhìn rất hời hợt & vĩ mô về những điều đang xảy ra. Để có câu trả lời chính xác hơn, chúng ta hãy đợi cho đến khi các chuyên gia đến.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.