Network
OSI 七層協議
- Layer 7 - Application - HTTP/FTP/gRPC
- Layer 6 - Presentation - Encoding, Serialization , 加密解密
- Layer 5 - Session - Connection establishment, TLS , 全雙工或者半雙工
- Layer 4 - Transport - UDP/TCP (port)
- Layer 3 - Network - IP > Datagram
- Layer 2 - Data link - Frames, Mac address Ethernet
- Layer 1 - Physical - Electric signals, fiber or radio waves
Router
- 路由器
- 用於切割網段, 定義不同的網路段(連接不同網段)
Socket
Socket 是一種用於在網路上進行通訊的程式設計介面(API)。它可以在不同電腦之間建立連接,使它們能夠進行資料的傳輸。Socket 實際上是一個抽象層,允許應用程式通過它來訪問底層的網路協議,例如 TCP 或 UDP。
在網路應用程式中,Socket 扮演著幾個重要角色:
- 建立連接:Socket 允許兩個或多個應用程式建立連接,以便在它們之間進行通訊。這個連接可以是單向的或雙向的,取決於應用程式的需求。
- 資料傳輸:一旦連接建立,Socket 允許應用程式在這些連接上傳送和接收資料。這些資料可以是文本、圖片、音訊等等,具體取決於應用程式的需要。
- 錯誤處理:Socket 還負責處理在通訊過程中出現的錯誤。這些錯誤可能包括連接失敗、資料丟失或網路中斷等,Socket 會負責處理這些情況並適當地通知應用程式。
- 關閉連接:最後,當通訊結束時,Socket 負責關閉連接。這樣可以釋放資源並確保沒有未完成的連接在系統中留下。
Layer 2 Protocols
ARP
- 操作在第二層(資料鏈路層)和第三層(網絡層)之間。它用於將 IP 地址轉換為對應的物理地址(MAC 地址)。
arp -a
Layer 3 Protocols
IP
-
a.b.c.d/x (a.b.c.d are integers) x is the network bits and remains are host
-
Subnet mask is used to determine whether an IP is in the same subnet
-
Private IP 範圍:
- Class A 10.0.0.0 ~ 10.255.255.255
- Class B 172.16.0.0 ~172.31.255.255
- Class C 192.168.0.0 ~ 192.168.255.255
-
子網裡面可以互相溝通、子網和子網之間需透過 Router 溝通
10.0.1.1 就不能和 10.0.2.4 溝通 子網之間的通信需要透過路由器(Router)來實現,因為交換器(Switch)主要在同一子網內進行數據傳輸。家用環境中的「路由器」通常內建交換器功能,可以處理子網間的路由以及網內數據交換。
-
IP 如果要進入網路需要有公開 IP,就需要透過 Router 出去。
-
子網域遮罩
-
DHCP
-
CIDR 表示法
ICMP
- Layer 3 Protocol
- 檢測網路是否有通?
ping
traceroute
*** NAT: 將私有 IP 與公有 IP 做對應、轉換。介接第三層與第四層的「技術」
Layer 4 Protocols
UDP
-
Layer 4 Protocol
-
Stateless
-
有 Port 的概念
-
Use cases: Video Call、WebRTC、DNS Query
-
好處:
- 低延遲:由於 UDP 不進行連接建立、維護或終止,它的延遲比 TCP 更低,非常適合要求實時性的應用,如視頻會議和線上遊戲。
- 簡單高效:UDP 協議的頭部開銷小,只有 8 個字節,相比 TCP 的 20 個字節(不包括選項),這使得網絡通訊更加高效。
- 支持廣播和多播:UDP 可以支持廣播和多播,使得同時向多個目標發送數據成為可能,適用於一些特定的應用場景,如實時信息發布。
- 無連線狀態:UDP 是無連線的,這意味著它不需要在通訊雙方之間建立和維護狀態,這對於那些不需要連線狀態,或者由應用層自己控制狀態的應用來說是有好處的。
-
壞處:
- 不可靠傳輸:UDP 不保證數據包的順序、重複或丟失,也不會對丟失的數據包進行重傳,這可能導致應用層需要自行處理這些問題。
- 無流量控制和擁塞控制:UDP 不進行流量控制和擁塞控制,如果網絡狀態不佳,過多的 UDP 流量可能會導致網絡擁塞,進一步影響數據的傳輸效率。
- 安全性問題:UDP 較少內建安全特性,比如數據加密和身份驗證,這可能需要應用層或上層協議來補充實現。
- 無確認機制:由於 UDP 缺乏數據包確認機制,應用程序無法直接知道數據是否成功到達目的地,這在某些對數據傳輸可靠性有較高要求的應用中可能是一個限制。
-
UDP Server Example
import dgram from "dgram";
const socket = dgram.createSocket("udp4");
socket.bind(5555, "127.0.0.1");
socket.on("message", (msg, info) => {
console.log(`message: ${msg} from ${info.address}:${info.port}`);
});
存擋成 xxx.mjs Tip: .mjs 檔案預設支持 import 和 export 語法用於 ECMAScript 模組,而 .js 檔案預設為 CommonJS 模組使用 require 和 module.exports 語法,除非透過配置改為支持 ECMAScript 模組。
nc -u 127.0.0.1 5555
TCP
- Layer 4 Protocol
- Standard for transmission control protocol
- connection & requires handshake
- stateful
- TCP 具有 Multiplexing
- TCP 可以重传丢失的数据段,以确保数据的完整传输。
- use case: remote shell ,web communication ,database connection
- Properties:
- (Receiver) Flow control : TCP 中的一個機制,用來確保發送端不會一次性傳送太多資料給接收端,以避免網路擁塞和資料丟失。
- (Sender) Congestion Control: TCP 協議中的一個機制,用於監控網路上的擁塞情況,並調整傳輸速率,以避免過多的數據流量導致網路擁塞,保持網路的穩定性和效率。(Two algorithms: Slow Start + Congestion Avoidance)
TCP Connection
- Connection is a Layer 5 (session)
- Connection is an agreement between client and server
- Must create a connection to send data
- Connection is identified by 4 properties
- SourceIP-SourcePort
- DestinationIP-DestinationPort
Layer 7 Protocols
DNS(Domain Name System)
-
應用層 Layer 7 協議
-
定義:DNS 是一個用於將網站域名轉換為對應的 IP 地址的分散式命名系統。它充當了網際網路上的「電話簿」,讓計算機可以根據網站域名找到並連接到相應的網站。
-
運作原理:
- 請求發送:用戶在瀏覽器中輸入網站域名。
- 本地 DNS 查詢:計算機首先查看本地 DNS 快取,如果沒有找到記錄,則向本地 DNS 伺服器發送請求。
- DNS 解析:本地 DNS 伺服器進行 DNS 解析,向其他 DNS 伺服器發送遞歸查詢,逐級尋找目標域名的 IP 地址。
- 結果返回:一旦找到目標域名的 IP 地址,本地 DNS 伺服器將結果返回給用戶的計算機,同時將結果保存在本地快取中。
-
協議層級:在 OSI 模型中,DNS 通常被歸類為應用層協議,因為它主要用於應用程序之間的通信和資訊交換。
-
DNS 解析過程的優化:為了加快域名解析速度,常見的做法是使用本地 DNS 快取,將最近解析的結果保存在本地。一些瀏覽器和作業系統還會使用預先取得的 DNS 結果,以加速域名解析過程。
-
DNS 服務的重要性:DNS 是互聯網基礎設施中至關重要的一部分,它確保了網絡中的各種服務可以被正確定位並訪問。沒有 DNS,用戶將需要記住大量的 IP 地址才能訪問網站,這對於網絡的使用和發展是非常不方便的。
-
安全性考慮:DNS 的安全性問題也是值得關注的,包括 DNS 劫持、DNS 欺騙等攻擊手法。這些攻擊可能會導致用戶被導向惡意網站或服務。
-
擴展性與分散式特性:DNS 的分散式設計使得它能夠應對網絡規模的不斷擴大,同時提供高效的解析服務。
DNS over HTTPS(DoH)和 DNS over TLS(DoT):近年來,隨著對隱私和安全性的關注增加,一些新的 DNS 加密協議被開發出來,以確保 DNS 查詢的私密性。
nslookup , dig
- DNS Record Settings
- A
- MX
- TEXT
- CNAME
DNS resolver:
它是 DNS 系統中的一個元件,用於接收和解析由用戶發送的域名查詢請求。 負責向 DNS 系統中的其他伺服器發送請求,以找到該域 名對應的 IP 地址。
- DNS 解析器的角色: DNS 解析器是一個關鍵的元件,它位於網絡中的客戶端設備(例如個人電腦、手機等)或 DNS 伺服器上。當用戶輸入網站的域名時,解析器負責發送 DNS 查詢並處理相應的回應。如果解析器本身無法解析查詢,它將向上層 DNS 伺服器發送遞歸查詢,直到找到對應的 IP 地址。
HTTP
- 請求 & 回應(status code)
🔸 HTTP/1.1(1997)
- 基於 TCP 協定(三次握手),每次請求對應一個回應,請求需排隊執行,容易造成 隊頭阻塞(Head-of-line blocking)。
- 引入
keep-alive,讓多個請求可共用同一條 TCP 連線,減少連線開銷,但仍然是 串行傳輸。 - 嘗試使用 管線化(Pipelining) 來提升效率:允許在同一條連線中「連續送出多個請求」,但如果回應順序出錯會導致整體失敗,多數瀏覽器已不再支援。
- 前端優化技巧(為減少請求次數):
- 使用 Sprite 精靈圖 將多張小圖片合併成一張。
- 使用 Data URL(Base64 編碼) 將小圖嵌入 CSS 或 HTML 中。