《互聯網的世界》第四講-擁塞控制與編碼

需要澄清的一個誤區是,擁塞絕不是發送的數據量太大導致,而是數據在極短的時間段內到達了同一個地方以至于超過了網絡處理容量導致,擁塞的成因一定要考慮時間因素。換句話說,擁塞由大突發導致。

只要 pacing,再多的數據量也不會擁塞,1GB,100GB,100TB 的數據遵循同一 pacing 發送只是需要不同時間平滑送完,然而只要 100MB 的數據同時到達就可能導致擁塞,即使再大的瓶頸帶寬,再大的 buffer,更大的突發也會導致擁塞必然發生,擁塞絕不是資源不足導致。

如今帶寬已足夠大,配合丟包,整型,限速,足以應對任何程度的擁塞,但任意一個上述措施都將壓力給到了端主機。按 1970 年代網絡和主機環境的假設,傳輸層需要模擬一個無損網絡細水長流地送達,端主機必須處理丟包以及波動,這種假設下,tcp 順勢而生的彼時需重點考慮稀缺的帶寬和內存,長肥管道怎么辦也一直是 tcp 擔心遇見卻很長一段時間都不存在的環境,可如今的廣域網幾乎都很長肥,多虧了 cdn。

本節我以不同的視角給我的孩子們描述一個不同的網絡傳輸假設。

現在的帶寬足夠大且便宜,內存也足夠大且便宜,1970 年代的假設已經不復存在,改變主要表現在三方面。

首先,數據的獲取方式變成了實時傳輸,而不再從硬盤上獲得。曾經的先下載后使用的方式徹底被改變,曾經的下載過程不需要關注時延抖動,如今的實時傳輸則要同時關注速率和抖動。其次,足夠大且便宜的帶寬允許主機在更長的時間段發送更大的數據,數據編碼不再一字千金。最后,足夠大且便宜的內存允許主機在展示數據之前緩存足夠久的時間,這段時間則為糾錯等預處理提供了操作空間。

因此,始自 1970 年代的傳輸方式需要改變,不能通過重傳的方式加劇時延抖動,不必過于在意傳輸數據量大小,通過更冗余的編碼在 receiver 糾錯。

在繼續這個話題之前,我并沒有給孩子們過多灌輸 tcp/quic/rdma 這類協議是如何做的,因為如果他們對此太了解了反而不好,如果以近乎完美的 tcp 攜帶 bbr 為標桿,我需要不斷解釋下面這段話:

冗余編碼肯定會更長,這個必須要接受,tcp 以重傳構建無損的優化方式是引入 fec 而減少重傳,但所有聲稱具有靈活切換重傳(術語叫 arq)和 fec 的協議都是在僥幸賭博,設計者的心理向著壓縮數據量靠攏,企圖以最少的數據量傳輸信息,在不得不加入冗余的時刻再加入,而需要加入冗余的時刻恰恰就是擁塞的時刻,但擁塞期間提高冗余只能更擁塞,這也是他們所看到的結果,他們會告訴你,fec 在擁塞期間效果并不好,最終還是要靠重傳。他們接受不了將冗余平滑到整個傳輸期間,因為他們接受不了或者說理解不了在不擁塞的時候為什么還要冗余,他們希望得到免費的午餐,不想增加一點點他們知道哪怕只是可能會輸掉的籌碼。

我讓孩子們試著去理解英文和中文的差別,英文聽錯一個音節無礙于聽懂整個詞,中文聽錯一個音節就損失整個詞,這是為什么。因為英文單詞是多音節編碼,多音節自帶了冗余,而漢字是單音節編碼,沒有冗余。英文以多音節單詞為書寫單位,單詞之間有空格,以連讀關聯兩個甚至多個單詞來提供語音的黏連冗余,而漢字以單音節單字為書寫單位,每個漢字之間有空格并不區分詞,連讀黏連也就很自然向整體拼讀方向壓縮,比如 “之于” 本來還是兩個音節,被壓縮成了 “諸”,“什么” 變成了 “啥”,還有一些正在發生的,比如 “這樣” 和 “醬”,“不好” 和 “表”(其實本來就有連音字 “嫑”),還有 “只因” 和 “雞”。

映射到如今的計算機編碼和傳輸,很容易發現始自英語國家的計算機反而使用中文的編碼和傳輸方式。單獨編碼字母而不是單詞,每個字母是一個單獨的 ascii/unicode,字母與字母之間平行無關聯,顯然就是一種 “單音節,無黏連” 的方式。

