Bagaimana cara server mendapat pemberitahuan tentang permintaan HTTP?

8

Saya memiliki pemahaman dasar tentang cara kerja HTTP . Saya mengerti klien (browser web) membuat permintaan dan server merespons kembali permintaan tersebut. Namun, hal yang saya tidak mengerti adalah bagaimana server web tahu kapan klien membuat permintaan?

Jika seseorang memanggil saya telepon saya berdering dan saya diberitahu. Demikian pula bagaimana server web mendapatkan pemberitahuan tentang permintaan tersebut?

raj penasaran
sumber
2
Bagaimana ini bukan duplikat 5 tahun setelah Super User diluncurkan?
Peter Mortensen

Jawaban:

28

Ada banyak lapisan untuk ini. Dan yang terpenting, banyak dari mereka dapat dipertukarkan.

Misalnya, Anda dapat memiliki jaringan kabel coax, ethernet, atau Wi-Fi di tingkat fisik. HTTP berfungsi di atas semua itu, tetapi masing-masing memiliki penanganan muatan yang sedikit berbeda.

HTTP berfungsi di atas protokol lain, yang disebut TCP, yang pada gilirannya lebih atau kurang berjalan di atas protokol lain, yang disebut IP (saat ini sebagian besar dalam dua varian - IPv4 dan IPv6).

Jadi server HTTP mendaftarkan alamat IP (seperti 184.38.45.1, atau paling sering "apa saja"), bersama dengan port TCP ( 80menjadi default untuk HTTP, tetapi secara umum apa saja dari 1ke 65535), dengan sistem operasi. Sekarang, server HTTP memberi tahu OS untuk melakukan ping ketika data (atau pesan lain) datang. OS tahu kapan itu terjadi, karena driver kartu antarmuka jaringan mengatakan itu. Dan driver NIC diceritakan oleh NIC sendiri, yang sebenarnya memiliki perangkat lunak sendiri untuk menginterpretasikan sinyal listrik pada kabel jaringan (atau sinyal nirkabel di udara dll., Anda mendapatkan ide).

Catatan :

Jika Anda ingin tahu lebih banyak tentang bagaimana NIC dapat memulai komunikasi dengan driver / OS, Anda mungkin ingin mencari info dasar tentang gangguan perangkat keras - pada dasarnya, apa pun yang sedang dilakukan CPU dihentikan, dan aliran program beralih ke interupsi handler routine - sepotong kode yang sangat sederhana yang menangani memberitahukan sistem, dan kemudian segera mengembalikan kontrol kembali ke hal asli yang dilakukan CPU. Bahkan, mungkin menjawab banyak pertanyaan tentang cara kerja bagian dalam OS dan komputer itu sendiri - seperti bagaimana sistem operasi dapat "mencuri" CPU dari menjalankan aplikasi dan mengocok sumber daya CPU antara berbagai aplikasi yang berjalan pada saat yang sama, bahkan jika mereka tidak bekerja.

Kembali ke bisnis:

Dalam analogi telepon manual Anda, bayangkan ponsel Anda tidak benar-benar berdering. Untuk mengetahui jika Anda melakukan upaya panggilan telepon, Anda harus melihat layar secara berkala dan memeriksa. Untuk membuatnya lebih mudah dikelola untuk server HTTP (karena sudah ada beberapa lapisan yang melakukan pemeriksaan berkala), Anda dapat benar-benar memblokir upaya pemeriksaan.

Jadi, alih-alih memeriksa, melihat tidak ada di sana dan memeriksa lagi, Anda pada dasarnya terus melihat layar sepanjang waktu. Namun, pada dasarnya Anda memiliki seluruh sistem terpisah untuk menangani ini (dalam kasus Anda, pusat pendengaran, yang memeriksa getaran udara untuk informasi yang berguna, cincin), sehingga sebenarnya tidak memerlukan perhatian Anda (waktu CPU).

Ini lebih ditingkatkan dengan teknik yang memungkinkan Anda untuk memonitor banyak koneksi sekaligus (IOCP). Ini semakin dekat dan dekat dengan sistem dering telepon - Anda memiliki ruangan dengan sepuluh ribu telepon, tetapi Anda hanya peduli dengan yang berdering saat ini, yang lain tidak memperhatikan Anda.

