網路通訊筆記 01:從OSI模型到WebSocket即時通訊

更新 發佈閱讀 12 分鐘

我們前面的系列講了網頁的設計,但網頁寫出來後,但到底是如何再電腦跟電腦之間形成通訊網路?

本篇先從網路為什麼要切成七層?再介紹每一層的主要觀念,以及每個層級之間如何互動。網路的知識很瑣碎,所以我會以下的邏輯來做筆記。

  • 先給地圖(OSI模型)
  • 再說怎麼找到對象、怎麼講話(IP → TCP → DNS)
  • 最後講怎麼開口講話與後續互動(HTTP)
  • 最後講進階功能(即時通訊)

1. OSI model, TCP/IP model

網路的世界主要分層以下七層,實務面用 TCP/IP 模型來解釋,解釋之前先了解為什麼要分層?

分層的好處:

  • 某一層出問題,只修這層,不會牽連整個系統
  • 不同系統、不同廠商之間也能合作(只要遵守該層協定)

👉 OSI 七層模型:理論完整、用來教學與理解分工

👉 TCP/IP 四層模型:實務精簡、實際網路世界中比較常用

raw-image


YouTube 影片 What is OSI Model | Real World Examples

YouTube 影片 What is OSI Model | Real World Examples

2. DNS, IPv4, IPv6

有了分層,接下來我們來認識 IP 位址,像是每個網站的門牌號碼。

舉例來說,Youtube 的地址是www.youtube.com,但其實電腦不是根據這一串英文找地址,而是利用IP來找,那www.youtube.com ​是如何被轉化成IP 位置的呢?

有個默默無聞但每天被用爆的系統出現了:DNS Domain Name System(網域名稱系統)。

它的工作就是幫你把「網址」翻譯成「IP 位址」,讓你的電腦知道該去哪裡找資料,就像你只記得朋友的名字,DNS 幫你查出他的電話號碼一樣。

  • 你打 www.youtube.com,但其實你是跟電腦說:「請幫我找這個網站在哪裡」
  • 電腦看不懂網址(URL),它要先問 DNS:「請問 youtube.com 的地址是?」
  • DNS 查到對應的 IP(像是 142.250.206.206)才有辦法真正去找這個網站

小知識補充:當網頁越來越多,地址不夠用,就出現 IPv4 是數字,IPv6 更長、更像亂碼


IPv4 是目前最常見的 IP 格式,長這樣:192.168.1.1 (我們公司的內部網頁就是類似這樣的編碼)

  • 四組數字,每組 0~255(因為是 8 位元)
  • 全世界最多只能分出大約 42 億個 IP(2 的 32 次方)

聽起來很多?其實超快就不夠用了!你家 Wi-Fi 至少三台裝置(手機、平板、電視),全世界上網的冰箱、汽車、感測器愈來愈多,所以 IPv4 早就被用光了,這時候 IPv6 誕生了。

IPv6 是 IPv4 的進化版,長得像這樣:

2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 超~長,有 128 位元
  • 可以分出大約 是 340×10³⁶ 個 IP,等於,地球上每一粒沙子都能有幾百個 IP,根本用不完

3 Port (system port, registered port, dynamic port)

有了地址,下一步介紹「通訊埠」,誰開在哪個門、用哪一個服務,是 port 在負責的。Network Ports Explained 可以參考這個影片。

不過IP位置就像一座大樓的地址,你拿到IP位置還是不知道要去哪一層樓哪個部門,所以要靠port來更具體描述。一台電腦(或伺服器)可以同時提供很多服務(Web、FTP、Email),就靠不同的 port 來區分。

不是「直接連到 IP」,而是「透過某個 port 連到 IP 裡的某個服務」。

192.168.0.100:80,意思是:192.168.0.100:我家地址:80:我家的「網站服務部門」(HTTP)

raw-image

那 FTP 是什麼?跟你平常用的 Google Drive 有什麼不一樣?

FTP(File Transfer Protocol) 是一種舊但還常用的「檔案傳輸協定」,專門讓你:

  • 上傳檔案到伺服器
  • 從伺服器下載檔案

以前很多公司都有自己的 FTP Server,會用帳號密碼登入上傳資料,長得像這樣:

ftp://username@ftp.yourcompany.com:21

📌 預設使用 port 21

伺服器收到Port就會召喚出功能(網頁或檔案...)

伺服器收到Port就會召喚出功能(網頁或檔案...)

IP + Port 是不是也適用在「內部系統」跟「外部供應商」連接?

完全適用!👍

✅ 例子1:外部供應商的系統

假設供應商提供一個報價查詢 API:

api.vendor.com:443

→ 表示:走的是 HTTPS(port 443)協定去 call API

✅ 例子2:內部系統之間對接

你們內部有兩台伺服器:

  • A 是 ERP 系統:192.168.10.5,提供 API 在 port 8080
  • B 是資料庫:192.168.10.8,開在 port 3306(MySQL)

→ A 如果要叫 B,會說:「我要連 192.168.10.8 的 port 3306」

