1. 網際網路運作原理

網際網路是什麼?是WWW(全球資訊網路)嗎?答案是不是,這兩個是完全不同的東西,網際網路是指偏向物理層面的,接下來就讓我們來瞭解一下資料如何交換,如何找到你是誰並給你你要的資料?

IP位置

在網際網路的世界中,IP(Internet Protocol,網際網路協定)就是網路上的郵政系統

你今天在google搜尋「貓咪 圖片」,google的伺服器蒐集好了可愛貓咪的圖片準備要回傳給你,不過google 的伺服器怎麼知道你是誰?

而「IP 地址(IP Address)」,就是每台設備的實體門牌號碼。無論是你的手機、筆電、還是 Google 的伺服器,只要想連上網際網路,都必須擁有一個獨一無二的 IP 地址,否則網路上的資料封包就不知道該送去哪裡。

  • 定址(Addressing): 為網路上的每個設備編發一個獨一無二的地址(門牌號碼)。
  • 路由(Routing): 決定資料封包(信件)要經過哪些路由器(郵局),才能最快抵達目的地。

IP由四組 0 到 255 的數字組成,中間用點「.」隔開。(192.168.1.1140.131.x.x),它是 32 位元(32-bit)的架構,總共可以提供約 43 億個 地址。

43 億個聽起來很多,但在人手一機、加上智慧家電(物聯網)的時代,IPv4 地址早在幾年前就已經「用完了!」。

IPv4 與 IPv6

為了解決 IPv4 地址不夠用的危機,聰明的科學家開發了全新的 IPv6,改用 16 進位制,由八組數字與字母組成,中間用冒號「:」隔開 (2001:0db8:85a3:0000:0000:8a2e:0370:7334 )容。

由於它是 128 位元(128-bit)的架構,可以提供的地址數量高達 3.4乘10的38次方 個。

這個數量大到「可以給地球上的每一粒沙子都分配一個獨立的 IP 地址」,徹底解決了地址不足的問題。

DNS

雖然解決了不夠用的問題,但新的問題也隨之而來,那就是人類其實不擅長記一大串的數字,於是人們就開始想:「我有沒有辦法將IP轉為文字方便我記憶呢?」DNS由此誕生。

DNS (網域名稱系統,Domain Name System) 是網際網路的電話簿。將人類易讀的網域名稱(例如 google.com)轉換為機器能讀取的 IP 位址(例如 142.250.190.46)。

分布式階層架構

DNS 伺服器不是只有一台,而是由上到下分成好幾層:

  1. DNS 快取伺服器(預設/本地 DNS): 就像你身邊的萬事通朋友(通常由 ISP 如中華電信,或 Google 的 8.8.8.8 提供)。他會幫你跑腿去外面問路,而且會把問到的答案記下來(快取),下次你再問同一個網址,他就能秒回答。
  2. 根域名伺服器(Root DNS Server): 網路世界的最高權威(全世界只有 13 組群組)。它不知道具體 IP,但它知道「去哪裡找下一層」。
  3. 頂級域名伺服器(TLD DNS Server): 負責管理網址的結尾,例如 .com.org.tw 等。
  4. 授權域名伺服器(Authoritative DNS Server): 終點站。這台伺服器由網站的主人自己管理(或託管),上面紀錄了該網站真正的 IP 地址。

我們來實際跟著流程走一次!

