有沒有想過點擊連結時會發生什麼事? ? 《互聯網如何運作》將帶您深入數位世界的幕後,將複雜的技術分解為簡單的見解。從資料包到伺服器等,探索為您的線上體驗提供動力的魔力! (在 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(Time to Live) 필드는 이를 처리하는 각 라우터에 대해 1씩 감소됩니다. TTL 필드가 0에 도달하거나 현재 라우터의 대기열에 공간이 없는 경우(네트워크 정체로 인해 발생할 수 있음) 패킷이 삭제됩니다.
이 보내기 및 받기 프로세스는 TCP 연결 흐름에 따라 여러 번 발생합니다.
(클라이언트 ISN 1)을 ACK 필드에 복사하고 ACK 플래그를 추가하여 첫 번째 패킷 수신을 승인했음을 나타냅니다.
클라이언트는 다음과 같은 패킷을 보내 연결을 확인합니다.
데이터 전송: 데이터는 다음과 같이 전송됩니다.
연결 닫기: 연결을 닫으려면:
소켓 열기: 시퀀스 다이어그램
This handshake process establishes a secure connection between the client and server, ensuring that data transmitted over the connection is protected from eavesdropping and tampering.
Sometimes, due to network congestion or flaky hardware connections, TLS packets may be dropped before reaching their final destination. In such cases, the sender must decide how to react. The algorithm governing this response is known as TCP congestion control. The specific implementation can vary depending on the sender, with the most common algorithms being Cubic on newer operating systems and New Reno on many others.
This congestion control mechanism helps optimize network performance and stability, ensuring that data can be transmitted efficiently while minimizing the impact of packet loss.
If the web browser used was developed by Google, instead of sending a standard HTTP request to retrieve a page, it may attempt to negotiate an "upgrade" from HTTP to the SPDY protocol with the server.
If the client is using the HTTP protocol and does not support SPDY, it sends a request to the server in the following format:
GET / HTTP/1.1 Host: google.com Connection: close [other headers]
Here, [other headers] refers to a series of colon-separated key-value pairs formatted according to the HTTP specification and separated by single newlines. This assumes that the web browser is free of bugs that violate the HTTP specification and that it is using HTTP/1.1. If it were using a different version, such as HTTP/1.0 or HTTP/0.9, it might not include the Host header in the request.
HTTP/1.1 defines the "close" connection option for the sender to signal that the connection will be closed after the response is completed. For example:
Connection: close
HTTP/1.1 applications that do not support persistent connections MUST include the "close" connection option in every message.
After sending the request and headers, the web browser sends a single blank newline to the server to indicate that the content of the request is complete.
The server then responds with a response code that denotes the status of the request, structured as follows:
200 OK [response headers]
This is followed by a single newline and then the payload containing the HTML content of www.google.com. The server may either close the connection or, if requested by the headers sent by the client, keep the connection open for reuse in further requests.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!