基本網路架構─輸入網址後發生了什麼事?

本文重點:
1. 在瀏覽器輸入網址按下Enter後,背後發生哪些事情?
2. 會提到:網域名稱系統(DNS)、IP 位置、TCP/IP四層架構、超文字傳輸協定(HTTP)、檔案傳輸協定(FTP)、傳輸控制協定(TCP)、使用者資料報協定(UDP)、通訊埠(Port)。

在瀏覽器輸入網址後,會經過以下步驟:

  1. 網址被DNS網域解析成電腦看得懂的IP位置
  2. 先用TCP協議確認雙邊都能傳出和接收訊息
  3. 再發出HTTP協議的請求(HTTP Request)
  4. 伺服器回傳HTTP協議的回應(HTTP Response)
  5. 瀏覽器收到回應後渲染畫面

(用英文來說)
After entering a URL in the browser:

  1. The URL is resolved into an IP address through DNS resolution.
  2. TCP is used to establish a connection and ensure that both the client and server can send and receive messages.
  3. An HTTP request is sent to the server. This request includes the HTTP header and body.
  4. The server processes the request and sends back an HTTP response. The response includes an HTTP status code indicating the outcome of the request (e.g., success, redirection, client error).
  5. The browser receives the response and renders the Web Page.
    received data, including HTML, CSS, and JavaScript, to display the web page to the user.

接下來,來看每一步的內容吧!

首先,先了解我們輸入進瀏覽器的網址,例如:https://www.google.com/,稱作「網域名稱(Domain Name)」。

▊ 網域名稱 | Domain Name

電腦是看不懂網域名稱的,須經由DNS解析,將網域名稱轉換為電腦理解的 IP 位址。

像是https://www.google.com/ 此網域名稱的IP位置為 172.217.163.36

不過Google遍及全球,此IP是抓離我最近的Google主機的位置。所以可能你們抓到的IP位置就跟我的不一樣喔😆

網域名稱,是為了讓人類更好記憶,不必記住一長串數字的IP位址。

網域名稱的組成:

images
  • HTTP / HTTPS:不是Domain Name的一部分,而是指定使用的通訊協定。HTTP是未加密的通訊協定,而HTTPS則是加密的版本。
  • HOST:這是Domain Name的主體(主機),這裡是 World Wide Web www,是該網站的 Web 伺服器。
  • Root根域名:Domain Name的最高層級,位於最右邊。這裡的Root是.。(通常網址上被省略,DNS解析時會自動補回)
  • TLD頂級域名:是Root下的一個層級.com,通常表示國家、類型或組織。com / org / gov / edu。
  • SLD次級域名:TLD下的一個層級,是具體的Domain Name。.example.com
  • 根域名管理所有的頂級域名,頂級域名管理所有的次級域名。

▊ DNS | 網域名稱系統 | Domain Name System

DNS解析,是將人類可讀的網域名稱轉換為對應的 IP 位址的過程。

DNS解析過程如下:
如果在任何一個階段找到了對應的IP地址,就會立即返回,不再繼續查詢。

       使用者於瀏覽器輸入https://www.google.com

  1. Browser Cache:瀏覽器先找自身的快取(Cache)

    找到就返回;找不到↓
     
  2. Local Hosts File:查找本機的Hosts文件

    找到就返回;找不到↓
     
  3. Local DNS Resolver Cache:瀏覽器向本機DNS Resolver發送查找www.google.com,本機DNS Resolver先查找快取。

    找到就返回;找不到,DNS Resolver就向負責.網域的Root DNS伺服器發送查詢www.google.com
     
  4. Root DNS Server找到負責.com網域的TLD DNS伺服器的地址,返回給DNS Resolver。

    DNS Resolver轉向.com網域的TLD DNS伺服器發送查詢www.google.com
     
  5. TLD DNS Server找到負責google.com網域的Authoritative DNS伺服器的地址,返回給DNS Resolver。

    DNS Resolver轉向google.com網域的Authoritative DNS伺服器發送查詢www.google.com
     
  6. Authoritative DNS Server將返回相應的IP地址給DNS Resolver。

    獲得IP地址後,將其存入Local DNS Resolver Cache快取以供以後使用。
     
  7. 返回IP地址給瀏覽器。