公司的防火牆(Firewall)有時會開特定 port 的原因:不然廠商的軟體就連不進來了。

雖然 Port 就是個號碼,但其實它的編號範圍是有分類的,主要分三種:

1. Well-known / System Ports(0–1023)

被固定保留給超知名服務用。例如:當你瀏覽器打開 https:// 時,電腦默默就在找 port 443

  1. Registered Ports(1024–49151)給軟體開發商。例如MySQL 資料庫的是

3306

  1. Dynamic / Private Ports(49152–65535) 個人可以使用,暫時的port。

4 TCP & UDP +TCP的三次握手、四次揮手

知道哪個門後,那資料怎麼送?介紹兩種傳送快遞員:一個謹慎、一個快速。

TCP(Transmission Control Protocol):傳輸控制協定

UDP(User Datagram Protocol):使用者資料報協定

raw-image

連線導向(connection-oriented)代表什麼?

👉 在傳資料前,兩邊要先「握手確認」彼此都在線、都準備好

這就像你打電話之前要確定對方有接起來才開始講話,而 UDP 就像你直接講一句話扔出去,也不管對方有沒有聽到,比較像廣播節目。

從傳紙條輕鬆學習基本網路概念(我覺得這篇寫的比較好XD)

一次搞懂 5G!三大特性:高速度、低延遲、多連結

🤝 三次握手:TCP 的暖男開場白

TCP 傳資料前,會先來個三次握手(3-way handshake)

  1. A:我想跟你聊天(SYN)
  2. B:好啊我準備好了,你呢?(SYN-ACK)
  3. A:我也準備好了(ACK)

這樣才開始傳資料~

這確保了:雙方都在線、都同步準備好、才不會白講。回應前面的講解,現在對應到 OSI 模型:傳輸層(Layer 4)的行為

🖐四次揮手:TCP 的禮貌結束

傳完資料要結束連線,也會:

  1. A:我講完了(FIN)
  2. B:我知道了(ACK)
  3. B:我也講完了(FIN)
  4. A:我收到啦(ACK)

這就是 四次揮手(4-way handshake),確保雙方都有好好說再見 ✋

那 UDP 到底為什麼不用這些?

因為它不管這麼多!

  • 不握手、不確認、有就丟、沒收到算了
  • 很適合「不能慢但可以漏」的場景,例如:
    • 直播影片(漏幾幀觀眾也看不出來)
    • 語音通話(慢一秒才聽到反而尷尬)

📦 傳輸方式差異:Stream vs Datagram

協定傳輸型態說明 TCPStream(連續資料流)像水管一樣資料一條線流過去,送到才會顯示 UDPDatagram(資料封包)一包一包丟出去,像是傳紙飛機,丟了就丟了

以程式開發的角度來說,

  • TCP 用起來比較簡單,因為它幫你管順序、丟包、重送
  • UDP 開發起來更輕巧,但你要自己處理封包順序、遺失問題(常搭配補強機制)

前面我們搞懂了 TCP 和 UDP 是怎麼把資料安全地送出去,

但你可能會想問:「那我在滑網頁時,實際上到底傳了什麼?」

答案就是 —— HTTP request

瀏覽器跟伺服器的對話,其實就是用 GET、POST、PUT 這些「請求方法」在溝通的。有點類似像OK這個手勢是世界的共通手勢。

TCP 把資料穩穩送到伺服器門口之後,實際開口說話的「語言」,就是 HTTP 協定。

5 HTTP request (GET, POST, PUT, PATCH, DELETE)

raw-image

以上是概念,先舉個最簡單的GET,在本機也可以呈現

用 JavaScript(或其他語言)在 Visual Studio Code 操作,你可以寫一段程式碼,然後在 VS Code 執行,例如用 fetch():下一篇我會再介紹Javascipt

raw-image


fetch('https://jsonplaceholder.typicode.com/posts') //測試資料
.then(res => res.json())
.then(data => console.log(data));

6 HTTP status code (1XX, 2XX, 3XX, 4XX, 5XX)

跟網頁要完資料後,應該要不少人遇過404 not fund的經驗,究竟404是什麼呢?

HTTP 狀態碼是伺服器的「回覆信號」,告訴你請求有沒有成功、或是哪裡出錯。

它總共有五大類,每類的第一個數字代表狀態分類

raw-image

前面我們提到 HTTP 請求與回應,但你有沒有想過: 「每次打開網頁,都要重複建立連線、送 request,再關掉連線,是不是很沒效率?」

對,這就是早期 HTTP/1.0 的問題。

為了改善這件事,HTTP/1.1 推出了 keep-alive,讓我們可以重複利用同一條連線,不用每次都重新握手。

在 HTTP/1.0 時代,每一筆請求都會:

  1. 建立連線(TCP 三次握手)
  2. 傳資料
  3. 關閉連線

問題:如果你一頁要載入 50 張圖片,50 次握手 CPU 就爆炸了!

