信息和介质的辩证
设计一个网络传输协议时,我们不能盲目。我们一定要先从自然的角度去思考,而不是技术的角度。
最自然的角度莫过于我们自己使用的语言,我们使用语言进行信息交互持续了上万年,直到今天,我们的语言之所以是如此形式,一定经历了上万年的演化来适应我们自身,所以它一定是合理的。
本文用语言举例,但我不是研究语言的,纯观察所得,深究不算数。
语言分书面语和口语,它们虽对立又统一,本文切入点,视介质不同而已。
书面语诉诸非易失介质,如石头,竹简,纸,硬盘,而口语则诉诸易失介质,如空气,大脑注意力。介质易失与否很容易区分,问题是书面语和口语如何适应非易失和易失。先说结论,然后展开:
- 口语要冗余,便于在时间序中流式理解,口语几乎都是多音节的和黏着的;
- 书面语要压缩,便于节省非易失介质空间,因此书面语几乎都是言简意赅。
对理解语言而言,各类中文官话(包括普通话)是反面例子,尽可能将书面语和口语统一在汉字,这对理解语言的本质反而不利,用方言来理解语言而更合理。
秦制书同文对官话的形成有决定作用,自始有了多音节口语压缩成单音节汉字的趋势,比如 “这里”,“那里” 中的 “里” 只是辅助冗余音节,为统一书写,就单独给出了汉字,最终 “这里”,“那里” 就成了独立词汇。口语趋向书面语,因此官话要字正腔圆,一个字说不清就容易引发歧义。
口语强调在 “解码算法” 恢复没听清的部分,多音节连读恰好提供冗余,与阅读书面语时的一字不差,字正腔圆正好相反。
口语中有很多约定俗成的规则,慢慢就成了语法,通过人称,时态,格的规则理解信息,多音节连读也是约定俗成的一部分,比如 “I love you”,将 /v/ 与 /j/ 拼在一起,读成 /vj/ 的音,最终就是 “/aɪ lʌvjuː/”,而 “I hate you” 则是 “/aɪ heɪtjuː/”,这一大堆音节,就算缺失了某一个,也能恢复原意,有了一些规则后,甚至语序颠倒随意放置都无所谓(比如德语,日语),这对乱序有很强容错性。
但对于偏书面语的官话读法,字正腔圆的 “wo ai ni” 只有 3 个音节,漏一个就不知所云了,所以非官话方言一般都不怎么用 “爱” 的读音表达,几乎都是多音节表达,比如 “daijian”,“zhongyi”,“xihan”,“huanxi”,虽然字面上 “待见”,“钟意”,“稀罕”,“欢喜” 都是双音节汉字,但请注意,双音节汉字是为了迎合书同文,在没有文字纯口语表达时,很多音节其实只是后缀。
晋语安阳方言的几个口语例子,“最后” 口语读作 “momoyier”,“最前” 读作 “jinjintouerji”,“边上” 读作 “bianerbianerbianer”,“一点” 读作 “xixixier”,“一坨” 读作 “yeguoluede”,指示位置时都会有后缀 “iang”,它是写不出来的,但如果硬写,还是会写成 “上”,或者 “昂”,很明显这是不正确的,但如果假以时日太久,几百年后的人会认为 “内昂”,“寄昂”,“扽囊” 是完整的指示位置的词汇了。
借书面语的文字标注口语读音的问题显而易见,因为口语是即时的,读音会随时间而变化,但书同文的书面语则相对持久,如果 2000 年前有个字 x 读 “la”,两个口语词 y’la’,z’la’ 为了写下来借用了该字做注音,写作 yx,zx,但 2000 年后口语方言 y’la’ 变成了 y’ba’,但仍然写作 yx,就比较奇怪,同样,如果 x 不再读 “la” 也会不顺畅,换句话说,书同文的书面语和口语是独立的,属于孤立语,而黏着语和屈折语的口语和书面语则相对一致,能听读就能写,看到即可读。
无考证的猜测,古人几乎不会用之乎者也交流,他们的口语大概就是多音节语音的黏着语(外部变化)或屈折语(内部变化),几乎不可能是现代汉语这种孤立语,从官话区外的各地方言能说不能写就可见一斑。
但书面语恰好相反,多音节倾向于压缩到单音节单字,甚至还会出现 “嫑”,“孬” 这种强压缩的汉字。说明汉字是强压缩文字的另一个例子是,英文书翻译成中文版会变薄,中文书翻译成英文版会变厚,这恰好说明英语,德语等语言是强口语弱书面的,正好和中文相反。
古人几乎只用口语交流而不书写,书面语最初仅限于祭司阶层用于记录和占卜,或用于商业活动,很明显祭司的书面语与交流为目的的口语相去甚远,而商人的书面语则作为交流的辅助而与之类似,所以源于地中海周边商业交流的欧洲语言更接近口语,而源自祭司甲骨文的汉语则更接近书面语。
最近家人在学德语,了解到德语对语序很随意,但这种随意的前提是强规则,只要了解了语法规则,任意语序均可恢复语义,但另一方面,当用这种语言进行书写存储时,就显得冗余浪费了。
把上面这一堆总结一下,大致可以得到下面的推论:
- 介质越易失,信息冗余度越高,介质越不易失,信息压缩度越高。
- 介质最易失的一端就是传输,介质最不易失的一端就是存储。
回到传输协议的设计,我们现在知道这是强介质相关的,Tesla 的 TTPoE 很显然符合,介质好所以它才敢极简,丢包就 gbn,反之,如果部署在坏网络上,冗余传输就很必要。
但很多人误会了冗余传输,本质上是混淆了介质丢包还是拥塞丢包,所以当拥塞发生时冗余传输定会火上浇油,就类似在噪杂的环境大家一起喊得越响越崩溃,正确的做法应该是载波监听冲突检测,这就是为什么每当我提出 fec 方案时,总有人给出 “试过,效果不好” 的反面结论。
评价介质的好坏要排除拥塞因素,拥塞是指信息超过了容量,而介质问题与此无关。
好介质的极端是存储,效率靠压缩,容错靠拷贝,坏介质的极端是传输,效率靠冗余,容错靠黏着。我们可以从几乎任何地方看到这个规律的体现,从卡车拉硬盘运输到灾备机房到 raid5,从书面语到口语,从印刷术到屈折语,黏着语再到孤立语。
做一个类比,我觉得 TCP 与中文普通话类似,如果抽不出 TCP 的特性,那就看看普通话,语速说不快,语序不能乱,发音要标准,音节不能连,说快了听不清要重说,语序乱了造成误解要解释,发音不标准会造成歧义,说白了就是把书面语用来交流了。
缩写,年代,公式,型号,让人不明觉厉的四件套。
浙江温州皮鞋湿,下雨进水不会胖。