假設你在瀏覽器輸入了學校官網 www.ntub.edu.tw,而本地 DNS 過去從來沒有紀錄(第一次查詢),整個「問路」的過程會如下運行:

  • 第一步(問身邊的朋友): 電腦問「本地 DNS」:「你知道 www.ntub.edu.tw 的 IP 是多少嗎?」 本地 DNS 翻了翻口袋發現沒有紀錄,於是說:「你等等,我幫你去問。」
  • 第二步(向最高權威求助): 本地 DNS 跑去問全球的「根域名伺服器 (Root)」。 根域名伺服器說:「我不知道具體 IP,但我知道這是 .tw 結尾的,你去問負責管理 .tw 的頂級域名伺服器吧!」(給予方向)
  • 第三步(縮小範圍到國家/類型): 本地 DNS 接著跑去問「.tw 頂級域名伺服器」。 頂級域名伺服器說:「我也不知道具體 IP,但我知道 ntub.edu.tw 是由北商大自己管的,你拿著這張地址,去問他們的授權域名伺服器。」
  • 第四步(抵達終點站取得答案): 本地 DNS 來到最後一站——北商大的「授權域名伺服器」。 學校的伺服器自豪地說:「沒錯!這是我家的網站,它的 IP 地址是 140.131.x.x!」
  • 第五步(回報並紀錄): 本地 DNS 把這個 IP 抄下來,急忙跑回去告訴電腦,同時自己也偷偷背起來(快取),方便下一次別人問。 最後,瀏覽器拿到 140.131.x.x,終於可以順利連上學校官網了!

應用層協定

應用層協定(Application Layer Protocols)是 OSI 網路七層模型與 TCP/IP 模型的最頂層,直接與應用程式互動。

1. 網頁瀏覽:HTTP / HTTPS

  • HTTP(超文字傳輸協定): 全球資訊網(WWW)的基石。定義了瀏覽器要怎麼向網頁伺服器請求網頁檔案(HTML、CSS、JavaScript),以及伺服器如何回應。
  • HTTPS(安全超文字傳輸協定): HTTP 的安全加密版。在傳輸過程中加入 SSL/TLS 加密機制,防止信用卡號、密碼等敏感資料被中途竊聽或竄改。

2. 檔案傳輸與網路管理:FTP / DNS / DHCP

  • FTP(檔案傳輸協定): 專門用來在兩台電腦之間「上傳」與「下載」檔案的協定。
  • DNS(網域系統協定): (前一章已提及)負責將網址翻譯成 IP 位址的無名英雄。
  • DHCP(動態主機設定協定): 自動發配 IP 地址的裝置。當你的手機連上星巴克的 Wi-Fi 就能立刻上網,就是 DHCP 自動幫你分配好 IP、子網路遮罩和閘道器。

3. 電子郵件:SMTP / POP3 / IMAP

  • SMTP(簡單郵件傳輸協定): 專門負責把郵件「寄出去」(寄到收件人的郵件伺服器)。
  • POP3 / IMAP: 負責把郵件「收進來」到手機或電腦裡。
    • POP3: 把郵件下載到本地電腦後,通常會把伺服器上的備份刪除(適合單一裝置)。
    • IMAP: 讓郵件留在伺服器上,手機、筆電同步讀取(現代主流,如 Gmail 運作方式)。

4. 遠端控制:SSH / Telnet

  • SSH(安全外殼協定): 讓工程師可以用加密、安全的方式,遠端連線並控制放在機房的伺服器。
  • Telnet: 早期常見的遠端連線協定,但因為所有資料(含密碼)都是明碼傳輸,現已沒落(台灣著名的 PTT 批踢踢 BBS 仍在使用此協定)。

HTTP協定

拿回前面的例子,當你今天去google搜尋「貓咪 圖片」時,實際上對電腦來說發生了什麼呢?

HTTP 請求 – Request

當使用者透過瀏覽器向伺服器要資料時,需要發出Request (請求),請求的格式如下:

  • 請求行(Request Line): 包含方法、路徑與協定版本。
    • 範例:GET /index.html HTTP/1.1
  • 請求標頭(Headers): 瀏覽器的自我介紹與額外要求(鍵值對格式)。
    • Host: www.example.com(我要找哪台主機)
    • User-Agent: Mozilla/5.0...(我是什麼瀏覽器)
    • Accept-Language: zh-TW(我看得懂繁體中文)
  • 空行(Blank Line): 必須存在,用來告訴伺服器「標頭結束了,下面是內容」。
  • 請求主體(Body): 如果是 GET 通常是空的;如果是 POST(如送出登入表單),這裡就會存放帳號密碼等資料。

