在本課/貼文中,我們將討論網路。
位元、訊號和封包簡介
透過全球通訊網路傳遞和交換資訊的能力徹底改變了人們的工作、娛樂和生活方式。世紀之交,美國國家工程院列出了20世紀最具社會影響力的20項技術。該清單包括改變生活的創新,如電氣化、汽車和飛機。它還包括四種通訊技術——廣播和電視、電話、網路和電腦——其技術基礎是本書的重點。
令人驚訝的是,網路僅排名第 13,因為它是在本世紀末發展的,委員會認為其最重大的影響將出現在 21 世紀。這項預測似乎很準確:無線網路和行動裝置的普及、社交網路的興起以及隨時隨地的通訊已經改變了商業、社會聯繫,甚至推動了社會和政治變革。
溝通是現代生活的基礎。很難想像沒有網路、網路應用程式或連網行動裝置的生活。到 2011 年初,全球活躍手機數量超過 50 億部,其中超過 10 億部擁有「寬頻」連線——超過 2011 年擁有電力、鞋子、牙刷或廁所的人數!
目標
這篇文章/課程(無論你怎麼稱呼它)旨在解釋通訊網路是如何運作的。這值得研究,原因有二:
- 了解這些系統中所使用的設計原理和分析技術;
- 因為技術思想與電腦科學(CS)和電機工程(EE)的其他領域相關。這使得學習通訊系統成為學習廣泛適用概念的好方法。
在麻省理工學院(麻省理工學院),二年級學生會學習這樣的課程,接觸一些機率和傅立葉級數。
傳統上,「低階通訊」(資訊如何在單一連結上移動)被認為是 EE 主題,而「網路」(建立多個連結的網路)一直是 CS 主題。傳統的數位通訊課程很少涉及網路建設,而電腦網路課程將實體鏈路上的通訊視為黑盒子。本書旨在彌合這一差距,提供對這兩方面的全面理解。
我們將端到端地介紹通訊系統:從要傳輸的資訊來源,到資料包(分解傳輸的訊息),到位(「0」或「1」),到訊號(模擬波形)透過電線、光纖、無線電或聲波等連結發送)。我們將研究不同的網路:簡單的點對點連結、具有多個節點的共享媒體以及連接形成更大網路的更大的多跳網路。
主題
數位通訊面臨三個核心挑戰:可靠性、共享和可擴展性。本介紹部分重點介紹前兩個。
可靠性
許多因素導致溝通不可靠。我們將研究提高可靠性的技術,所有這些技術都採用冗餘來實現不可靠組件的可靠性,並依賴獨立組件故障。
主要挑戰是克服雜訊、幹擾、位元錯誤、資料包遺失(來自不可糾正的錯誤、佇列溢位或連結/軟體故障),所有這些都會降低通訊品質。
除了可靠性之外,速度也很重要。可靠性技術經常使用冗餘,從而降低速度。許多通訊系統平衡可靠性和速度。
通訊速度顯著提高,從 20 世紀 80 年代初的每秒千位元到如今的無線每秒 100 兆位元和有線鏈路每秒 1-10 千兆位元。
我們將探討為什麼通訊不可靠以及如何解決它,使用糾錯碼、處理符號間幹擾、重傳協定和容錯路由。
高效共享
每個節點對的專用連結都非常昂貴。分享是必不可少的。我們將研究共享點對點連結、共享媒體和多跳網路。
我們將介紹共享介質(與乙太網路、WiFi、蜂窩網路和衛星網路相關)、調變/解調(透過不同頻率傳輸)和介質存取控制 (MAC) 協定(管理網路節點行為的規則) 。我們將探討時間共享(每個節點在專用時間內進行傳輸)和頻率共享(分割頻寬)。然後我們將轉向多跳網絡,其中許多通信共享鏈接,由交換機協調。
關鍵問題包括多個通訊如何共享網路、訊息如何穿越網路以及如何確保跨多跳網路的可靠通訊。
共享技術和可靠性機制決定網路效率。效率可以定義為最小化給定要求的成本或最大化給定網路的「有用工作」(聚合吞吐量、吞吐量變化和平均延遲/等待時間)。這篇文章重點討論吞吐量和延遲。
可擴展性
可擴充性(設計處理大尺寸的網路)很重要。這篇文章簡要介紹了它,為後面的課程留下詳細討論。
摘要與計劃
本課程分為四個部分:原始碼以及位元、訊號和資料包的抽象,依序學習。
- 來源:我們從資訊、熵、來源編碼(資料壓縮)、霍夫曼編碼和 Lempel-Ziv-Welch 演算法的基礎知識開始。
- 位元:我們透過糾錯碼來克服位元錯誤:線性分組碼和卷積碼。
- 訊號:我們涵蓋調變/解調、使用線性時不變 (LTI) 通道建模訊號失真、時域/頻域表示以及通道/濾波器的頻率響應。
- 封包:我們研究 MAC 協定的媒體共享、多跳網路中的路由以及可靠的資料傳輸協定。
資訊、熵和原始碼的動機
克勞德·香農 (Claude Shannon) 的資訊理論(發展於 20 世紀 40 年代末)是一個開創性的思想,它改變了許多技術領域,特別是通訊系統和網路。本章介紹訊息背後的直覺,以數學方式定義訊息,並將其與熵(資料來源的屬性)連結起來。
這些概念可以在通訊或儲存之前實現高效的資料壓縮,從而可以在不失真的情況下恢復原始資料。 核心思想是來源編碼,它將資料來源中的每個符號對應到具有所需屬性的代碼字。訊息是符號序列。我們的重點是無損源編碼,可以從未損壞的傳輸中完美恢復原始訊息。
資訊與熵
香農在哈特利工作的基礎上,意識到訊息可以被普遍定義,獨立於應用程式或訊息語義。通訊涉及發送者 (S) 選擇幾種可能的訊息之一並將其發送給接收者 (R)。例如,S可以表示英國到達路線:
- 若陸路則為「1」
- 如果是海運則為「2」
如果每個選擇的可能性相同(沒有先驗知識),則傳達的訊息為 1 位元。該位可以對選擇進行編碼。 1000 個這樣的獨立事件可以用 1000 位元進行編碼。
如果先驗知識顯示一種選擇的機率較高(例如,由於風暴而選擇陸地),那麼可能性較小的訊息(海洋)會傳達更多訊息。 同樣,波士頓 1 月 75°F 的氣溫比 32°F 的氣溫更能提供資訊。
有關事件的資訊取決於其機率 (p)。較低的機率(不太可能發生的事件)意味著較高的資訊。
資訊的定義
Hartley 將資訊 (I) 定義為:
I = log(1/p) = -log(p) (2.1)
採用以2為底的對數,訊息單位為位元。 對數函數確保可加性:來自兩個獨立事件A和B(機率pA和pB)的資訊相加:
IA IB = log(1/pA) log(1/pB) = log(1/(pA*pB)) = log(1/P(A 和 B))
範例
熵
熵 (H) 量化一組互斥事件的預期資訊。如果事件 i 的機率為 pi:
H(p1, p2, ... pN) = Σ pi * log(1/pi) (2.2)
熵以位元為單位測量,代表平均不確定性。對於機率為 p 和 1-p 的兩個互斥事件:
H(p, 1-p) = -p*log(p) - (1-p)*log(1-p) (2.3)
H(p) 在 p = 1/2 附近對稱,在 p = 1/2 時最多 1 位。 H(0) = H(1) = 0。熵總是非負且 H(p1, p2, ... pN) ≤ log N。
原始碼
來源編碼有效地對訊息進行編碼。 許多訊息都有標準編碼(ASCII、圖像像素、音訊樣本)。這些是固定長度的編碼,易於操作。
但是,這些編碼可能效率低。 在英文文本中,「e」出現比「x」更頻繁。用更少的比特對“e”進行編碼,用更多的比特對“x”進行編碼可以縮短平均訊息長度。 這與資訊概念一致:頻繁的符號(pi 較高)傳達的訊息較少,所需的位數也較少。
代碼將資訊映射到位序列。 碼字是程式碼中的一個位元序列。 原始碼旨在透過將編碼訊息長度與資訊內容(熵)相匹配來壓縮資料。
範例:用機率編碼 1000 個等級(A、B、C、D):
定長編碼:2位/級(共2000位)。 解碼簡單,但效率低。
可變長度編碼(範例):A=10、B=0、C=110、D=111。 長度取決於訊息。 解碼需要順序處理。 此範例程式碼不是最佳的。
可以壓縮多少?
理想情況下,壓縮僅使用必要的位元來表示資訊。熵(公式 2.2)提供了避免歧義所需的平均位數的下限。發送較少的位元會導致接收器無法解決選擇。
在成績範例中,每個成績的預期資訊為 1.626 位元。 編碼 1000 個等級平均需要 1626 位元。範例可變長度程式碼使用 1667 位,因此它不是最佳的。 對等級序列進行編碼可以提高壓縮率。
尋找好的程式碼是具有挑戰性的。有時,特定於上下文的代碼可能非常有效率(例如,如果發送者和接收者都知道所有十四行詩,則僅使用 8 位元對莎士比亞十四行詩進行編碼)。
為什麼要壓縮?
壓縮有幾個優點:
- 更快的傳輸:較短的訊息可以減少傳輸時間並釋放網路容量。
- 高效率的資源利用:較小的訊息可以節省網路資源(頻寬、緩衝區),容納更多的通訊。
- 提高了易錯連結的吞吐量:糾錯編碼之前的壓縮可以實現錯誤復原的最佳化冗餘。
壓縮通常是端對端功能(應用層),但如果資料可壓縮且包含冗餘,也可以應用於連結層。 下一章將介紹霍夫曼程式碼和 Lempel-Ziv-Welch (LZW) 壓縮。
壓縮演算法:Huffman 和 Lempel-Ziv-Welch (LZW)
本章討論兩種用於訊息壓縮的來源編碼演算法(其中訊息是符號序列):Huffman 編碼和 Lempel-Ziv-Welch (LZW)。當符號機率已知且獨立時,霍夫曼編碼是有效的。 LZW 是自適應的,不需要先驗機率知識。 兩者都被廣泛使用(GIF、JPEG、MPEG、MP3 等)。
良好原始碼的屬性
代碼將字母表中的符號(文字、像素強度或抽象符號)對應代碼字。 二進位碼字對於許多通訊管道來說都很方便。
範例:6.02 中的編碼等級:A=1、B=01、C=000、D=001。一系列等級可以傳輸為 0010001110100001,解碼為“DCAAABCB”。
瞬時代碼:一旦收到符號的代碼字,就會對其進行解碼。 上面的等級編碼是瞬時的。非瞬時代碼需要向前查看或從末尾解碼,這使得它們更難解碼。
程式碼樹與無前綴碼:程式碼樹視覺化程式碼。 在二元碼樹中,邊用 0 或 1 標記。從根到符號的路徑給出了它的編碼。 無前綴代碼僅在葉節點處有符號,確保沒有代碼字是另一個代碼字的前綴。無前綴代碼是即時的。
預期碼長度(L): 對於具有機率pi 的N 符號與碼字長度li:L = Σ pi *李。 L 較小的程式碼適合壓縮。 最優程式碼具有最小L。香農證明L ≥ H(熵),漸近實現熵的代碼存在。
霍夫曼碼
霍夫曼編碼在給定符號機率的情況下提供高效率的編碼。 更有可能的符號會得到更短的代碼。
霍夫曼演算法自下而上建構程式碼樹,從最不可能的符號開始:
- 輸入:設定(機率,符號)元組的 S。
- 將兩個機率最小的符號組合成一個新的元組(組合符號,機率總和)。將新元組加入 S.
- 重複步驟 2,直到 S 只有一個元組(根)。
產生的程式碼樹定義了可變長度程式碼。
霍夫曼代碼的性質
- 非唯一性:由於樹建造過程中的任意平局,可能存在多個最佳程式碼(和樹)。
- 最優性:對於從固定的已知機率分佈中提取的獨立符號,霍夫曼代碼在瞬時代碼中具有最小的預期長度。
LZW:自適應可變長度原始碼
基於字母機率的簡單霍夫曼編碼有其限制。 根據訊息內容進行調整的自適應編碼可以表現得更好。 LZW 是一種流行的自適應演算法。
LZW 建立一個字串表,將符號序列對應到 N 位元索引或從
N- 位元索引映射符號序列。此表(2^N 個條目)使用單字節序列 (0-255) 進行初始化。 編碼:
- 當序列(S)在表中時累積位元組。
- 當S下一個位元組(b)不在表中:
- 傳送 S 代碼。
- 將 S b 加入表中。
解碼器在接收程式碼時重建表,使其能夠恢復原始訊息。
- LZW 觀察結果:
- 貪婪:
- 找出最長的匹配。 自適應:
- 表格條目反映實際的訊息序列。 次優:
- 可能包含未使用的條目。 可變壓縮:
- 壓縮隨著表格填充而增加。 表格重新初始化:
為什麼選擇數位化?通訊抽象和數位訊號
本章解釋了模擬和數位通信,重點關注模擬的問題和數字的基本原理。它提出了透過類比通訊鏈路發送和接收數位資料的方法(這是必要的,因為實體鏈路在最低層級上基本上是類比的)。它也介紹了分層通訊模型:訊息→封包→位元→訊號,這構成了本書其餘部分的基礎。
數據來源
通訊技術使用戶(人類或應用程式)能夠交換訊息。 資料來源本質上可以是數位的(例如電腦產生的資料)或模擬的(例如視訊、音訊、感測器資料)。 現代系統通常會將所有數據數位化,無論其來源為何。
為什麼選擇數位化?
- 數位通訊的優異表現有兩個原因:
- 模組化:
- 數位抽象可以透過組合模組來建構大型系統。 複雜的處理:
然而,物理鏈路是模擬的,需要數模和模數轉換。
為什麼模擬在許多應用中很自然
- 模擬表示很好地對應到物理鏈路屬性。例:
-
-
類比訊號可以以不同的電壓/強度/波長等級發送,很容易被接收器測量。
那為什麼不採用模擬呢?
沒有任何通訊連結是沒有錯誤的。雜訊和失真會擾亂訊號,而這些錯誤會在多個傳輸階段累積(級聯效應)。這使得模擬系統難以可靠地構建,尤其是複雜的系統。數位訊號解決了這個問題。
數位訊號:將位元映射到訊號 數位訊號使用離散值來表示位,從而能夠與雜訊進行強有力的區分。
二進位訊號使用兩個電壓:V0 代表“0”,V1 代表“1”。 V0 和 V1 必須充分分離以處理雜訊。
接收器使用閾值電壓(Vth = (V0 V1) / 2)將接收到的電壓對應到位(電壓本課中的信號
傳輸訊號是保持特定時間的固定電壓波形。 連續訊號由離散時間樣本表示。 取樣率(每秒取樣數)由發送者和接收者商定。 取樣間隔是取樣之間的時間。
時鐘傳輸
發送方和接收方必須就時脈速率達成協議。位在時脈轉換時發送。 Samples_per_bit 是每個位元的樣本數。接收器從接收到的樣本中的轉換推斷時脈邊緣。
挑戰:
- 時鐘同步:發送器和接收器時鐘可能不同。 解決方案:接收器根據偵測到的轉換進行自適應定時。
- 確保頻繁轉換:時脈恢復所需。解:線路編碼(例如8b/10b)。
時鐘和資料恢復
接收方時鐘可能比發送方時鐘稍快或稍慢。 接收器根據轉換動態調整其取樣索引:
- 如果當前點和前一個點之間的中間樣本與當前樣本相同(採樣太晚):將索引增加samples_per_bit - 1。
- 如果中途樣本不同(取樣太早):增加samples_per_bit 1。
- 如果沒有轉換:增加samples_per_bit。
傳輸開始時交替的 0 和 1 訓練序列有助於初步校正。
8b/10b 線路編碼
8b/10b 解決 DC 平衡和頻繁轉換問題。它將 8 位元符號對應到 10 位元傳輸符號,確保:
- 0 或 1 的最大運行長度為 5 位元。
- 任何樣本中 1 和 0 計數之間的最大差異為 6。
- 特殊的 7 位元序列可實現封包邊界偵測。
編碼過程:
- 封包資料分為位元組。
- 每個位元組映射到一個 10 位元符號。
- 資料包由訓練序列和用於同步的 SYNC 模式構成。
通訊抽象
一個通訊系統涉及幾個模組:Mapper(位元到訊號)、Demapper(訊號到位元)、Channel Coding(糾正錯誤)、Channel Decoding。訊息被分成資料包並透過多個鏈路傳輸。 三個關鍵抽像是封包、位元和訊號。 本書重點在於這些內容以及它們在通訊網路中的互動。
使用糾錯碼應對位錯誤
本章討論可靠數位通訊的技術,重點是添加冗餘以應對通訊通道和儲存媒體中不可避免的位元錯誤。 核心概念是通道編碼:在發送方編碼並在接收方解碼以糾正錯誤或檢測不可糾正的錯誤。 本章重點在於錯誤校正程式碼,特別是線性區塊程式碼和(後來的)卷積程式碼。
位元錯誤和 BSC
二元對稱通道 (BSC) 模型使用單一參數 ε(位元翻轉機率)來表徵位元錯誤,其中傳輸的位元以機率 ε 翻轉,獨立於其他位元。 ε 可以憑經驗估計。 大小為 S 位元的封包的封包錯誤機率 (PER):
PER = 1 - (1 - ε)^S (5.1)
當 ε
現實世界的通道可能會出現突發錯誤,其中錯誤機率取決於歷史記錄(如果最近的位也出錯,則錯誤機率更高)。
最簡單的程式碼:重複
A 重複程式碼 將位元 b 編碼為 n 個 b 副本。 碼率為1/n。 最大似然解碼 根據收到的碼字選擇最有可能的訊息。對於 BSC,這意味著選擇與接收到的碼字具有最多共同位元的碼字。
重複碼的解碼錯誤機率(見原文公式5.3)。機率隨著碼率呈指數下降,但因開銷較高而效率低。
嵌入和漢明距離
兩個 n 位元字之間的漢明距離 (HD) 是不同位元位置的數量。對於單一糾錯 (SEC),任何兩個有效碼字之間的 HD 必須至少為 3。具有最小漢明距離 D 的程式碼可以偵測 D-1 錯誤並修正底層(D/2 -1) 錯誤。
線性分組碼與奇偶校驗計算
線性區塊碼 (n, k) 使用訊息位上的線性函數(加權和)將 k 位元訊息對應到 n 位元碼字。 代數塊程式碼在區塊內執行此類操作。 (n,k,d)碼表示具有最小漢明距離「d」的分組碼。碼率 = k/n。
線性碼要求任兩個碼字和也是一個碼字。 全零碼字存在於任何線性碼中。線性分組碼的最小漢明距離等於最小非零碼字的權重(1的數量)。 二元線性程式碼使用模2算術(伽羅瓦域F2)。
矩形奇偶校驗 SEC 程式碼
奇偶校驗 是位的模 2 和。 偶校驗碼為每個訊息添加一個奇偶校驗位,使碼字具有偶校驗。這會偵測到單一錯誤 (HD=2)。
矩形奇偶校驗碼將 k 位元排列到 r x c 陣列中,並新增行和列奇偶校驗。碼字:訊息行奇偶校驗列奇偶校驗。長度:n = rc r c。代碼是 SEC 代碼 (HD=3)。 解碼涉及檢查行和列奇偶校驗,如果兩個奇偶校驗都指示錯誤,則修正對應的位元。
SEC 代碼需要多少個奇偶校驗位元?
任何線性代碼都可以轉換為系統代碼(訊息位後面跟著奇偶校驗位)。對於 SEC,奇偶校驗組合的數量 (2^(n-k)) 必須大於或等於可修正情況的數量 (n 1):
n 1 ≤ 2^(n-k) (5.6)
奇偶校驗位計數至少隨訊息位元呈對數成長。
漢明碼
漢明碼是具有對數奇偶校驗位成長的高效能 SEC 代碼。 每個奇偶校驗位保護多個資料位,單一錯誤會產生獨特的奇偶校驗錯誤組合。
校正子位元 (Ei) 在接收器處以檢查奇偶校驗來計算。綜合症位的組合表示錯誤位元(如果有)。
漢明碼的構造有邏輯嗎?
漢明碼構造:
- 將奇偶校驗位分配給 2 的冪(1、2、4、8、...)的索引。
- 將資料位元指派給剩餘索引。
- 資料位元di包含在pj的奇偶校驗計算中當且僅當索引(pj)有助於索引(di ) 以二進位表示形式(以位元AND 非零)。
作為二進制數處理的校正子位元((7,4) 範例中的 E3E2E1)給出了要修正的位元的索引。
注意:這只是 Web 開發所需的資訊。對 Sysops 來說,網路及其基礎知識是兩個學期的課程。
以上是互聯網如何運作?第2部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Linux新版
SublimeText3 Linux最新版