本文重點:
1. 在瀏覽器輸入網址按下Enter後,背後發生哪些事情?
2. 會提到:網域名稱系統(DNS)、IP 位置、TCP/IP四層架構、超文字傳輸協定(HTTP)、檔案傳輸協定(FTP)、傳輸控制協定(TCP)、使用者資料報協定(UDP)、通訊埠(Port)。
在瀏覽器輸入網址後,會經過以下步驟:
- 網址被DNS網域解析成電腦看得懂的IP位置
- 先用TCP協議確認雙邊都能傳出和接收訊息
- 再發出HTTP協議的請求(HTTP Request)
- 伺服器回傳HTTP協議的回應(HTTP Response)
- 瀏覽器收到回應後渲染畫面
(用英文來說)
After entering a URL in the browser:
- The URL is resolved into an IP address through DNS resolution.
- TCP is used to establish a connection and ensure that both the client and server can send and receive messages.
- An HTTP request is sent to the server. This request includes the HTTP header and body.
- 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).
- 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位址。
網域名稱的組成:
- 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
- Browser Cache:瀏覽器先找自身的快取(Cache)
找到就返回;找不到↓
- Local Hosts File:查找本機的Hosts文件
找到就返回;找不到↓
- Local DNS Resolver Cache:瀏覽器向本機DNS Resolver發送查找
www.google.com
,本機DNS Resolver先查找快取。
找到就返回;找不到,DNS Resolver就向負責.網域的Root DNS伺服器發送查詢www.google.com
↓
- Root DNS Server找到負責
.com
網域的TLD DNS伺服器的地址,返回給DNS Resolver。
DNS Resolver轉向.com
網域的TLD DNS伺服器發送查詢www.google.com
↓
- TLD DNS Server找到負責
google.com
網域的Authoritative DNS伺服器的地址,返回給DNS Resolver。
DNS Resolver轉向google.com
網域的Authoritative DNS伺服器發送查詢www.google.com
↓
- Authoritative DNS Server將返回相應的IP地址給DNS Resolver。
獲得IP地址後,將其存入Local DNS Resolver Cache快取以供以後使用。
- 返回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 七層模型 | 開放式系統互聯 | 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
- TCP(Transmission Control Protocol):
提供可靠的數據傳輸,保障收發正常,但速度慢。 - 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。
- HTTP:預設為 80 port。
- HTTPS:預設為 443 port。(在網址後面加
:443
因為是預設的就會顯示正常) - FTP:預設為 21 port。
- SQL Sever:預設為 1433 port。(在要連線的server name後面加非預設
,1433
的port)
TCP的實際應用Protocol:
- HTTP(Hypertext Transfer Protocol):
用於網頁瀏覽,基於客戶端和伺服器器的模型。 - HTTPS(Hypertext Transfer Protocol Secure):
在HTTP的基礎上添加了安全性機制,
使用TLS/SSL加密協定保護數據傳輸,使得中間人無法輕易解讀傳輸的資訊。 - FTP(File Transfer Protocol):
用於文件的傳輸,支援文件的上傳和下載。
▊ HTTP | 超文字傳輸協定 | Hyper Transfer Protocol
HTTP通訊協定,就是在發出請求(Request)和收到請求後的回傳(Response)有約定如下圖的內容格式:
用寄信來看HTTP
- Header → 信件標題
- Body → 信件內容
- URL → 寄件地址
- HTTP方法(HTTP Method) → 寄件方式
是一種用於指定特定網路資源進行何種操作的方式。
客戶端用HTTP Method明確地告訴伺服器它希望進行何種操作,而伺服器則可以根據請求的方法來決定如何處理請求。
用以下動詞標準化動作:- GET:讀取資料
- POST:創建新資料
- PUT:更新資料,沒有資料就創建
- PATCH:更新(部分)資料
- DELETE:刪除資料
- 狀態碼(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)
瀏覽器收到回應後渲染畫面
這就是網路的基本架構。
參考資料
北國老虎 | Ralph 拉爾夫| AppWorks School主題短講:網路
How does the Domain Name System (DNS) lookup work?
DNS Hacking 之 基礎知識:DNS 運作與紀錄類型
謝謝觀看,此為新手的學習筆記整理,若有錯誤,煩請指正🙏