HTTP 回應 – Response

接著當伺服器處理完,回傳給瀏覽器的封包長這樣:

  • 狀態行(Status Line): 協定版本與狀態碼。
    • 範例:HTTP/1.1 200 OK
  • 回應標頭(Headers): 伺服器的自我介紹與檔案設定。
    • Content-Type: text/html(我回傳的是網頁 HTML 檔案喔!)
    • Content-Length: 1234(這個檔案的大小)
    • Server: Apache(我是 Apache 伺服器)
  • 空行(Blank Line)
  • 回應主體(Body): 最重要的部分。網頁的 HTML 原始碼、圖片的二進位資料、或是 API 的 JSON 資料都放在這裡,瀏覽器拿到後才會把它渲染成我們看到的精美網頁。

HTTPS

假設我們向google 發出了request,我們的request會跨越大海去到google的伺服器去跟他要資料,那如果駭客透過監聽訊號,監聽這一段訊息呢?如果只是貓咪圖片這種無關緊要的事,那好像還好,但如果今天你發送的request中包含信用卡號等資訊呢?

因此誕生了HTTPS,HTTPS是密文傳輸,在應用層與傳輸層之間加了一層加密防護罩。這樣駭客就算監聽到了你的信用卡號,也只會得到一堆亂碼! 而HTTPS是如何實現加密這件事的呢?

TLS 交握

TLS 交握(TLS Handshake)是客戶端(如瀏覽器)與伺服器在傳輸資料前建立安全連線的過程。

有了TLS,雙方能驗證彼此身份、協商加密演算法,並安全地交換對稱式金鑰,確保後續傳輸的隱私與完整性,整個流程大致如下:

第一步:打招呼與開條件 (Client Hello)

瀏覽器(客戶端)率先向伺服器發送問候,並遞出一份自備清單:

  • 「嘿!我支援 TLS 1.2 版本。」
  • 「這是我看得懂的密碼演算法清單(密碼套件)。」
  • 「順便附上一串我自己產生的隨機亂數(Client Random)!」

第二步:回應與亮出身份證 (Server Hello & Certificate)

伺服器收到後,挑選好溝通方式,並亮出自己的大名與證明:

  • 「收到!那我們就用 TLS 1.2 和你清單上的 A 演算法來溝通。」
  • 「附上我這邊產生的隨機亂數(Server Random)。」
  • 【憑證】「對了,這是公正第三方(CA 機構)發給我的數位憑證(身份證),證明我真的是 Google 官方,不是詐騙網站!」

第三步:打造鑰匙的雛形 (Client Key Exchange)

一旦確認伺服器不是冒牌貨,瀏覽器就要開始動手做鑰匙了:

  • 瀏覽器在後台默默產生第三個亂數,叫做預主金鑰(Pre-Master Secret)
  • 瀏覽器拿出憑證上的「伺服器公鑰」,把這個預主金鑰鎖起來,大方地傳給伺服器。

第四步:原神! 啟動!

伺服器用私鑰解開密碼,順利拿到預主金鑰。此時,奇蹟發生了:

  • 現在,瀏覽器與伺服器的手上,同時都擁有了三個元素:Client Random + Server Random + Pre-Master Secret
  • 雙方在各自的後台,用這三個元素各自運算出同一把「對稱加密金鑰(Session Key)」。
  • 雙方互相發送 Finished 封包,宣示:「密鑰打造完成!接下來我們說的每句話,都要用這把鑰匙鎖進保險箱囉!」

交握大功告成!接下來,你在網頁上輸入的信用卡號,就會被這把 Session Key 狠狠鎖上,化作 request 跨越大海平安送達。


小結

講到這,你已經對網際網路的基礎運作原理有了一定的了解,接著我們就繼續前往瀏覽器的世界~!