上述從第3點開始,可以參考下圖。


終於透過DNS得到IP位置了!

▊ IP位置 | Internet Protocol Address

IP基本原則:每台主機在網際網路上都被分配了唯一的 IP 地址。
確保連結到網際網路的設備有獨一無二的標識,確保訊息轉發到正確的目的地。

IPv4地址: 32 位元長度,能提供232個地址(約42億個)。
二進位來看,32 位元 = 32個位置可放1和0,8個位元為一個單位,分4個部分用.分開。
不過這樣的表示法太長,不便記憶。所以通常都以十進位的方法表示,
每個部份即為28 =256,可能的數字包含0~255的整數 。

補充:
電腦最小的儲存單位即1位元(bit),1 位元只可以表示0和1。
8 位元為1位元組(byte),1位元組可以表示28=256→記錄256種變化→紀錄數值0~255。

IPv6地址:128位元長度,能提供2的128次方個地址(遠遠超過IPv4的數量,數量多到幾乎不可能用盡)。
IPv6的格式是以冒號:分隔的16進位表示法呈現,分成8組,每組由4個16進位數字組成。所以每組最大是ffff

這兩個協定表面上似乎只是版本上的差異,但實際上它們是徹底完全不同的兩個協定。
它們就像中文和英文的差別,雖然都是用來溝通的語言,但其構造及語法差異極大。
也因為這樣,IPv4與IPv6不能互通,IPv4的用戶只能連線到IPv4的網站,IPv6亦然。


找到 URL 對應的 IP 位置後,瀏覽器就準備向伺服器發送請求,
但在此之前,還是有些前置作業要處理。

就是各種Protocol協定!

▊ 協定 | Protocol

為什麼要有 Protocol呢?
因為網路的封包都是由電腦來解讀的,它跟人腦最大的差別在於它是死的。
所以必須制定一套標準,讓輸入全都符合這一套格式,電腦就只要去解析這一個單一格式就好。

所以協定是確保數據在網路中準確、安全、高效地流通的基本機制。
它們提供了一種統一的語言和方法,讓不同的系統和應用能夠協同工作。

而這些協定,我們先放進TCP/IP 模型和 OSI 七層架構模型,了解每個協定的用途、扮演的角色。

OSI七层模型和TCP/IP四层模型– 标点符

▊ OSI 七層模型 | 開放式系統互聯 | Open System Interconnection

是由國際標準化組織(ISO)制定的OSI 模型,
把網路的硬體和軟體訂出7層標準,互相遵守,彼此間才能互相溝通。

假設Windows系統要連Linux網站,
這兩個不同的系統、不同的硬體,就需要遵守共同的標準,才能互相溝通。

接下來用下圖說明,依照架構來溝通的過程,來了解每層的用途。

