網路資料傳輸仰賴各種協定,其中 UDP 適用於低延遲、高效率但不要求可靠性的場景,例如串流媒體。反之,TCP 則提供可靠的連線和錯誤校正,適用於網頁瀏覽等需要確保資料完整性的應用。HTTP 使用明文傳輸,而 HTTPS 則透過 SSL/TLS 加密保障資料安全,已成為現代網站的標準。DNS 則負責將網域名稱解析為 IP 地址,其快取機制有效提升網路效率。WebSocket 作為雙向通訊協定,在即時通訊應用中扮演關鍵角色,提供比 HTTP 長輪詢更低的延遲和更高的效率。TCP 連線建立採用三次握手,確保雙方同步並建立可靠的傳輸通道。UDP 則為無狀態協定,不保證封包順序和可靠性,但效率更高,常用於串流媒體傳輸。網路的五層架構中,應用層處理應用程式資料,TCP/UDP 層管理資料傳輸,IP 層處理網路路由,而乙太網層則負責區域網路內的資料傳輸。網路架構可分為客戶端/伺服器和點對點兩種,前者適用於集中式服務,後者則適用於分散式應用。網路安全方面,橋接器、交換器和防火牆等隔離裝置扮演重要角色,而收集分析裝置和監聽裝置則用於監控網路流量並檢測異常行為。路由器負責在不同網路之間轉發資料封包,家庭路由器作為閘道器連線本地網路和網際網路。透明代理可在無需使用者設定的情況下重定向網路流量,常被 ISP 用於提升效能或進行內容過濾。

網路上層資料傳輸

UDP 的特性及應用

UDP(User Datagram Protocol)是一種無連線且不可靠的傳輸層協定。它不提供流量控制或錯誤校正機制,但具有低延遲和高效率的特點。UDP 主要用於需要快速資料傳輸且不要求高可靠性的應用場景。

HTTP 與 HTTPS 的區別

HTTP(Hypertext Transfer Protocol)和 HTTPS(Hypertext Transfer Protocol Secure)是兩種常見的應用層協定:

  1. HTTP:使用明文傳輸資料。
  2. HTTPS:使用 SSL/TLS 加密來保護資料安全。

HTTPS 在 HTTP 基礎上增加了安全性保護層級且成為現代網站安全傳輸標準。

小段落標題:HTTP 與 HTTPS 在開發中的應用

從開發角度來看,HTTPS 提供了更高層級的安全保障特別適用於電子商務或其他涉及敏感資料的應用場景。

DNS 的工作原理及實務案例

DNS(Domain Name System)是將網域名稱轉換為 IP 地址的一套系統:

  1. 解析過程:當使用者在瀏覽器中輸入網域名稱時,DNS 負責將網域名稱解析成對應的 IP 地址。
  2. 快取:DNS 應用廣泛且高效率快取機制以減少查詢時間並提升效率。

DNS 查詢步驟解說

  1. 本地快取檢查:作業系統首先檢查本地快取以檢視是否有相關 DNS 據錄。
  2. 主機檔檢查:如果本地快取無法找到結果則檢查本地主機檔(Hosts file)。
  3. DNS 據錄請求:若仍未找到相關記錄則向指定 DNS 伺服器進行請求。
  4. 迭代解析:DNS 伺服器可能會迭代地向根伺服器、頂級網域名稱伺服器以及權威 DNS 伺服器進行查詢直到找到最終解析結果。
小段落標題:DNS 安全問題及解決方案
  1. DDoS 攻擊:巨大流量攻擊導致 DNS 不可用性。
  2. 欺騙攻擊:DNS 欺騙技術可能導致網域名稱被劫持至惡意站點。
  3. 預防措施:使用 DNSSEC 和其他加密技術來保護 DNS 查詢並防止欺騙攻擊發生

雙向溝通協定: WebSocket 與其實作原理

WebSocket 是現代網頁開發中的雙向通訊協定:

  1. 建立連線:WebSocket 首先需透過 HTTP 握手建立連線後即可實作雙向通訊。
  2. 優勢:相比於 HTTP 長輪詢或 Comet 技術 WebSocket 提供了更低延遲和更高效率最佳化資料傳輸方式。
  3. 安全性:WebSocket 支援 WS 和 WSS (Secure) 型態確保資料安全性及隱私保護

