Vous êtes-vous déjà demandé ce qui se passe lorsque vous cliquez sur un lien ? ? How The Internet Works vous emmène dans les coulisses du monde numérique, décomposant une technologie complexe en informations simples et succinctes. Des paquets de données aux serveurs et au-delà, découvrez la magie qui alimente votre expérience en ligne ! (Hook écrit avec l'aide de l'IA, parce que je ne peux pas :D)
Laissez-moi vous expliquer les actions physiques du clavier et les interruptions du système d'exploitation. Lorsque vous appuyez sur la touche "g", le navigateur enregistre l'événement, déclenchant les fonctions de saisie semi-automatique. En fonction de l'algorithme de votre navigateur et que vous soyez en mode normal ou privé/incognito, diverses suggestions apparaissent dans une liste déroulante sous la barre d'URL.
Ces suggestions sont généralement hiérarchisées et triées en fonction de facteurs tels que votre historique de recherche, vos favoris, les cookies et les recherches Internet populaires. Au fur et à mesure que vous continuez à taper « google.com », de nombreux processus s'exécutent en arrière-plan et les suggestions s'affinent à chaque frappe. Le navigateur peut même prédire « google.com » avant que vous ayez fini de taper.
Parcourir les séquences de saisie semi-automatique
La touche "entrée" touche le fond
Pour établir un point de départ, considérons la touche Entrée d'un clavier lorsqu'elle atteint le bas de sa course. À ce moment, un circuit électrique dédié à la touche Entrée est fermé (soit mécaniquement, soit capacitivement), permettant à un petit courant de circuler dans les circuits logiques du clavier. Ce circuit analyse l'état de chaque interrupteur à clé, filtre le bruit électrique provenant de la fermeture rapide de l'interrupteur (anti-rebond) et traduit l'action en un code clé, dans ce cas, le nombre entier 13. Le contrôleur du clavier code ensuite ce code clé pour la transmission. à l'ordinateur. Aujourd'hui, cela se fait presque toujours via une connexion Universal Serial Bus (USB) ou Bluetooth, bien que les anciens systèmes utilisaient PS/2 ou ADB.
Dans le cas d'un clavier USB :
Dans le cas d'un clavier virtuel (comme sur les appareils à écran tactile) :
Pour les claviers non USB, tels que ceux utilisant des connexions existantes (par exemple, PS/2), le clavier signale une interruption via sa ligne de demande d'interruption (IRQ). Cette IRQ est mappée sur un vecteur d'interruption (un nombre entier) par le contrôleur d'interruption du système. Le CPU consulte l'Interrupt Descriptor Table (IDT), qui relie chaque vecteur d'interruption à une fonction correspondante appelée gestionnaire d'interruption, fournie par le noyau du système d'exploitation.
Apabila sampukan dicetuskan, CPU menggunakan vektor sampukan untuk mengindeks ke dalam IDT dan melaksanakan pengendali sampukan yang sesuai. Proses ini menyebabkan CPU beralih ke mod kernel, membenarkan sistem pengendalian menguruskan acara penekan kekunci.
Apabila kekunci Enter ditekan, pengangkutan Peranti Antaramuka Manusia (HID) menghantar acara turun kekunci kepada pemacu KBDHID.sys, yang menukar data penggunaan HID kepada kod imbasan. Dalam kes ini, kod imbasan ialah VK_RETURN (0x0D), mewakili kekunci Enter. Pemacu KBDHID.sys kemudiannya berkomunikasi dengan pemacu KBDCLASS.sys (pemandu kelas papan kekunci), yang menguruskan semua input papan kekunci dengan selamat. Sebelum meneruskan, isyarat mungkin melalui mana-mana penapis papan kekunci pihak ketiga yang dipasang pada sistem, walaupun ini juga berlaku dalam mod kernel.
Seterusnya, Win32K.sys mula bermain, menentukan tetingkap yang sedang aktif dengan menggunakan GetForegroundWindow() API. Fungsi ini mendapatkan semula pemegang tetingkap (hWnd) aplikasi aktif, seperti bar alamat penyemak imbas. Pada ketika ini, "pam mesej" Windows memanggil SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, lParam). Parameter lParam mengandungi bitmask yang menyediakan maklumat tambahan tentang tekanan kekunci, termasuk:
API SendMessage menyusun baris gilir mesej untuk pemegang tetingkap tertentu. Kemudian, fungsi pemprosesan mesej utama sistem (dikenali sebagai WindowProc) yang diberikan kepada tetingkap (hWnd) mengambil dan memproses mesej dalam baris gilir.
Tetingkap aktif dalam kes ini ialah kawalan edit dan fungsi WindowProcnya mempunyai pengendali mesej yang bertindak balas kepada peristiwa WM_KEYDOWN. Pengendali menyemak parameter ketiga (wParam) yang diluluskan oleh SendMessage, mengiktiraf bahawa nilainya ialah VK_RETURN, dan dengan itu menentukan bahawa pengguna telah menekan kekunci Enter. Ini mencetuskan respons yang sesuai untuk aplikasi.
Apabila kekunci ditekan pada OS X, isyarat gangguan mencetuskan peristiwa dalam pemacu papan kekunci Kit I/O (sambungan kernel atau "kext"). Pemacu ini menterjemah isyarat perkakasan ke dalam kod kunci. Kod kunci kemudiannya dihantar ke WindowServer, yang menguruskan antara muka pengguna grafik.
WindowServer menghantar acara tekan kekunci ke aplikasi yang sesuai (seperti yang aktif atau mendengar) dengan menghantarnya melalui port Mach mereka, di mana ia diletakkan ke dalam acara beratur. Aplikasi dengan keistimewaan yang sewajarnya boleh mengakses baris gilir acara ini dengan memanggil fungsi mach_ipc_dispatch.
Kebanyakan aplikasi mengendalikan proses ini melalui gelung acara utama NSApplication, yang bertanggungjawab untuk memproses input pengguna. Apabila acara itu adalah tekan kekunci, ia diwakili sebagai NSEvent jenis NSEventTypeKeyDown. Aplikasi kemudian membaca acara ini dan bertindak balas dengan sewajarnya, mencetuskan sebarang kod yang berkaitan dengan tindakan menekan kekunci berdasarkan kod kunci yang diterima.
Apabila kekunci ditekan dalam persekitaran grafik menggunakan pelayan X, pelayan X menggunakan pemacu evdev (peranti acara) untuk menangkap acara penekanan kekunci. Kod kekunci daripada papan kekunci fizikal kemudiannya dipetakan semula menjadi kod imbasan menggunakan peta kekunci dan peraturan khusus pelayan X.
Setelah pemetaan selesai, pelayan X memajukan kod imbasan yang terhasil ke pengurus tetingkap (seperti DWM, Metacity, i3, dll.). Pengurus tetingkap, seterusnya, menghantar watak atau acara utama ke tetingkap yang sedang difokuskan. API grafik tetingkap fokus memproses acara ini dan memaparkan simbol yang sepadan dalam medan yang sesuai, menggunakan fon yang betul, berdasarkan kekunci yang ditekan.
Aliran ini memastikan bahawa aksara dipaparkan dengan betul dalam antara muka aplikasi aktif, melengkapkan interaksi menekan kekunci daripada perkakasan kepada output grafik.
Apabila pelayar menghuraikan URL (Pencari Sumber Seragam), ia mengekstrak komponen berikut:
Setiap komponen ini membantu penyemak imbas mentafsir dan mengambil sumber yang diingini daripada web.
프로토콜(예: 'http')이나 유효한 도메인 이름이 제공되지 않으면 브라우저는 주소 표시줄의 텍스트를 잠재적인 검색어로 해석합니다. 브라우저는 이를 URL로 해석하는 대신 텍스트를 기본 웹 검색 엔진으로 전달합니다.
대부분의 경우 브라우저는 검색어에 특수 식별자를 추가하여 요청이 브라우저의 URL 표시줄에서 발생했음을 나타냅니다. 이를 통해 검색 엔진은 이러한 검색을 적절하게 처리하고 우선순위를 지정하여 상황에 따른 결과의 관련성을 높일 수 있습니다.
이 프로세스는 브라우저가 웹사이트로 직접 이동해야 하는지 아니면 입력한 텍스트를 기반으로 검색 결과를 제공해야 하는지 결정하는 데 도움이 됩니다.
브라우저는 먼저 사전 로드된 HSTS(HTTP Strict Transport Security) 목록을 확인합니다. 이 목록에는 HTTPS를 통해서만 액세스하도록 명시적으로 요청한 웹사이트가 포함되어 있습니다.
요청한 웹사이트가 이 목록에 있으면 브라우저는 자동으로 HTTP 대신 HTTPS를 사용하여 요청을 보냅니다. 해당 웹사이트가 HSTS 목록에 없으면 HTTP를 통해 초기 요청이 전송됩니다.
웹사이트는 사전 로드된 목록에 포함되지 않고도 HSTS를 구현할 수 있다는 점에 유의하는 것이 중요합니다. 이러한 경우 사용자가 처음으로 HTTP 요청하면 HTTPS를 통해서만 후속 요청을 보내도록 브라우저에 지시하는 응답이 반환됩니다. 그러나 이 초기 HTTP 요청으로 인해 사용자가 다운그레이드 공격에 노출될 수 있으며, 공격자가 요청을 가로채서 암호화되지 않은 상태로 유지하도록 할 수 있습니다. 이 취약점으로 인해 최신 웹 브라우저에 HSTS 목록이 포함되어 애초에 안전하지 않은 연결이 설정되는 것을 방지하여 사용자 보안을 강화합니다.
브라우저는 도메인이 이미 캐시에 있는지 확인하여 DNS 조회 프로세스를 시작합니다. (Google Chrome에서 DNS 캐시를 보려면 chrome://net-internals/#dns로 이동하세요.)
캐시에서 도메인을 찾을 수 없는 경우 브라우저는 gethostbyname 라이브러리 함수(구체적인 기능은 운영 체제에 따라 다를 수 있음)를 호출하여 호스트 이름 확인을 수행합니다.
로컬 호스트 파일 확인:
DNS 서버 요청:
DNS 서버용 ARP 프로세스:
이 체계적인 접근 방식을 통해 브라우저는 도메인 이름을 IP 주소로 효율적으로 확인하여 원하는 웹사이트에 대한 연결을 설정할 수 있습니다. 먼저 캐시를 확인하고 로컬 호스트 파일을 사용하여 마지막으로 DNS 서버에 쿼리함으로써 브라우저는 호스트 이름 확인에 소요되는 시간을 최소화합니다.
시퀀스 다이어그램
Afin d'envoyer une diffusion ARP (Address Resolution Protocol), la bibliothèque de pile réseau a besoin de deux informations clés : l'adresse IP cible qui doit être recherchée et l'adresse MAC de l'interface qui sera utilisée pour envoyer sur la diffusion ARP.
Le cache ARP est d'abord vérifié pour une entrée correspondant à l'adresse IP cible. Si une entrée existe, la fonction bibliothèque renvoie le résultat au format :
IP cible = MAC.
Si l'entrée n'est pas dans le cache ARP :
S'il n'y a aucune entrée pour l'adresse IP cible, les étapes suivantes sont prises :
La bibliothèque réseau construit et envoie une requête ARP de couche 2 (couche liaison de données du modèle OSI) au format suivant : Requête ARP :
En fonction de la configuration matérielle entre l'ordinateur et le routeur, le comportement de la requête ARP varie :
Si l'ordinateur est directement connecté au routeur, le routeur répondra avec une réponse ARP (voir ci-dessous).
Si l'ordinateur est connecté à un hub, le hub diffusera la requête ARP depuis tous ses autres ports. Si le routeur est connecté au même « fil », il répondra par une réponse ARP (voir ci-dessous).
Si l'ordinateur est connecté à un commutateur, le commutateur vérifiera sa table CAM/MAC locale pour identifier le port dont l'adresse MAC est interrogée. Si le commutateur n'a aucune entrée pour l'adresse MAC, il rediffusera la requête ARP vers tous les autres ports. Si le commutateur a une entrée dans sa table MAC/CAM, il enverra la requête ARP uniquement au port qui a l'adresse MAC correspondante.
La réponse ARP aura le format suivant :
Expéditeur MAC : cible:mac:adresse:ici
IP de l'expéditeur : target.ip.goes.here
MAC cible : interface:mac:adresse:ici
IP cible : interface.ip.goes.here
Maintenant que la bibliothèque réseau a obtenu l'adresse IP soit du serveur DNS, soit de la passerelle par défaut, elle peut reprendre son processus DNS :
Une fois que le navigateur reçoit l'adresse IP du serveur de destination, il la combine avec le numéro de port spécifié dans l'URL (où HTTP par défaut est le port 80 et HTTPS le port 443). Le navigateur appelle ensuite la fonction de bibliothèque système nommée socket, demandant un flux de socket TCP à l'aide de AF_INET ou AF_INET6 et SOCK_STREAM.
À ce stade, le paquet est prêt à être transmis via l'une des méthodes suivantes :
Pour la plupart des connexions Internet domestiques ou de petites entreprises, le paquet passera depuis votre ordinateur, éventuellement via un réseau local, puis via un modem (Modulateur/Démodulateur). Ce modem convertit les 1 et les 0 numériques en un signal analogique adapté à la transmission via des connexions téléphoniques, par câble ou sans fil. À l'autre extrémité de la connexion, un autre modem reconvertit le signal analogique en données numériques pour le traitement par le prochain nœud de réseau, où les adresses d'origine et de destination seraient analysées plus en détail.
En revanche, les grandes entreprises et certaines connexions résidentielles plus récentes utiliseront des connexions fibre optique ou Ethernet directes, permettant aux données de rester numériques et d'être transmises directement au nœud de réseau suivant pour traitement.
Finalement, le paquet atteindra le routeur gérant le sous-réseau local. À partir de là, il continuera à voyager vers les routeurs frontières du système autonome (AS), à traverser d’autres AS et finalement à arriver au serveur de destination. En cours de route, chaque routeur extrait l'adresse de destination de l'en-tête IP et l'achemine vers le tronçon suivant approprié. Le champ de durée de vie (TTL) dans l'en-tête IP est décrémenté de un pour chaque routeur qui le traite. Le paquet sera abandonné si le champ TTL atteint zéro ou si le routeur actuel n'a pas d'espace dans sa file d'attente (ce qui peut se produire en raison d'une congestion du réseau).
Ce processus d'envoi et de réception se produit plusieurs fois suivant le flux de connexion TCP :
Copie le (client ISN 1) dans son champ ACK et ajoute l'indicateur ACK pour indiquer qu'il accuse réception du premier paquet.
Le client accuse réception de la connexion en envoyant un paquet qui :
Transfert de données : Les données sont transférées comme suit :
Fermeture de la connexion : Pour fermer la connexion :
Ouverture d'une Socket : Diagramme de Séquence
Proses jabat tangan ini mewujudkan sambungan selamat antara pelanggan dan pelayan, memastikan data yang dihantar melalui sambungan dilindungi daripada mencuri dengar dan mengganggu.
Kadangkala, disebabkan kesesakan rangkaian atau sambungan perkakasan yang tidak berfungsi, paket TLS mungkin tercicir sebelum sampai ke destinasi terakhirnya. Dalam kes sedemikian, pengirim mesti memutuskan cara untuk bertindak balas. Algoritma yang mengawal tindak balas ini dikenali sebagai kawalan kesesakan TCP. Pelaksanaan khusus boleh berbeza-beza bergantung pada pengirim, dengan algoritma yang paling biasa ialah Kubik pada sistem pengendalian yang lebih baharu dan Reno Baharu pada banyak yang lain.
Mekanisme kawalan kesesakan ini membantu mengoptimumkan prestasi dan kestabilan rangkaian, memastikan data boleh dihantar dengan cekap sambil meminimumkan kesan kehilangan paket.
Jika penyemak imbas web yang digunakan dibangunkan oleh Google, bukannya menghantar permintaan HTTP standard untuk mendapatkan halaman, ia mungkin cuba merundingkan "naik taraf" daripada HTTP kepada protokol SPDY dengan pelayan.
Jika pelanggan menggunakan protokol HTTP dan tidak menyokong SPDY, ia menghantar permintaan kepada pelayan dalam format berikut:
GET / HTTP/1.1 Host: google.com Connection: close [other headers]
Di sini, [pengepala lain] merujuk kepada siri pasangan nilai kunci yang dipisahkan bertindih yang diformatkan mengikut spesifikasi HTTP dan dipisahkan oleh baris baharu tunggal. Ini mengandaikan bahawa penyemak imbas web bebas daripada pepijat yang melanggar spesifikasi HTTP dan ia menggunakan HTTP/1.1. Jika ia menggunakan versi yang berbeza, seperti HTTP/1.0 atau HTTP/0.9, ia mungkin tidak menyertakan pengepala Hos dalam permintaan.
HTTP/1.1 mentakrifkan pilihan sambungan "tutup" untuk pengirim memberi isyarat bahawa sambungan akan ditutup selepas respons selesai. Contohnya:
Connection: close
Aplikasi HTTP/1.1 yang tidak menyokong sambungan berterusan MESTI menyertakan pilihan sambungan "tutup" dalam setiap mesej.
Selepas menghantar permintaan dan pengepala, penyemak imbas web menghantar satu baris baharu kosong kepada pelayan untuk menunjukkan bahawa kandungan permintaan telah lengkap.
Pelayan kemudian bertindak balas dengan kod respons yang menandakan status permintaan, berstruktur seperti berikut:
200 OK [response headers]
Ini diikuti dengan satu baris baharu dan kemudian muatan yang mengandungi kandungan HTML www.google.com. Pelayan mungkin sama ada menutup sambungan atau, jika diminta oleh pengepala yang dihantar oleh klien, pastikan sambungan terbuka untuk digunakan semula dalam permintaan selanjutnya.
If the HTTP headers sent by the web browser contained sufficient information for the web server to determine whether the version of the file cached by the web browser has been unmodified since the last retrieval (for example, if the web browser included an ETagheader), the server may instead respond with:
304 Not Modified [response headers]
This response will have no payload, and the web browser will retrieve the HTML from its cache.
After parsing the HTML, the web browser (and server) repeats this process for every resource (image, CSS, favicon.ico, etc.) referenced in the HTML page. In these cases, instead of GET / HTTP/1.1, the request will be structured as:
GET /$(URL relative to www.google.com) HTTP/1.1
If the HTML references a resource on a different domain than www.google.com, the web browser returns to the steps involved in resolving the other domain, following all steps up to this point for that domain. The Host header in the request will be set to the appropriate server name instead of google.com.
The HTTPD (HTTP Daemon) server is responsible for handling requests and responses on the server side. The most common HTTPD servers include Apache and Nginx for Linux, as well as IIS for Windows.
By following these steps, the HTTPD server efficiently processes incoming requests and returns the appropriate responses to the client.
The primary functionality of a browser is to present the web resources you choose by requesting them from a server and displaying them in the browser window. The resource is typically an HTML document but may also include PDFs, images, or other types of content. The location of the resource is specified by the user using a URI (Uniform Resource Identifier).
The way a browser interprets and displays HTML files is defined by the HTML and CSS specifications, which are maintained by the W3C (World Wide Web Consortium), the standards organization for the web.
Browser user interfaces share many common features, including:
The components of a browser can be broken down as follows:
Setiap komponen ini berfungsi bersama untuk mencipta pengalaman penyemakan imbas yang lancar, membolehkan pengguna mengakses dan berinteraksi dengan sumber web dengan cekap.
Enjin pemaparan mula mendapatkan semula kandungan dokumen yang diminta daripada lapisan rangkaian, biasanya dalam ketulan 8 kB. Tanggungjawab utama penghurai HTML ialah mengubah penanda HTML menjadi perwakilan berstruktur yang dikenali sebagai pepohon parse.
Pokok output, dirujuk sebagai "pokok parse," terdiri daripada hierarki elemen DOM (Model Objek Dokumen) dan nod atribut. DOM berfungsi sebagai perwakilan objek dokumen HTML, menyediakan antara muka untuk elemen HTML untuk berinteraksi dengan skrip luaran, seperti JavaScript. Akar pokok ini ialah objek "Dokumen", dan sebelum sebarang manipulasi skrip, DOM mengekalkan hampir satu sama lain surat-menyurat dengan penanda asal.
HTML tidak boleh dihuraikan dengan berkesan menggunakan penghurai tradisional atas ke bawah atau bawah atas atas beberapa faktor:
Setelah penghuraian selesai, penyemak imbas meneruskan untuk mengambil sumber luaran yang dipautkan ke halaman, seperti helaian gaya CSS, imej dan fail JavaScript. Pada ketika ini, penyemak imbas menandakan dokumen sebagai interaktif dan mula menghuraikan skrip yang berada dalam mod "tertunda", bermakna skrip tersebut bertujuan untuk dilaksanakan selepas dokumen dihuraikan sepenuhnya. Keadaan dokumen kemudiannya ditetapkan kepada "selesai" dan peristiwa "muatan" dicetuskan.
Yang penting, penyemak imbas tidak menjana ralat "Sintaks Tidak Sah" untuk halaman HTML. Sebaliknya, mereka membetulkan sebarang kandungan yang tidak sah secara automatik dan terus memproses dokumen, memastikan pengguna boleh melihat halaman web dengan gangguan yang minimum.
Proses tafsiran CSS melibatkan beberapa langkah utama: