有沒有想過點擊連結時會發生什麼事? ? 《互聯網如何運作》將帶您深入數位世界的幕後,將複雜的技術分解為簡單的見解。從資料包到伺服器等,探索為您的線上體驗提供動力的魔力! (在 AI 的幫助下寫的 Hook,因為我不會:D)
讓我解釋一下實體鍵盤操作和作業系統中斷。當您按下“g”鍵時,瀏覽器會註冊該事件,觸發自動完成功能。根據您的瀏覽器演算法以及您處於常規模式還是私人/隱身模式,URL 欄下方的下拉式選單中會顯示各種建議。
這些建議通常會根據您的搜尋記錄、書籤、cookie 和流行的網路搜尋等因素進行優先排序和排序。當您繼續輸入“google.com”時,許多進程會在背景運行,並建議會隨著每次按鍵而完善。在您完成輸入之前,瀏覽器甚至可能會預測「google.com」。
瀏覽自動完成序列
「輸入」鍵觸底
為了建立一個起點,讓我們考慮一下鍵盤上的 Enter 鍵到達其行程範圍底部時的情況。此時,專用於 Enter 鍵的電路閉合(機械地或電容式地),允許小電流流入鍵盤的邏輯電路。此電路掃描每個按鍵開關的狀態,濾除開關快速閉合(去抖)產生的電噪聲,並將操作轉換為鍵碼(在本例中為整數 13)。然後鍵盤控制器對該鍵碼進行編碼以進行傳輸到電腦。如今,這幾乎總是透過通用序列匯流排 (USB) 或藍牙連接完成,儘管舊系統使用 PS/2 或 ADB。
如果是 USB 鍵盤:
如果是虛擬鍵盤(例如在觸控螢幕裝置上):
對於非 USB 鍵盤,例如使用傳統連接(例如 PS/2)的鍵盤,鍵盤透過其中斷請求線 (IRQ) 發出中斷訊號。此 IRQ 由系統的中斷控制器對應到中斷向量(整數)。 CPU 查閱中斷描述符表 (IDT),該表將每個中斷向量連結到由作業系統核心提供的對應函數(稱為中斷處理程序)。
인터럽트가 트리거되면 CPU는 인터럽트 벡터를 사용하여 IDT를 색인화하고 적절한 인터럽트 핸들러를 실행합니다. 이 프로세스를 통해 CPU가 커널 모드로 전환되어 운영 체제가 키 누르기 이벤트를 관리할 수 있습니다.
Enter 키를 누르면 HID(휴먼 인터페이스 장치) 전송이 키 다운 이벤트를 KBDHID.sys 드라이버에 전달하여 HID 사용 데이터를 스캔 코드로 변환합니다. 이 경우 스캔 코드는 VK_RETURN(0x0D)이며 Enter 키를 나타냅니다. 그런 다음 KBDHID.sys 드라이버는 모든 키보드 입력을 안전하게 관리하는 KBDCLASS.sys 드라이버(키보드 클래스 드라이버)와 통신합니다. 계속하기 전에 신호는 시스템에 설치된 타사 키보드 필터를 통과할 수 있지만 이는 커널 모드에서도 발생합니다.
다음으로 Win32K.sys가 작동하여 GetForegroundWindow() API를 호출하여 현재 활성화된 창이 무엇인지 확인합니다. 이 함수는 브라우저의 주소 표시줄과 같은 활성 애플리케이션의 창 핸들(hWnd)을 검색합니다. 이 시점에서 Windows "메시지 펌프"는 SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, lParam)를 호출합니다. lParam 매개변수에는 다음을 포함하여 키 누르기에 대한 추가 정보를 제공하는 비트마스크가 포함되어 있습니다.
SendMessage API는 특정 창 핸들에 대한 메시지를 대기열에 넣습니다. 나중에 창(hWnd)에 할당된 시스템의 기본 메시지 처리 기능(WindowProc라고도 함)이 대기열에 있는 메시지를 검색하고 처리합니다.
이 경우 활성 창은 편집 컨트롤이며 WindowProc 함수에는 WM_KEYDOWN 이벤트에 응답하는 메시지 핸들러가 있습니다. 핸들러는 SendMessage가 전달한 세 번째 매개변수(wParam)를 확인하고 그 값이 VK_RETURN임을 인식하여 사용자가 Enter 키를 눌렀다고 판단합니다. 그러면 애플리케이션에 대한 적절한 응답이 시작됩니다.
OS X에서 키를 누르면 인터럽트 신호가 I/O 키트 키보드 드라이버(커널 확장 또는 "kext")에서 이벤트를 트리거합니다. 이 드라이버는 하드웨어 신호를 키 코드로 변환합니다. 그런 다음 키 코드는 그래픽 사용자 인터페이스를 관리하는 WindowServer로 전달됩니다.
WindowServer는 이벤트에 배치되는 Mach 포트를 통해 키 누르기 이벤트를 적절한 애플리케이션(예: 활성 애플리케이션 또는 청취 애플리케이션)에 전달합니다. 대기줄. 적절한 권한이 있는 애플리케이션은 mach_ipc_dispatch 함수를 호출하여 이 이벤트 큐에 액세스할 수 있습니다.
대부분의 애플리케이션은 사용자 입력 처리를 담당하는 NSApplication 메인 이벤트 루프를 통해 이 프로세스를 처리합니다. 이벤트가 키 누르기인 경우 NSEventTypeKeyDown 유형의 NSEvent로 표시됩니다. 그런 다음 애플리케이션은 이 이벤트를 읽고 그에 따라 응답하여 수신된 키 코드를 기반으로 키 누르기 작업과 관련된 모든 코드를 트리거합니다.
X 서버를 사용하는 그래픽 환경에서 키를 누르면 X 서버는 evdev(이벤트 장치) 드라이버를 사용하여 키 누르기 이벤트를 캡처합니다. 그런 다음 실제 키보드의 키코드는 X 서버별 키맵과 규칙을 사용하여 스캔코드로 다시 매핑됩니다.
매핑이 완료되면 X 서버는 결과 스캔코드를 창 관리자(예: DWM, Metacity, i3 등)로 전달합니다. 그러면 창 관리자는 현재 초점이 맞춰진 창에 문자나 키 이벤트를 보냅니다. 초점이 맞춰진 창의 그래픽 API는 이 이벤트를 처리하고 누른 키에 따라 올바른 글꼴을 사용하여 해당 필드에 해당 기호를 표시합니다.
이 흐름을 통해 활성 애플리케이션의 인터페이스에서 문자가 올바르게 렌더링되어 하드웨어에서 그래픽 출력까지 키 누름 상호 작용이 완료됩니다.
브라우저는 URL(Uniform Resource Locator)을 구문 분석할 때 다음 구성 요소를 추출합니다.
이러한 각 구성 요소는 브라우저가 웹에서 원하는 리소스를 해석하고 가져오는 데 도움이 됩니다.
プロトコル (「http」など) または有効なドメイン名が指定されていない場合、ブラウザはアドレス バー内のテキストを潜在的な検索語として解釈します。ブラウザは、URL として解決しようとする代わりに、テキストをデフォルトの Web 検索エンジンに転送します。
ほとんどの場合、ブラウザは検索クエリに特別な識別子を追加し、リクエストがブラウザの URL バーからのものであることを示します。これにより、検索エンジンはこれらの検索を適切に処理して優先順位を付け、コンテキストに基づいて結果の関連性を向上させることができます。
このプロセスは、ブラウザーが Web サイトに直接移動するか、入力されたテキストに基づいて検索結果を提供するかを判断するのに役立ちます。
ブラウザはまず、プリロードされた HSTS (HTTP Strict Transport Security) リストをチェックします。このリストには、HTTPS 経由でのみアクセスすることを明示的に要求した Web サイトが含まれています。
リクエストされた Web サイトがこのリストにある場合、ブラウザは HTTP ではなく HTTPS を使用してリクエストを自動的に送信します。 Web サイトが HSTS リストにない場合、最初のリクエストは HTTP 経由で送信されます。
Web サイトは、プリロードされたリストに含まれていなくても HSTS を実装できることに注意することが重要です。このような場合、ユーザーが行った最初の HTTP リクエストは、以降のリクエストを HTTPS 経由でのみ送信するようブラウザに指示する応答を返します。ただし、この最初の HTTP リクエストはユーザーをダウングレード攻撃にさらす可能性があり、攻撃者がリクエストを傍受し、強制的に暗号化されないままにする可能性があります。この脆弱性のため、最新の Web ブラウザーには HSTS リストが含まれており、そもそも安全でない接続が確立されるのを防ぐことでユーザーのセキュリティを強化しています。
ブラウザは、ドメインがすでにキャッシュに存在するかどうかを確認することで、DNS ルックアップ プロセスを開始します。 (Google Chrome で DNS キャッシュを表示するには、chrome://net-internals/#dns に移動します。)
ドメインがキャッシュ内に見つからない場合、ブラウザは gethostbyname ライブラリ関数 (特定の関数はオペレーティング システムによって異なる場合があります) を呼び出して、ホスト名解決を実行します。
ローカルホストファイルチェック:
DNS サーバーリクエスト:
DNS サーバーの ARP プロセス:
この体系的なアプローチにより、ブラウザはドメイン名を効率的に IP アドレスに解決し、目的の Web サイトへの接続を確立できるようになります。最初にキャッシュを確認し、ローカル ホスト ファイルを使用して、最後に DNS サーバーにクエリを実行することで、ブラウザはホスト名解決にかかる時間を最小限に抑えます。
シーケンス図
ARP(주소 확인 프로토콜) 브로드캐스트를 전송하려면 네트워크 스택 라이브러리에 두 가지 핵심 정보가 필요합니다. 즉, 조회해야 하는 대상 IP 주소와 전송에 사용될 인터페이스의 MAC 주소입니다. ARP 방송에서 나옵니다.
먼저 ARP 캐시에서 대상 IP 주소에 해당하는 항목이 있는지 확인합니다. 항목이 있으면 라이브러리 함수는 다음 형식으로 결과를 반환합니다.
대상 IP = MAC.
항목이 ARP 캐시에 없는 경우:
대상 IP 주소에 대한 항목이 없는 경우 다음 단계를 수행합니다.
네트워크 라이브러리는 다음 형식으로 계층 2(OSI 모델의 데이터 링크 계층) ARP 요청을 구성하고 보냅니다. ARP 요청:
컴퓨터와 라우터 간의 하드웨어 설정에 따라 ARP 요청 동작이 달라집니다.
컴퓨터가 라우터에 직접 연결된 경우 라우터는 ARP 응답으로 응답합니다(아래 참조).
컴퓨터가 허브에 연결된 경우 허브는 다른 모든 포트에서 ARP 요청을 브로드캐스트합니다. 라우터가 동일한 "회선"에 연결된 경우 ARP 응답으로 응답합니다(아래 참조).
컴퓨터가 스위치에 연결된 경우 스위치는 로컬 CAM/MAC 테이블을 확인하여 쿼리 중인 MAC 주소가 있는 포트를 식별합니다. 스위치에 MAC 주소에 대한 항목이 없으면 ARP 요청을 다른 모든 포트로 다시 브로드캐스트합니다. 스위치의 MAC/CAM 테이블에 항목이 있으면 해당 MAC 주소가 있는 포트에만 ARP 요청을 보냅니다.
ARP 응답의 형식은 다음과 같습니다.
발신자 MAC: 대상:mac:주소:여기
발신자 IP: target.ip.goes.here
대상 MAC: 인터페이스:mac:주소:여기
대상 IP: 인터페이스.ip.goes.여기
이제 네트워크 라이브러리가 DNS 서버 또는 기본 게이트웨이의 IP 주소를 얻었으므로 DNS 프로세스를 재개할 수 있습니다.
브라우저가 대상 서버의 IP 주소를 수신하면 이를 URL에 지정된 포트 번호와 결합합니다(HTTP의 기본값은 포트 80, HTTPS의 기본값은 443). 그런 다음 브라우저는 AF_INET 또는 AF_INET6 및 SOCK_STREAM을 사용하여 TCP 소켓 스트림을 요청하는 소켓이라는 시스템 라이브러리 함수를 호출합니다.
此時,資料包已準備好透過以下方法之一傳輸:
對於大多數家庭或小型企業互聯網連接,資料包將從您的電腦傳遞,可能透過本地網絡,然後透過數據機(調製器/解調器)。此數據機將數位 1 和 0 轉換為適合透過電話、電纜或無線電話連接傳輸的類比訊號。在連接的另一端,另一個調製解調器將類比訊號轉換回數位數據,以供下一個網路節點處理,其中將進一步分析起始位址和目標位址。
相較之下,較大的企業和一些較新的住宅連接將使用光纖或直接乙太網路連接,從而使資料保持數位化並直接傳遞到下一個網路節點進行處理。
最終,封包將到達管理本地子網路的路由器。從那裡,它將繼續前往自治系統 (AS) 的邊界路由器,遍歷其他 AS,最後到達目標伺服器。沿途的每個路由器從 IP 標頭中提取目標位址,並將其路由到適當的下一跳。對於每個處理它的路由器,IP 標頭中的生存時間 (TTL) 欄位會減一。如果 TTL 欄位達到零或目前路由器佇列中沒有空間(這可能是由於網路擁塞而發生),則封包將被丟棄。
此傳送和接收程序依照 TCP 連線流程發生多次:
將(客戶端 ISN 1)複製到其 ACK 欄位並新增 ACK 標誌以指示它正在確認收到第一個資料包。
客戶端透過傳送以下資料包來確認連線:
資料傳輸:資料傳輸如下:
關閉連線:關閉連線:
開啟套接字:序列圖
此握手程序在客戶端和伺服器之間建立安全連接,確保透過連接傳輸的資料不會被竊聽和篡改。
有時,由於網路擁塞或不穩定的硬體連接,TLS 封包可能會在到達最終目的地之前被丟棄。在這種情況下,發送者必須決定如何反應。管理此回應的演算法稱為 TCP 擁塞控制。具體實作可能因發送者而異,最常見的演算法是較新作業系統上的 Cubic 和許多其他作業系統上的 New Reno。
這種擁塞控制機制有助於優化網路效能和穩定性,確保資料能夠高效傳輸,同時最大限度地減少丟包的影響。
如果使用的網頁瀏覽器是由 Google 開發的,它可能會嘗試與伺服器協商從 HTTP 到 SPDY 協定的“升級”,而不是發送標準 HTTP 請求來檢索頁面。
如果客戶端使用的是HTTP協定且不支援SPDY,則會依照下列格式向伺服器傳送請求:
GET / HTTP/1.1 Host: google.com Connection: close [other headers]
這裡,[其他標頭]指的是一系列以冒號分隔的鍵值對,這些鍵值對按照 HTTP 規範格式化,並以單一換行符分隔。這假設 Web 瀏覽器不存在違反 HTTP 規範的錯誤,而且它正在使用 HTTP/1.1。如果它使用不同的版本,例如 HTTP/1.0 或 HTTP/0.9,它可能不會在請求中包含 Host 標頭。
HTTP/1.1 為發送方定義了「關閉」連線選項,以表示回應完成後將關閉連線。例如:
Connection: close
不支援持久連線的 HTTP/1.1 應用程式必須在每個訊息中包含「關閉」連線選項。
發送請求和標頭後,Web 瀏覽器會向伺服器發送空白換行符,表示請求內容已完成。
伺服器隨後使用表示請求狀態的回應代碼進行回應,其結構如下:
200 OK [response headers]
後面跟著一個換行符,然後是包含 www.google.com 的 HTML 內容的有效負載。伺服器可以關閉連接,或者,如果客戶端發送的標頭請求,則保持連接開啟以便在進一步的請求中重複使用。
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:
每個元件協同工作以創建無縫的瀏覽體驗,使用戶能夠有效地存取網路資源並與之互動。
渲染引擎開始從網路層檢索所請求文件的內容,通常以 8 kB 區塊的形式檢索。 HTML 解析器的主要職責是將 HTML 標記轉換為稱為解析樹的結構化表示。
輸出樹,稱為“解析樹”,由 DOM(文檔物件模型)元素和屬性節點的層次結構組成。 DOM 用作 HTML 文件的物件表示,為 HTML 元素提供與外部腳本(例如 JavaScript)互動的介面。這棵樹的根是「Document」對象,在任何腳本操作之前,DOM 與原始標記保持幾乎一一對應。
由於多種因素,使用傳統的自上而下或自下而上的解析器無法有效地解析 HTML:
解析完成後,瀏覽器將繼續取得連結到頁面的外部資源,例如 CSS 樣式表、圖片和 JavaScript 檔案。此時,瀏覽器將文件標記為互動式,並開始解析處於「延遲」模式的腳本,這表示這些腳本將在文件完全解析後執行。然後文檔狀態設定為“完成”,並觸發“載入”事件。
重要的是,瀏覽器不會為 HTML 頁面產生「無效語法」錯誤。相反,它們會自動更正任何無效內容並繼續處理文檔,確保使用者可以在最小幹擾的情況下查看網頁。
CSS解釋的過程涉及幾個關鍵步驟:
透過這種解釋,瀏覽器可以全面了解如何將樣式應用於 DOM 中的 HTML 元素,從而促進網頁呈現出預期的視覺呈現效果。
網頁的渲染過程涉及幾個結構化步驟:
この画像も GPU によってレンダリングされます
レンダリング プロセスが完了すると、ブラウザは、タイミング メカニズム (Google Doodle アニメーションなど) やユーザー インタラクション (検索ボックスにクエリを入力して候補を受け取るなど) などのさまざまなイベントによってトリガーされる JavaScript コードを実行します。
以上がインターネットはどのように機能するのでしょうか?パート 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。