用自然語言的編碼和傳輸方式作為模板去設計計算機(特別是 ai 領域)網絡傳輸方式,雖不一定最優,至少合理。

作為 80 后互聯網工人,我必須試著從 “壓縮數據量結合重傳” 的保守策略轉換到 “增加冗余量允許丟包” 的激進策略。前者說的是 “壓縮數據量也有利于避免擁塞,但不幸擁塞發生了,重傳兜底”,后者則意味著 “無需太在意數據量大小,丟包就丟包吧”。

仍以現有的 unicode 碼為基礎,假想一種簡單的拉鏈式黏連編碼,后一個符號編碼有一部分是前一個符號編碼的糾錯碼,或者更簡單一點,以連續兩個字符為單位編碼成 “x|y|x + y”,如果 y 丟了,用 x + y - x 來恢復,這些都是很自然的方案。

但考慮到計算機網絡傳輸的特殊性,依然需要更加復雜的處理。

考慮兩個環境特征,首先,數據以數據包(packet)為單位傳輸,每個數據包有 mtu 字節的大小,超過 1KB,連續編碼的原始數據和糾錯碼幾乎是一丟全部丟;其次,擁塞非均勻發生,擁塞本身具有突發性和連續丟包概率。在實際傳輸前需要做兩層隨機,將上述兩件不幸的事平滑開來。第一,將連續編碼隨機到不同數據包,第二,將擁塞丟包的糾錯碼隨機到非擁塞時期。

下面是一個孩子們能理解的簡單方案:
在這里插入圖片描述

這里仍然存在兩個問題,第一個問題,x,y,x+y 所在的數據包丟了兩個,就無力恢復了,但這個問題可以緩解,比如引入拉鏈,“a|b|a+b|c|b+c|d|c+d|…”,但依然無法徹底解決,所以轉變觀念很重要,也許大不了還是可以反饋一個 nack 的。第二個問題是傳輸數據量會成倍增加。第二個問題解決后,第一個問題就能進一步緩解,因為可以容納更多冗余了。

如果全世界只有英文,用計算機網絡傳輸英文和用嘴說英文沒有什么不同,人們用 26 個字母排列組合成所有的文字資料,但記憶單位卻是多個字母組成的多音節單詞甚至短語,習慣用語,人們編碼的是單詞。計算機也可以直接編碼單詞,比如用 1 個碼來表示 “skinshoe”,而不是 8 個碼,這就極大的壓縮了編碼空間。

如果引入其它字符,比如中文,編碼詞語依然比編碼單個漢字更有效,比如 “皮鞋” 可以只用 1 個碼,而現有方案卻需要 2 個碼,但由于中文本來就已經極度壓縮了,比如 “之于” 壓縮成了 “諸”,這種詞語編碼顯然沒有英文的單詞編碼性價比更高。

chatgpt 在神經網絡的意義空間里就是類似的編碼方式,字,單詞,詞組,短語,句子,段落,文章等信息均被編碼到一個用意義關聯的多維空間,“h” 和 “e” 不再是孤立的字符,“he” 和 “him”,“his” 距離很近,同理,“桌子” 和 “椅子” 距離很近,因為它們都是家具。這是從意義中恢復的依據,所謂的意義就是個概率空間。“我去你媽的” 和 “我去你奶奶的” 不同,但意思一樣。但有點跑題,今天的話題是冗余傳輸。

一條直線由 2 個點確定,每個單詞都可以編碼到一條直線,只需要給 2 個點 4 個坐標即可,如果加入冗余,可以傳輸該直線上的 3 個點,4 個點,甚至更多點,只要 receiver 收到任意兩個點,就能恢復這個單詞,4 個坐標編碼一個單詞看起來并不便宜,如果 3 個,5 個點提供冗余就更昂貴了,但如果編碼更長的單詞呢,就會變得更劃算,借鑒哈夫曼編碼思想,直線可以編碼 “常用但長” 的單詞,短語。

m 次曲線需要 m + 1 個點唯一確定,只要被編碼數據量和 m + 1 + k 個點的坐標數據量在同一量級,其比值越大越劃算。

只是人們并不習慣這種方法,如果仔細觀察網絡上傳輸的任何文字類數據,幾乎沒有不是單詞,詞組構成的無意義字符串,如果非要傳輸類似 “dqgfbkjfwkbswnfegeg” 的字符串,自然回退到 ascii/unicode 的代價就是冗余本身的代價。