假設今天用Outlook應用程式寫信給對方,
會從圖片左邊開始經過第一層→第七層,再透過網路線把這封信交給對方,
對方透過網路線收到後,再經過第一層→第七層,最後用應用程式打開這封信。

  • 第七層 應用層(Application Layer): 提供應用程序間的通信,包括各種應用服務和協議。
    e.g.,用Outlook寫信給對方

    ↓交給第六層
  • 第六層 表達層(Presentation Layer): 負責數據格式轉換、加密和解密等,確保兩端的應用程序能夠相互理解。
    e.g.,收到後,會做編碼(相對對方就是做"解碼")、壓縮(/解壓縮)、加密(/解密)

    ↓交給第五層
  • 第五層 會議層(Session Layer): 管理數據交換的進程,確保數據的同步。
    e.g.,協調雙方的參數

    ↓交給第四層
  • 第四層 傳輸層(Transport Layer): 提供端到端的通信,確保數據的可靠傳輸,主要有 TCP 和 UDP。
    e.g.,切割(/重組),假設資料100K切成70個封包,對方收到就會再把70個封包重組回來。
    TCP有保證,速度慢
    UDP沒保證,速度快
    有保證就是:
    1. 加序號
        e.g,封包前面加序號100、101、102,對方收到100、102會知道少了101,會請對方重傳。
    2. 加檢查位元
        e.g,對方會能確認資料沒有變質。
    3. 加ack
        e.g,對方收到會回應我有收到。
    4. 會做控制資料流
        e.g,假設對方在壅塞會請我傳慢一點。
    不管TCP、UDP都要搭配一個PORT number,
    PORT就是我要連你的什麼東西,IP只是我要連哪台電腦,
    而我們要連哪台電腦的什麼東西,就要靠port。
    e.g.,常聽到TCP 80 Port就是我要連你的網頁,21 port就是我要連你的FTP。

    ↓交給第三層
  • 第三層 網絡層(Network Layer): 處理數據包的路由和轉發,負責網絡拓撲和邏輯地址。
    加上來源和目的IP。

    ↓交給第二層
  • 第二層 資料鏈路層(Data Link Layer): 提供點對點的通信,負責錯誤檢測和校正。
    加上來源和目的MAC,然後把資料轉成訊號。

    ↓交給第一層
  • 第一層 實體層(Physical Layer): 負責傳輸比特流,處理硬件設備之間的物理連接。
    就是網路線
    • 假如是:
      雙角線,訊號就會轉成電流
      光纖,訊號就會轉成光波
      無限網路,訊號就會轉成電磁波

就這樣用網路線,連到對方的路了!

對方接下來從第一層到第七層:

收到電流後→傳給網路卡→將訊號轉成資料→交給TCP/IP→作業系統最後再交到應用程式 用outlook打開。

以上就是OSI 模型。

國際標準組織訂出網路七層標準─OSI 模型後,TCP/IP將架構簡單化。

▊ TCP/IP 四層模型 | 傳輸控制協定/網際網路協定

  • 第四層 應用層
    HTTP(HTTPS) / SMTP / FTP …
    • HTTP:用來傳輸網頁。它的傳輸層就是用TCP 80 PORT。
    • FTP:用來傳輸檔案。
    • SMTP:用來傳輸郵件。
    • DNS:網域解析。它傳輸層用UDP 53 PORT。
  • 第三層 傳輸層 (決定如何傳送資料)
    TCP / UDP
  • 第二層 網路互連層(加上收發地址)
    IP (Internet Protocol)
    e.g.,就會在前面加上來源IP, 目的IP。
  • 第一層 網路存取層(實際傳送資料)
    e.g.,路由器 / 海底電纜
    網路線幫我們把封包送出去。

【OSI 模型】 V.S. 【TCP/IP 模型】

  • TCP/IP 模型:主要應用在實際的網際網路環境中,是實際應用中發展起來的,是當今網際網路的基礎。
  • OSI 模型:主要作為一種學術上的參考,是一種理論上的模型,是由國際標準化組織(ISO)制定的,旨在標準化不同廠商的設備和協定。

了解完七層與四層網路模型後,就來看前面提到的 Protocol 網路通訊協定吧

首先決定如何傳送資料

TCP V.S. UDP

  1. TCP(Transmission Control Protocol): 
    提供可靠的數據傳輸,保障收發正常,但速度慢。
  2. UDP(User Datagram Protocol): 
    提供較快速即時的數據傳輸,但不保障收發的到,較不可靠。

▊ TCP | 傳輸控制協定 | Transmission Control Protocol

TCP 是一個保證你的封包可以被對方接收到的協定,確保雙方溝通無礙。

可以看Huli | 從傳紙條輕鬆學習基本網路概念 了解TCP三次前置作業,
而專有名詞叫做 TCP 三次握手(Three-way handshake)。

會透過三次握手來確保雙方都收發功能都正常,才會開始進行後續的資料交換。

▊ UDP | 使用者資料報協定 | User Datagram Protocol