WebSocket 與 HTTP 比較

  • WebSocket : 建立持久連線可以持續傳輸資料。
  • HTTP : 每次請求都是獨立互動一次性完結並需再次建立連線才可重新互動。
小段落標題:WebSocket 在即時通訊中的應用

WebSocket 在即時聊天、遊戲或股票交易等需要即時更新及低延遲之應用場景中表現出色且能大幅提升使用者經驗良好效果

網路新手:TCP與UDP的基礎知識

瞭解TCP的核心概念

在網路通訊中,瞭解TCP(傳輸控制協定)的基本概念是非常重要的。除了埠號外,還有幾個關鍵元素需要掌握,包括TCP旗標、序列號、確認號和視窗大小。

TCP旗標

TCP旗標用於管理會話,建立或終止連線,並指示目標如何處理包。以下是一些主要的TCP旗標:

  • SYN:要求建立新連線。
  • ACK:確認包已收到。
  • RST:取消連線嘗試,通常當主機嘗試連線到已關閉埠時會傳送。
  • FIN:清潔地關閉已建立的連線,必須由對方確認。
  • URG:標記包為緊急。
  • PSH:要求接收者以較高優先順序處理包。

序列號與確認號

序列號用於排序接收到的包,以保持與原始傳送順序一致,並檢測丟失的包。每個包都有一個唯一的號碼,隨每個傳輸位元組增加一。

確認號則用於告知對方已成功接收某個序列號的包。它使用序列號並加一來表示下一個預期的序列號。

視窗大小

視窗大小定義了作業系統緩衝區中已接收但尚未處理的包大小。如果視窗大小為零,表示傳送站點正處於壓力狀態,請求對方減慢傳送速度或暫停傳送更多包。

三次握手與TCP連線建立

TCP連線建立過程分為三個步驟,稱為三次握手:

  1. 第一次握手:啟動電腦傳送一個SYN旗標設定且初始序列號為1000的包。
  2. 第二次握手:目標主機回應一個SYN和ACK旗標設定的包,初始序列號為5000,確認號為1001(源主機的序列號加一)。
  3. 第三次握手:源主機傳送一個ACK旗標設定但不設定SYN旗標的包,使用目標主機的確認號作為序列號及上一次包的序列號加一作為確認號。

完成這三次握手後,雙方開始傳送帶有ACK旗標設定的包。

UDP:無狀態且高效的通訊協定

UDP(使用者資料報協定)也是傳輸層的一部分協定,但與TCP不同的是它沒有會話支援且被視為無狀態。UDP不關心封包遺失或順序問題,只負責程式之間的通訊。

UDP特性

UDP根據「傳送即忘」的原則工作,主要用於串流媒體服務如網路電台或電視。它在通訊效率上非常高效,但缺乏TCP所提供的可靠性和順序性保證。

UDP首部結構

UDP首部結構簡單明瞭,包括來源埠、目的埠、長度和校驗和等欄位。這使得UDP在資源受限環境下也能高效運作。

網路基礎知識

什麼是網路?

在現代科技中,當我們提到網路時,大多數人會想到乙太網/TCP/IP網路,這是目前最普遍的網路型別。這種網路由五個層次組成,而不是ISO/OSI模型中的理論七層。這五個層次分別是:乙太網(第二層)、IP(第三層)、TCP/UDP(第四到第六層)以及像HTTP、SMTP、FTP等應用服務(第七層)。

乙太網/TCP/IP網路的運作原理

為了更清楚地理解這些層次如何運作,讓我們看看一個HTTP請求是如何透過這些層次傳遞的。假設我們想要存取www.springer.com的首頁。首先,我們的電腦會解析URL,將其拆解為以下組成部分:HTTP作為應用協定、主機名稱www、網域名稱springer、頂級網域名稱(TLD).com以及我們想要存取的資源/。

接下來,我們的電腦會構建一個HTTP標頭(第七層):

GET / HTTP/1.1
Host: www.springer.com

內容解密:

這段程式碼是一個簡單的HTTP GET請求,用於向伺服器請求資源。GET方法表示我們希望從伺服器取得資源,而/表示我們請求的是根目錄。HTTP/1.1則是指使用的HTTP版本。Host標頭則告訴伺服器我們請求的是哪個主機。