HTTP keep-alive 的做法是這樣:

  • 建立一條 TCP 連線後,不馬上關掉
  • 之後的請求可以「共用」這條連線來處理多個 request

這樣就像是你跟店員講完話,不掛電話,直接順便再問:「再幫我加一杯奶茶。」

現在的 HTTP/1.1 預設就支援 keep-alive(不需額外設定)


不過即使有了 keep-alive,HTTP 還是「一次一來一回」,而且是單向的。如果你想做的是 聊天室、即時對戰遊戲、股票跳動、物聯網感測資料 的技術,你會發現 keep-alive 還是不夠用。

所以我們下一步要介紹的就是:WebSocket!

7 WebSocket & Socket.io

WebSocket 是一種網頁協定,讓瀏覽器跟伺服器之間可以:

雙向溝通(你可以講話,也可以被伺服器主動叫)、連線常駐(不會講完一句話就掛掉)、即時互動(沒有延遲感,不用每次都重新請求)

和 HTTP 不同,WebSocket 一開始會透過 HTTP 建立「握手」連線,成功後就升級成 WebSocket 連線,之後就不再是傳統 HTTP 行為。

那 Socket.io 又是什麼?

Socket.io 是一個 JavaScript 函式庫,可以更簡單地在前端 + 後端建立 WebSocket 通訊。在寫程式的時候可以用socket.on...

細節可以參考這個影片手把手教學,Building a Chat App - Intro to WebSockets

Socket.io 可以做到

  • 自動重連斷線
  • 支援事件(你可以自訂「訊息」、「通知」、「打招呼」等)
  • 前端和後端都可以用 JS 操作,超直覺!

總之,WebSocket 是一種協定(protocol)就像網路對講機,Socket.io是JavaScript 工具庫,幫你安裝好對講機、設定頻道、開機自動重連。

補充說明:

Q: 瀏覽器本來就是透過 HTTP 溝通的,那 WebSocket 是怎麼接進來的?

A: WebSocket 一開始也是走 HTTP,但會在第一步請求時「提出升級要求」。如果伺服器答應了,就從 HTTP 協議「升級」成 WebSocket 連線!


以上就是網路連線的筆記,下一篇預計學習行動通訊網路和Javascript



留言
avatar-img
留言分享你的想法!
avatar-img
越南放大鏡 X 下班資工系
46會員
92內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/03/23
學習CSS的技巧與工具,包含偽類、遊標樣式、絕對單位和相對單位、元素顯示與隱藏、Flexbox、響應式設計(RWD)、Bootstrap和Tailwind等,幫助你設計出漂亮且在不同螢幕上都好用且順眼的網頁。
Thumbnail
2025/03/23
學習CSS的技巧與工具,包含偽類、遊標樣式、絕對單位和相對單位、元素顯示與隱藏、Flexbox、響應式設計(RWD)、Bootstrap和Tailwind等,幫助你設計出漂亮且在不同螢幕上都好用且順眼的網頁。
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
Thumbnail
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
  在開始操作Web Service之前,要先做一些前置作業IIS的安裝,再開始建置Web Service相關內容,最後就是連線測試。   IIS(Internet Information Services)是網際網路資訊服務,可以讓網站使用HTTP/HTTPS、FTP/FTPS、SMTP 等等的
Thumbnail
  在開始操作Web Service之前,要先做一些前置作業IIS的安裝,再開始建置Web Service相關內容,最後就是連線測試。   IIS(Internet Information Services)是網際網路資訊服務,可以讓網站使用HTTP/HTTPS、FTP/FTPS、SMTP 等等的
Thumbnail
一、什麼是Web Service?   簡單說就是「服務」的概念,人與人間、電腦與電腦間都是一樣的,一個是人與人的一來一回交流,媒介是語言中文,另一個則是個人電腦與伺服器的交流,媒介是HTTP/Internet,那麼有了媒介,就會有共同格式才能做
Thumbnail
一、什麼是Web Service?   簡單說就是「服務」的概念,人與人間、電腦與電腦間都是一樣的,一個是人與人的一來一回交流,媒介是語言中文,另一個則是個人電腦與伺服器的交流,媒介是HTTP/Internet,那麼有了媒介,就會有共同格式才能做
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
Thumbnail
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
Thumbnail
第一層(Layer1) - 實體層(Physical Layer) 實體層主要是用來定義設備裝置之間位元資料傳輸,也就是透過物理線材連接至其他實體設備,傳遞0和1的數位訊號。 實體層包括了針腳、電壓、線纜規範、集線器、中繼器、網卡、主機介面卡等。 第二層(Layer2) - 資料連結層(
Thumbnail
第一層(Layer1) - 實體層(Physical Layer) 實體層主要是用來定義設備裝置之間位元資料傳輸,也就是透過物理線材連接至其他實體設備,傳遞0和1的數位訊號。 實體層包括了針腳、電壓、線纜規範、集線器、中繼器、網卡、主機介面卡等。 第二層(Layer2) - 資料連結層(
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News