Luaan
sumber
Hati-hati, "ping" memiliki arti yang sama sekali berbeda dalam jaringan. Juga, mengapa tidak ada yang menyebutkan "interupsi perangkat keras"?
Lie Ryan
1
@ LieRyan Yah, ya, itu di bagian di mana NIC memberi tahu pengemudi NIC. Rasanya seperti titik kecil dalam daftar besar abstraksi yang terlibat, dan sungguh, di luar orang-orang yang bermain-main dengan arsitektur sekolah lama, perangkat yang disematkan, atau pengembang driver, sayangnya pengetahuannya tidak jelas, sayangnya. Tapi, saya kira saya akan menambahkan penyebutan cepat.
Luaan
1
Apakah port hanya angka? atau apakah itu pin fisik pada Kartu NIC? Saya merasa sulit membayangkan mungkin ada 65.536 port
Dhiwakar Ravikumar
2
@DhiwakarRavikumar: Ya, port hanyalah angka. Mereka dibuat oleh program atau sistem operasi, mereka tidak sesuai dengan apa pun di perangkat keras.
sleske
1
@DhiwakarRavikumar Ports hanyalah angka, tetapi interupsi perangkat keras sebenarnya digunakan untuk pin perangkat keras pada CPU (jadi Anda memiliki pin yang berbeda untuk "mendapat pembagian dengan nol!" Dan satu lagi untuk "jam alarm berbunyi"). Jadi Anda hanya memiliki tiga atau tujuh interupsi yang berbeda atau sebagian besar waktu. Ini sebanding dengan stasiun telepon lama - mereka dulu benar-benar memiliki pin fisik yang harus Anda hubungkan untuk melakukan panggilan, tetapi mereka diaktifkan dalam perangkat lunak saat ini sama seperti port TCP.
Luaan
9

Komputer menggunakan konsep yang disebut "port", analog dengan "ekstensi" untuk switchboard telepon: Klien tidak hanya "memanggil" alamat IP server, tetapi juga mengirimkan permintaan ke port tertentu di server itu.

Ada ribuan port ( daftar wikipedia ), mis. Port 80 adalah default untuk HTTP.

Kuncinya adalah bahwa suatu program, misalnya server web, dapat mendaftar sendiri untuk mendengarkan pada port tertentu. Kemudian OS akan meneruskan semua permintaan yang masuk pada port itu ke program itu.

Maksud dari memiliki beberapa port adalah bahwa Anda dapat memiliki beberapa layanan yang berjalan pada server yang sama pada saat yang sama, dengan menggunakan port yang berbeda mereka tidak akan saling mengganggu.

jg-faustus
sumber
65.535 port tepatnya
ub3rst4r
3

Server web diberitahu dengan proses berikut

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

Katakanlah server web mendengarkan pada port 80, ketika permintaan dari klien datang pada port 80, ia akan menerima koneksi dengan system call accept (). Panggilan ini biasanya diblokir sampai klien terhubung dengan server.

Kemudian Dengarkan koneksi dengan panggilan sistem listen () dan Ikat soket ke alamat menggunakan panggilan sistem bind ().

Atlast membuat soket dengan panggilan sistem soket ().

Semoga ini membantu!

vembutech
sumber
0

Anda memiliki direktori / var / log / apache2 dengan direktori berikut:

access.log
error.log
other_vhosts_access.log

Ini terkait dengan yang Anda inginkan dari klien, dan cara memberi tahu, sms, email, dan sebagainya.

Saran saya:

Anda dapat membuat server log dan mengirim setiap log Anda seperti server mail, server dns, server web dan sebagainya, Kemudian Anda dapat menguraikannya, Bahkan server yang sama menggunakan db dan Anda dapat menjalankan kueri.

Teluk Persia
sumber
Terima kasih atas jawabannya, tapi saya pikir Anda salah mengerti pertanyaan saya. Maksud saya ketika saya mendapat panggilan telepon, telepon saya berdering. Jadi saya tahu bahwa saya mendapat telepon karena telepon saya berdering. Demikian pula ketika klien membuat permintaan, bagaimana server web diberitahu?
raj penasaran
0

Saya kira server web register memanggil kembali fungsi dengan port.

Sehingga setiap kali sesuatu diterima pada port tertentu, sistem akan memanggil fungsi panggil yang terdaftar sebelumnya. Di dalam panggilan itu kembali, mungkin mengatur acara atau sesuatu seperti itu dan kemudian server web akan memiliki utas khusus menunggu acara itu. Utas ini akan menjalankan dan mengantri permintaan ini ke daftar permintaan utama yang sudah diproses oleh server web.

Apa yang saya berikan di sini adalah pandangan yang sangat dangkal & makro dari hal-hal yang terjadi. Untuk jawaban yang lebih tepat mari kita tunggu sampai para ahli masuk.

Tsar I Am Tsar
sumber