然後我們進入TCP/UDP層(第四到第六層),透過三次握手來建立連線,並將目的埠設定為80(HTTP),隨機選擇一個來源埠來連線瀏覽器與網路。

內容解密:

TCP透過三次握手來建立可靠的連線,確保資料能夠安全地傳輸。第一次握手由客戶端發起,第二次握手由伺服器回應,第三次握手再由客戶端確認,從而建立起雙向通訊。

在IP層(第三層),由於IP無法直接使用主機名稱進行定址,因此需要進行DNS查詢來解析主機名稱對應的IP地址。例如,www.springer.com會被解析為某個具體的IP地址如62.50.45.35。

內容解密:

DNS(Domain Name System)是將人類可讀的網域名稱轉換為機器可讀的IP地址的一種系統。這樣可以方便使用者記憶和使用網際網路。

接下來,IP會檢查目的地主機是否在同一網路中。如果不是,則需要查詢路由表來找到下一跳地址。如果沒有針對目的地網路的特定路由條目,則使用預設閘道來將資料包傳送到外部世界。

內容解密:

預設閘道通常是連線本地網路與外部網路的裝置。它負責將資料包從本地網路轉發到外部網路。

最後,IP會將傳送資料包的網路卡地址寫入源地址,然後資料包進入第二層(乙太網)。

在第二層(乙太網),ARP(Address Resolution Protocol)負責解析目的IP地址對應的MAC地址,並將其記錄在ARP快取中。這樣可以避免每次傳送資料包時都需要詢問MAC地址。

內容解密:

ARP用於在區域網內將IP地址轉換為MAC地址。MAC地址是裝置在區域網中的唯一識別符號。

乙太網協定將傳送資料包的MAC地址寫入源地址後,將資料包轉發到物理層,這裡通常是網路卡驅動程式負責將資料包轉換為二進位制形式並透過介質傳輸出去。

內容解密:

物理層負責實際傳輸資料位元組(bit)。它確保資料能夠透過電纜或無線介質傳遞到目標裝置。

網路架構

從客戶端的角度來看,網路上可以有兩種邏輯結構:客戶端/伺服器架構和點對點架構(P2P)。

客戶端/伺服器架構

例如HTTP就是典型的客戶端/伺服器架構。這種架構中有一台伺服器負責提供服務,而客戶端則消費這些服務。客戶端傳送請求後,如果請求格式正確且客戶端有許可權存取該服務,伺服器則回應請求。

段落標題:

內容解密:

客戶端/伺服器架構適合於需要集中管理和控制資源的應用場景。例如Web服務、電子郵件等都是根據此架構設計的。

點對點架構

在點對點架構中(例如檔案分享),所有電腦平等互聯。每個節點都可以同時提供和消費服務。

段落標題:

內容解密:

點對點架構適合於分散式系統和去中心化應用場景。例如BitTorrent就是典型的P2P應用程式。

隔離和安全

隔離

隔離裝置主要有三種型別:橋接器、交換器和防火牆。

橋接器工作於第2層(鏈結層),主要用於連線不同LAN段之間或隔離不同VLAN之間的流量。 交換器可以看作是多口橋接器。 防火牆工作於多種層級上進行流量過濾和隔離。

段落標題:

小段落標題:橋接器

橋接器是一種工作於第二層(鏈結層)的裝置,主要用於連線不同區域網段之間或隔離不同虛擬區域網(VLAN)之間的流量。 橋接器根據MAC地址進行流量轉發決策。 橋接器可以減少廣播風暴(broadcast storm)。

小段落標題:交換器

交換機可以看作是多口橋接器。 交換機具有高效能和高效率。 交換機通常支援VLAN功能以隔離流量。

小段落標題:防火牆

防火牆工作於多個層級上進行流量過濾和隔離。 防火牆通常具有入侵檢測與防禦(IDS/IPS)功能。 防火牆可以設定存取控制策略(ACL)以限制不安全或未經授權存取。 防火牆支援NAT功能以隱藏內部IP結構。 防火牆通常提供VPN功能以實作遠端安全存取。

錄制裝置

錄記裝置主要有兩種型別:收集分析裝置和監聽裝置(如IDS/IPS)。

