孫子厚
一個TCP笑話
“你好,我想聽一個TCP的笑話。”
“你好,你想聽一個TCP的笑話?”
“是的,我想聽一個TCP笑話。”
“好的,我會給你講一個TCP笑話。”
“太好了,我會認真聽這個笑話。”
“你現在準備好聽這個TCP笑話了嗎?”
“當然,我已經準備好聽了。”
“很好,我馬上要講這個TCP笑話了。它沒有場景,10秒鐘長,有兩個人物,結尾有點睛之筆。”
“好的,我早已洗耳恭聽了,它沒有具體場景,10秒鐘長,有兩個人物,結尾有點睛之筆。”
“噢,不好意思,你接連超時了。
……
你好,想聽一個TCP的笑話嗎?”
你明白這個TCP笑話了嗎?它講的就是網絡堵塞,連接超時乃至中斷。平時上網時,這個問題我們常會遇到。TCP協議是網絡傳輸的主要方法,現在它亟待升級,以解決網絡堵塞問題,而螞蟻——非人類工程師或許能幫助人類解決這個問題。
蟻群功能是1+1﹥2
網絡和螞蟻有什么聯系呢?似乎難以想象。然而,千萬不要混淆一只螞蟻和一個蟻群的概念,它們完全不對等,好比一棵樹和一片樹林完全不是一回事。
美國斯坦福大學科學家發現蟻群非常獨特。在美國亞利桑那州沙漠里,螞蟻會一只一只出窩覓食,除非找到食物,否則它們不會空手回窩。螞蟻覓食中途,如果遭遇意外永遠回不來,蟻群會怎么辦?如果遇上正午天氣又熱又曬,又會怎么辦?
通過長期觀察,科學家發現蟻群完全適應沙漠氣候,覓食的這些困難根本影響不了它們,而且它們還有許多未解之秘。
當遇到又熱又曬的極端天氣時,螞蟻靠窩里儲存的食物生活,蟻群只派出少量螞蟻覓食;當食物少,螞蟻就長時間不回窩,一直在外覓食;當食物多,它就很快回窩,覓食時間就短。準備外出覓食的螞蟻會守在洞口一個窄道里。當覓食的螞蟻回窩途經此道,遇見等候的螞蟻,就會放下食物,然后兩只螞蟻用觸角相互碰觸。洞口螞蟻是否外出覓食,取決于相互碰觸的次數以及碰觸的時間。就這樣,一個復雜的集體行為完全由簡單的個體碰觸而主導。
天氣怎樣,沒有人能斷言。是否適合覓食,一只螞蟻或許判斷不出,但蟻群卻可以確定。1+1﹥2意味著整體的能力超過了部分相加之和,蟻群就是這樣一個整體。而且科學家相信,對蟻群研究得越深入,越會發現有用的東西。
蟻聯網的對比
現代互聯網上,傳輸控制協議(TCP/IP)是傳送信息的基礎,也是互聯網重要的組成部分。互聯網包含大量信息內容(如網站、視頻、音頻、文本),以及許多硬件設備(如路由器、纜線、衛星、基站、電腦)。
假如一臺設備用TCP協議傳輸一份文件,它會把文件拆分成許許多多的小份,稱為“數據包”。它向接收設備發出一連串數據包,并監控對方是否收到。如果收到,就返回“確認符”以標記,并以此調整剩余數據包的傳輸速度。
但有時傳輸數據擁堵、網速變慢,造成部分網絡癱瘓,甚至中斷連接。TCP協議發明于20世紀70年代,如今它急需改進。科學家從螞蟻身上得到了啟示,并將蟻群系統稱為“蟻群算法”、“蟻聯網”(英文Anternet)。
科學家發現,蟻群以食物量為參照,計算派出螞蟻數量的方法,與互聯網傳輸控制協議TCP相比,它們在本質上一模一樣。蟻群的目標是派出更少螞蟻而收集更多食物,TCP的目標是盡量避免擁堵而更快傳輸信息。通過互聯網發送一個數據包,就好比派出一只螞蟻外出覓食;返回一個確認符,就好比覓食的螞蟻帶回了食物。如果很快返回大量確認符,就意味著網速暢通,帶寬足用,而足用意味著發送端將發送更多數據包。這就好比覓食的螞蟻很快回窩,意味著覓食返回,食物足用,而足用也意味著蟻群將派出更多螞蟻。反之,如果確認符返回得慢,發送數據就變慢;同樣地,如果螞蟻覓食返回得慢,蟻群派出螞蟻也將變慢;如果它們根本不返回,那么派出和發送也將停止。對蟻群來說,停止意味著暫時不派出任何螞蟻覓食;對TCP來說,則意味著連接超時(即中斷)。
強調一點,上述這個例子只是簡化版TCP,不代表它全部功能,但用來說明兩者相似卻足夠了。
蟻聯網有數百萬年歷史,它是螞蟻擁有并持續使用的計算方法。通過蟻聯網,蟻群把覓食損失降到最低,而且覓到了食物。TCP目的就是把數據擁堵降到最低,并且盡快傳輸信息。這兩者實現目標的同時,都不需要額外的監督體系。
蟻聯網的啟示
每個蟻群都有一只蟻后,它不覓食不工作,靠其他螞蟻喂養。它的地位最高,但是它卻幾乎沒有“政治”權力,實際上,蟻后只是一只專職于繁殖工作的螞蟻工。另外,蟻群里沒有像公司那樣的“經理”,時刻關注天氣環境變化,并報告給外出覓食的螞蟻。
唯一已知的就是,洞口窄道里兩只螞蟻用觸角碰觸的次數和時間,決定了蟻群算法的結果。一只螞蟻的信息極其有限,這就決定了蟻聯網的算法必須簡單,而且是分布式的、數據化的、可測量的。互聯網上,我們同樣要設計分布式計算,并借助這種特性,使整個網絡每個單元能更加數據化、更加可測量。這也是互聯網信息共享的偉大之處。
另外,如果把蟻群比作互聯網上無數個“0101”組成的計算機代碼,就能以新思路設計更好的計算機程序——蟻群算法程序,實踐證明它用來計算最優化路徑時特別有效。
然而還有問題需要深入研究,既然蟻群派出的螞蟻數量,取決于兩只螞蟻觸角碰觸的次數和時間,那么碰觸時,螞蟻到底“交流”了什么信息?這些信息又怎樣決定了螞蟻的行為?螞蟻的個體行為,又怎樣決定了蟻群的整體行為?
如果這些問題都能進一步弄明白,或許就能完全解決今天網絡擁堵的問題,又或許如果蟻群算法提早發現,TCP歷史就會改寫,乃至不存在今天的問題。