UDP是「漏掉訊息沒差,重要的是傳輸即時性」的通訊協定。

▊ Port | 通訊埠

不管TCP、UDP都要搭配一個Port number,
IP只是我要連哪台電腦,
而我們要連哪台電腦的什麼東西,就要靠port。

  1. HTTP:預設為 80 port。
  2. HTTPS:預設為 443 port。(在網址後面加:443因為是預設的就會顯示正常)
  3. FTP:預設為 21 port。
  4. SQL Sever:預設為 1433 port。(在要連線的server name後面加非預設,1433的port)

 

TCP的實際應用Protocol

  1. HTTP(Hypertext Transfer Protocol): 
    用於網頁瀏覽,基於客戶端和伺服器器的模型。
  2. HTTPS(Hypertext Transfer Protocol Secure): 
    在HTTP的基礎上添加了安全性機制,
    使用TLS/SSL加密協定保護數據傳輸,使得中間人無法輕易解讀傳輸的資訊。
  3. FTP(File Transfer Protocol):
    用於文件的傳輸,支援文件的上傳和下載。

▊ HTTP | 超文字傳輸協定 | Hyper Transfer Protocol

HTTP通訊協定,就是在發出請求(Request)收到請求後的回傳(Response)有約定如下圖的內容格式:

用寄信來看HTTP

  1. Header → 信件標題
  2. Body → 信件內容
  3. URL → 寄件地址
  4. HTTP方法(HTTP Method) → 寄件方式
    是一種用於指定特定網路資源進行何種操作的方式。
    客戶端用HTTP Method明確地告訴伺服器它希望進行何種操作,而伺服器則可以根據請求的方法來決定如何處理請求。

    用以下動詞標準化動作:
    • GET:讀取資料
    • POST:創建新資料
    • PUT:更新資料,沒有資料就創建
    • PATCH:更新(部分)資料
    • DELETE:刪除資料
  5. 狀態碼(HTTP Status Code) → 寄件結果
    用以下狀態碼標準化結果
    • 1XX(訊息類):請求已收到,正在繼續處理。
    • 2XX(成功類)請求被成功接收並處理完成。
      • 200:成功回應
      • 204:NoContent。成功但不回傳訊息。
    • 3XX(重新定向/轉址需要採取進一步行動才能完成請求。
      • 301:成功轉址
    • 4 XX(客戶端錯誤)別人的錯該請求包含錯誤語法或無法滿足。
      • 403:Forbidden。權限不夠、授權不夠。
      • 404:NotFound。打錯網址,或資源不存在。
      • 415:UnsupportedMediaType。用了不符合的content-type
        e.g.,只收json格式,不收html。
        所以收到415 
        1. 可以先懷疑:Header裡面的content-type帶入錯了 
        2. 或是自己寫的Header和Payload 的content-type不吻合
    • 5XX(伺服器錯誤)自己的錯伺服器未能滿足明顯有效的請求。
      • 500:伺服器錯誤

 

所以用TCP協議確認雙邊都能傳出和接收訊息後

再基於TCP發出HTTP協議的請求(HTTP Request)

伺服器回傳HTTP協議的回應(HTTP Response)

瀏覽器收到回應後渲染畫面

這就是網路的基本架構。


參考資料

Huli | 從傳紙條輕鬆學習基本網路概念

北國老虎 | Ralph 拉爾夫| AppWorks School主題短講:網路

[熱門面試題] 從輸入網址列到渲染畫面,過程經歷了什麼事?

什麼是 DNS? | DNS 的工作方式

DNS 查詢流程概念筆記

How does the Domain Name System (DNS) lookup work?

DNS Hacking 之 基礎知識:DNS 運作與紀錄類型

認識IPv4與IPv6的差異

《 網路架構 》TCP/IP 四層架構 & OSI七層架構

阿彬電腦─網路基礎2- 網路七層與TCP/IP

何謂 HTTP 傳輸協定

謝謝觀看,此為新手的學習筆記整理,若有錯誤,煩請指正🙏