收集分析裝置被動收集並分析流量以檢測異常行為或攻擊。 監聽裝置被動監聽流量並檢測可疑行為。 這些裝置工作於多種層級上並支援多種協定分析。 此圖示展示了某些錄記裝置可能放置之處:

  graph TD;
    A[使用者裝置] --> B[交換機];
    B --> C[收集分析裝置];
    B --> D[監聽裝置];
    D --> E[IDS/IPS];
    B --> F[防火牆];

內容解密:

  • A: 使用者裝置可能是電腦、平板電腦或智慧型手機等裝置
  • B: 是連結各種裝置及錄記與隔離之處
  • C: 被動收集並分析流量以檢測異常行為或攻擊
  • D: 被動監聽流量並檢測可疑行為
  • E: 工作原理及使用目的與D相同但E更專注於自動反應
  • F: 工作原理及使用目的與D相同但F更專注於主動防禦

路由

在現代科技中,當我們提到路由時通常指的是兩種:家庭路由器和網際網路路由器。

家庭路由器通常被稱為閘道裝置(Gateway),它負責管理本地區域網路(LAN)與網際網路之間的互通性。

當資料包需要從本地區域網路轉發到網際網路時,家庭路由器會將自己的公共IP地址寫入源位元組(SOURCE),然後轉發給ISP管理之下的一台網際網路路由器。

網際網路監視進行了執行中的功能定義跟蹤程式,就要按照某個規則進行了平行操作. 也就是說可以透過連結所有其他網際網路,從而找到了直接或者間接到達目標裝置最短或者最快速度.

如果要追蹤所有網際網路跟蹤者從我的電腦到他們所追蹤目標裝置, 他們所使用traceroute命令,所以我們可能從我的電腦去追蹤那個目標裝置.

traceroute www.springer.com
traceroute to www.springer.com (62.50.45.35)
1   192.168.1.1 (192.168.1.1)   1.167 ms
2   xdsl-31-164-168-1.adslplus.ch (31.164.168.1)
3   * * *
4   212.161.249.178 (212.161.249.178)
5   equinix-zurich.interoute.net (194.42.48.74)
6   xe-3-2-0-0.fra-006-score-1-re0.interoute.net (212.23.43.250)
7   ae0-0.fra-006-score-2-re0.interoute.net (84.233.207.94)
8   ae1-0.prg-001-score-1-re0.interoute.net (84.233.138.209)
9   ae0-0.prg-001-score-2-re0.interoute.net (84.233.138.206)

內容解密:

上面命令回報出現在我們電腦跟目標裝置之間所經過所有網際網路跟蹤者,每一個跟蹤者處理資料傳輸時耗費了時間.

資料包透明代理(Transparent Proxy)

一個透明代理被設計為在沒有明確組態下自動重定向連線至代理。 透明代理通常被ISP用來提高效能, 或在某些國家中用來進行審查和監控.

以下圖示展示透明代理運作流程:

  graph TD;
    A[客戶] --> B[交換機];
    B --> C[透明代理];
    C --> D[網際網路]
小段落標題:運作原理:

透明代理運作方式為當資料包送出時, 裝置會先傳至透明代理去檢查並執行必要處理, 再轉往網際網路.

安全性提升

小段落標題:Proxy HTTP Header 的 PROXY-VIA 欄位:

有些Web代理可能會在HTTP header中加入PROXY-VIA欄位,告知使用者其連線已透過代理以及哪個IP Address經過了該代理.

小段落標題:強制驗證:

透明代理可能要求使用者進行身份驗證,如密碼或智慧卡驗證前才允許使用其服務. 透明代理還可能會幫助過濾掉不安全及不受歡迎之內容,如垃圾郵件及惡意軟體. 透明代理可以幫助記憶檔案及影像等靜態資料,並幫助加速存取速度.

小段落標題:對比Router及Proxy:

Router只在第三層(Network Layer)進行操作, Proxy則是在第四至第七層(TCP/UDP以及Application Layer)進行操作.

小段落標題:隱私保護:

Proxy可掩飾真實來源IP位元組(SOURCE)而不是直接暴露出去, Proxy可進一步深入理解所運作協定,並篩選掉其他協定如果一個客戶試圖透過其埠使用.