至于圖片,音樂的編碼,它們本質上都是對模擬信息的數字化,而模擬信號都自帶冗余,藍天背景缺失的一塊依然是藍天,極小概率是一只恰好飛過的鳥。

講給小孩子開個腦洞完全 OK,也能指引他們重新思考未來的傳輸協議,但回到現實中,工程化需要成熟和穩定的兼容性支撐,idea 隨時都有,但落地的事只能踩著大規模部署技術的腳印前行。

剛剛跟博士聊到,那么多學界的 idea 其實都只是 idea 和論證,落地的東西還是傳統 tcp/ip 相關的那套,實驗室的假設在工程實踐上很難被滿足,好多新玩意兒最初都是軍事目的,從軍界需求擴散到學界在到民用的轉化周期并不短,比如 tcp/ip 本身就經歷過這樣的過程。

所以,工人好好做工,經理好好開會,士不可以不弘毅,君子不能不經理。

浙江溫州皮鞋濕,下雨進水不會胖。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719771.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719771.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024.3.4訓練記錄(8)

文章目錄 CF 459D Pashmak and Parmidas problemCF 1388C Uncle Bogdan and Country HappinessCF 1525D ArmchairsCF 220B Little Elephant and Array CF 459D Pashmak and Parmida’s problem 題目鏈接 最近感覺對數據結構題的反應度提升了,這一題是上午看的但是…

動態規劃(算法競賽、藍橋杯)--樹形DP樹形背包

1、B站視頻鏈接&#xff1a;E18 樹形DP 樹形背包_嗶哩嗶哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int n,V,p,root; int v[N],w[N]; int h[N],to[N],ne[N],tot; //鄰接表 int f[N][N];void add(int a,int b){to[tot]b;ne[tot]h[a];h[a…

數倉項目6.0(一)

尚硅谷大數據項目【電商數倉6.0】企業數據倉庫項目_bilibili 數據流轉過程 用戶??業務服務器??數據庫存儲??數倉統計分析??數據可視化 數據倉庫處理流程&#xff1a;數據源??加工數據??統計篩選數據??分析數據 數據庫不是為了數據倉庫服務的&#xff0c;需要…

B084-SpringCloud-Zuul Config

目錄 zuul系統架構和zuul的作用zuul網關實現配置映射路徑過濾器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端統一訪問入口 系統架構和zuul的作用 zuul把自己注冊進eureka&#xff0c;然后可通過前端傳來的服務名發現和訪問對應的服務集群 為了預防zuul單點故…

Java 枚舉類的深入理解與應用

Java 的枚舉類是一種特殊的類&#xff0c;通常表示一組常量。在編譯或設計時&#xff0c;當我們知道所有變量的可能性時&#xff0c;盡量使用枚舉類型。本文將通過一個具體的例子&#xff0c;深入探討 Java 枚舉類的定義、使用和高級特性。 目錄 枚舉類的定義與使用枚舉類的構造…

【OJ】求和與計算日期

文章目錄 1. 前言2. JZ64 求123...n2.1 題目分析2.2 代碼 3. HJ73 計算日期到天數轉換3.1 題目分析3.2 代碼 4. KY222 打印日期4.1 題目分析4.2 代碼 1. 前言 下面兩個題目均來自牛客&#xff0c;使用的編程語言是c&#xff0c;分享個人的一些思路和代碼。 2. JZ64 求123…n …

Vue 賦值后原數據隨賦值后的數據的變化而變化

很常見的&#xff0c;當我們直接用“”號等方式直接賦值后 原數據會隨賦值后的數據的變化而變化 但是有時候我們的需求是不需要原數據跟隨變化 所以怎么解決呢&#xff1f; 解決辦法有&#xff1a; 1.使用Object.assign() 方法 2.使用深拷貝函數 JSON.parse() 3.使用第三方庫lo…

畢業生信息招聘平臺|基于springboot+ Mysql+Java的畢業生信息招聘平臺設計與實現(源碼+數據庫+文檔+PPT)

目錄 論文參考 摘 要 數據庫設計 系統詳細設計 文末獲取源碼聯系 論文參考 摘 要 隨著社會的發展&#xff0c;社會的各行各業都在利用信息化時代的優勢。計算機的優勢和普及使得各種信息系統的開發成為必需。 畢業生信息招聘平臺&#xff0c;主要的模塊包括查看管理員&a…

#ifndef 和 #pragma once的區別

#ifndef 和 #pragma once 都是用來防止頭文件被重復包含的&#xff0c;但它們的工作方式和兼容性有所不同&#xff1a; #ifndef 是 C 的標準語法&#xff0c;它依賴于不重復的宏名稱&#xff0c;保證了包含在 #endif 的內容不會被重復包含。這個內容可以是一個文件的所有內容&…