資料結構簡述:

小段落標題:向量資料:

向量(VECTOR)資料結構可快速計算不同程度相似度. 向量資料是一串元素組合而成. 不像列表(LIST)或陣列(ARRAY)只能按索引查詢元素, 向量資料可按不同維度(DIMENSIONS)查詢元素.

小段落標題:向量相似度計算方法:

若兩個向量相似度越高,表示他們具有越高共性. 常見向量相似度計算方法有: 餘弦相似度(Cosine Similarity): 指兩向量夾角餘弦值; 歐式距離(Euclidean Distance): 指兩向量之間直線距離; 曼哈頓距離(Mannhattan Distance): 指兩向量之間橫豎距離總合; Jaccard Similarity: 指兩集合交集與並集比值;

import numpy as np
from scipy.spatial.distance import cosine, euclidean, cityblock

# 假設有兩個向量 A 和 B
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])

# 假設此圖示展示了兩個向量之間關係:
```mermaid
graph TD;
A[(A)] --> |Cosine Similarity| B[(B)];
A --> |Euclidean Distance| B;
A --> |Manhattan Distance| B;

內容解密:

以上程式碼展示了三種常見相似度計算方法:餘弦相似度(Cosine Similarity)、歐式距離(Euclidean Distance)、曼哈頓距離(Mannhattan Distance). 餘弦相似度: 是指兩向量夾角餘弦值. 歐式距離: 是指兩向量之間直線距離. 曼哈頓距離: 是指兩向量之間橫豎距離總合. 以下圖示展示了三種常見相似度計算方法.

# 假設有兩個集合 C 和 D
C = {1, 2, 3}
D = {3, 4, 5}

# Jaccard Similarity
jaccard_similarity = len(C & D) / len(C | D)

print(f"Jaccard Similarity: {jaccard_similarity}")

內容解密:

Jaccard Similarity指的是兩集合交集與並集比值. 假設有兩個集合C與D其中C={1, 2, 3} 與D={3 ,4 ,5} 則C與D交集{3} 與並集{1 ,2 ,3 ,4 ,5} Jaccard Similarity=(交集長度)/(並集長度)= (len({3}))/(len({{}}))= (len({C & D}))/(len({C | D}))= (len({C ∩ D}))/(len({C ∪ D}))

Jaccard Similarity = len(C & D) / len(C | D). 假如C={a,b,c,d} 與D={c,d,e,f} 則Jaccard Similarity= len({c,d}) / len({a,b,c,d,e,f}) = {c,d} / {a,b,c,d,e,f} = {c,d}/6 = ⅓. 假如C={a,b,c,d} 與D={a,b,c,d} 則Jaccard Similarity= len({a,b,c,d}) / len({a,b,c,d}) = {a,b,c,d}/ {a,b,c,d} = {a,b,c,d}/4 = {a,b,c,d}/√{a,b,c,d}.

小段落標題: 資料清洗(Data Cleaning):

Data Cleaning即資料清洗. Data Cleaning指的是處理原始資料前必須先執行一些步驟去除掉無效資料, Data Cleaning步驟包括: 驗證格式正確性; 清除重複紀錄; 處理性質相同但拼寫不同; 操作錯誤; 去除缺失值; 拆分超長文字至正常長度;

import pandas as pd

# 假設有一張 DataFrame df 包含一些不完整或無效資料:
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],
    'Age': [None, 25, None, None, None],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', None]
}

df = pd.DataFrame(data)

# 清除重複紀錄:
df_cleaned = df.drop_duplicates()

# 去除缺失值:
df_cleaned = df_cleaned.dropna()

print(df_cleaned)
小段落標題: Data Cleaning 清除無效資料案例展示:

以上範例展示了一張DataFrame(df),它包含一些不完整或無效資料. 清除重複紀錄(例如Alice): 去除缺失值(Age及City欄位).

小段落標題: 資料降維(Data Dimension Reduction):

當遇到維度過高時, 因為變數太多導致找不到規律, 也很難進行模型訓練.

常見降維方法包括: 主成分分析(PCA), 線性判別分析(LDA), 自編碼(Autoencoders). PCA(Pricipal Component Analysis): PCA指的是將高維空間投影到低維空間, 保留最重要特徵(Principal Component). PCA適用場合包括降低噪音、縮短訓練時間、簡化模型等.

LDA(Linear Discriminant Analysis): LDA指的是區分類別差異最大化, LDA適用場合包括降低噪音、縮短訓練時間、簡化模型等.

Autoencoders: Autoencoders是一種神經網路架構, 他首先壓縮輸入並學習重要特徵, 再還原壓縮後輸出, Autoencoders適用場合包括壓縮圖片、降低噪音、縮短訓練時間等. Autoencoders還包括去噪自編碼Denosing Autoencoder等改進版本.

from sklearn.decomposition import PCA
import numpy as np

# 假設有一個高維矩陣 X :
X = np.random.randn(50, 5)

# 執行 PCA ,降維至二維空間 :
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)

print("Original Shape:", X.shape)
print("Reduced Shape:", X_reduced.shape)
小段落標題: 資料降維案例展示:

以上範例展示了一張隨機生成高維矩陣X, 此矩陣共有5列各5元素((5列x5元素)) x= ((x_ij)_i,j=0,x_ij in [r]) , 再經過PCA降維至二維空間, 此時矩陣X共有5列各二元素((5列x二元素)) x_reduced= ((x_ij)_i,j=0,x_ij in [r]) .

此圖示展示了原始矩陣X以及降維矩陣X_reduced:

  graph TD;
A[原始矩陣X] --> |執行 PCA降維| B[降維矩陣X_reduced];
小段落標題: 主要概念:

以下展示了原始矩陣X以及降維矩陣X_reduced: 原始矩陣X主要概念: 每一列代表一筆觀測結果(x_ij), 每一筆觀測結果(x_i,j)=x_i_j皆可表示該筆觀測結果(x_i,j)x_i_j=x_i_j所處之位置在整體觀測結果(x_ij)x_ij 。

降維矩陣X_reduced主要概念: 每一列代表一筆觀測結果(x_ij)_reduction,x_i_j_reduction=x_i_j_reduction表示該筆觀測結果(x_ij)_reduction,x_i_j_reduction=x_i_j_reduction所處之位置在整體觀測結果(x_ij)_reduction,x_ij_reduction=x_ij_reduction。

小段落標題: 原始矩陣X以及降維矩陣X_reduced轉換關係:

原始矩陣X轉換成降維矩陣X_reduced表達方式如下: x_reduction=((x_ij)_reduction,_i,j=0,_x_ij in[r])=(pca.fit_transform(X))= (pca.fit_transform(((x_ij)_i,j=o,x_ij in[r])))=((pca.fit_transform(((x_i,j)_i,j=o,x_i,j in[r]))))= ((pca.fit_transform(((x_i_j)_i,j=o,x_i_j in[r])))) .

小段落標題: 原始矩陣X以及降維矩陣X_reduced轉換方法之一:

假如有原始高維矩陣X={(x_ij)_i,j=o,x_ij in[r]} 想要降低其維度至二維空間時, 第一步先利用PCA工具方法(pca.fit_transform()), 第二步利用工具方法(pca.fit_transform())對高維矩陣X={(x_ij)_i,j=o,x_ij in[r]}執行方法, 第三步最後得到新的一低維空間矩陣X_reduced={(pca.fit_transform(X))}_reduced .

小段落標題: 原始矩陣X以及降維矩陣X_reduced轉換方法之二:

假如有原始高維矩陣X={(x_ij)_i,j=o,x_ij in[r]} 想要降低其維度至二維空間時, 第一步先利用PCA工具方法(pca.fit_transform()), 第二步利用工具方法(pca.fit_transform())對高維矩陣{(x_i,j)_i,j=o,x_i,j in[r]}執行方法, 第三步最後得到新的一低維空間{(pca.fit_transform(X))}_reduced .

小段落標題: 原始矩陣X以及降維矩陣X_reduced轉換方法之三:

假如有原始高維矩陣{X={(x_i_j)_i,j=o,x_i_j in[r]}} 想要降低其維度至二維空間時, 第一步先利用PCA工具方法(pca.fit_transform()), 第二步利用工具方法(pca.fit_transform())對高維陣列{(x_i_j)}執行方法, 第三步最後得到新的一低維陣列{X=(pca.fit_transform(X))}_reduced .