Webpack配置與運行基礎教程

在前端開發中&#xff0c;Webpack是一款非常流行的模塊打包工具&#xff0c;它可以幫助我們將多個文件打包成一個或多個靜態資源文件&#xff0c;從而提高前端項目的性能和可維護性。本文將為你介紹Webpack的基礎配置和運行方法&#xff0c;幫助你快速上手Webpack。 什么是Web…

基于Springboot的無人智慧超市管理系統(有報告)。Javaee項目,springboot項目。

演示視頻&#xff1a; 基于Springboot的無人智慧超市管理系統&#xff08;有報告&#xff09;。Javaee項目&#xff0c;springboot項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系…

1.3 有哪些文本表示模型?它們各有什么優缺點?

1.3 有哪些文本表示模型?它們各有什么優缺點? 場景描述 文本是一類非常重要的非結構化數據&#xff0c;如何表示文本數據一直是機器學習領域的一個重要研究方向。 知識點 詞袋模型(Bag of Words)TF-IDF(Term Frequency-Inverse DocumentFrequency)主題模型(Topic Model)詞…

【每日刷題】數組-LC56、LC238、隨想錄1、LC560

1. LC56 合并區間 題目鏈接 Arrays.sort先讓intervals里的子數組按照子數組的第一個數字值從小到大排列。開一個新數組&#xff0c;newInterval&#xff0c;存放合并好的子數組讓intervals的當前子數組i的第一個數字與newInterval的當前子數組index的最后一個數字比較大小&am…

ARM 架構下國密算法庫

目錄 前言GmSSL編譯環境準備下載 GmSSL 源碼編譯 GmSSL 源碼SM4 對稱加密算法SM2 非對稱加密算法小結前言 在當前的國際形式下,國替勢不可擋。操作系統上,銀河麒麟、統信 UOS、鴻蒙 OS 等國產系統開始發力,而 CPU 市場,也是百花齊放,有 龍芯(LoongArch架構)、兆芯(X86…

Intel/國產化無人叉車機器視覺專用控制器

無人叉車和機器視覺是兩個獨立的技術領域&#xff0c;但它們可以結合使用以實現更高效的物流自動化。無人叉車是一種自動化運輸工具&#xff0c;可以在沒有人為干預的情況下完成貨物的搬運和運輸。機器視覺是一種人工智能技術&#xff0c;可以讓計算機識別和理解圖像或視頻中的…

YOLO:實時目標檢測的革命

目標檢測作為計算機視覺領域的一個核心任務&#xff0c;一直以來都是研究的熱點。而YOLO&#xff08;You Only Look Once&#xff09;技術作為其中的杰出代表&#xff0c;以其獨特的處理方式和卓越的性能&#xff0c;成為了實時目標檢測的標桿。本文將探討YOLO技術的核心原理、…

FPGA時序約束與分析--建立時間與保持時間

文章目錄 前言一、定義二、舉例說明2.1 建立時間違規2.2 保持時間違規前言 時序約束的定義–設計者根據實際的系統功能,通過時序約束的方式提出時序要求; FPGA 編譯工具根據設計者的時序要求,進行布局布線;編譯完成后, FPGA 編譯工具還需要針對布局布線的結果,套用特定的…

【C++】每日一題,189 輪轉數組

給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 步: [7,1,2,3,4,5,6] 向右輪轉 2 步: [6,7,1,2,3,4,5] 向右輪轉 3 步: [5,6,7,1,2,3,…

搜索回溯算法(DFS)1------遞歸

目錄 簡介&#xff1a; 遞歸問題解題的思路模板 例題1&#xff1a;漢諾塔 例題2&#xff1a;合并兩個有序鏈表 例題3&#xff1a;反轉鏈表 例題4&#xff1a;兩兩交換鏈表中的節點 例題5&#xff1a;Pow&#xff08;x,n&#xff09;-快速冪 結語&#xff1a; 簡介&…

嵌入式驅動學習第二周——斷言機制

前言 這篇博客來聊一聊C/C的斷言機制。 嵌入式驅動學習專欄將詳細記錄博主學習驅動的詳細過程&#xff0c;未來預計四個月將高強度更新本專欄&#xff0c;喜歡的可以關注本博主并訂閱本專欄&#xff0c;一起討論一起學習。現在關注就是老粉啦&#xff01; 目錄 前言1. 斷言介紹…