02.26 比特宇宙-TCP

比特宇宙-TCP/IP的誕生

前情回顧:

我是一個explorer的線程

我是一個殺毒軟件線程

我是一個IE瀏覽器線程

比特宇宙創世不久,宇宙中開始出現文明。

文明不斷碰撞、融合、進化,逐漸分化為幾大派系:

施行Unix體制的帝國,出現時間最早,在宇宙中最有威望。

施行Windows體制的帝國,數以十億計,成為宇宙中最龐大的軍團。

施行Linux體制的帝國,後起之秀,曾和Windows帝國軍團爆發多次戰爭,後握手言和,割據一方。

隨著文明的發展,宇宙之間的各帝國逐漸意識到需要發展經貿合作,互通有無。

終於有一天,幾大派系的帝國派了代表聚在一起,商討比特宇宙的經貿合作框架協議。

☆ 第一天 ☆

會議第一天的議題,商討經貿合作的最重要的基礎:制定比特宇宙通信標準。

Unix代表首先發言:我們需要制定一套普世的宇宙標準,讓全宇宙的帝國都能互相通信,大家有什麼想法,請暢所欲言。

Linux:最簡單有效的辦法,帝國之間都建一條專有線路,就像這樣,構成一張巨大的網絡,我們就能和任何帝國通信了。

比特宇宙-TCP/IP的诞生

Windows:你想的也太簡單了,你知道咱們Windows星系有多少帝國嗎?建專有線路,這得花多少錢?就算你有錢,帝國要建這麼多線路,那也不堪重負。

Linux:彆著急,我還有辦法。咱們找一個帝國作為網絡中心節點,專門負責數據轉發,其他帝國只需和中心建一條專線就可以,這一下能省很多線路的錢。諾,就像這樣:

比特宇宙-TCP/IP的诞生

Windows:確實省了不少,但你有沒有想過,這個中心節點得多麼重要,工作負擔巨大倒是其次,一旦中心帝國覆滅,全宇宙的通信全部中斷,這是多麼嚴重的後果?

Linux皺了眉頭,不再說話。

Unix:其實這個方法挺不錯的,不過需要一點改進會更好。就像你說的,一箇中心節點不夠,咱們可以弄多個啊,然後這多箇中心節點之間再互相連接,把一箇中心變成多箇中心。嗯,其實這裡就不再存在中心了,就是一個去中心的分佈式網絡了,你們覺得怎麼樣?

比特宇宙-TCP/IP的诞生

Linux:唉,這個好!我還想到了一招,既然咱們宇宙中帝國眾多,就把你說的中間這些節點再進一步劃分層級,也就是劃分為一個個子網絡,然後子網之間連接組成大的網絡,然後大的網絡之間再連接構成更大的網絡!我是不是個天才!

比特宇宙-TCP/IP的诞生

Windows:嗯,聽起來挺不錯的,不過有一個問題還沒解決,就是非常遙遠的兩個帝國之間要通信,網絡通道該怎麼建立呢?中間節點要如何給這兩個帝國搭建出一條專線,讓他們通信呢?

·······

一陣沉默

······

Unix:為什麼非得建立專線呢?這樣效率太低了,如果一條線路給你們佔用了,別人要經過這條線的是不是得一直等著?

Linux:說的有道理,那你有什麼好主意?

Unix:我們可以把數據拆分為一個個的單元,分組傳輸,每個單元寫好發件人、收件人,中間的節點負責存儲轉發就可以了嘛,這樣大家都可以用這個網絡,效率大大提升。

Windows代表拍案而起,“這簡直是劃時代的想法!大佬果然是大佬!”

Linux:非常棒的想法,我們給這種技術取個名字吧,既然是分組,然後存儲轉發,要不然叫”分組交換技術“怎麼樣?

Unix:嗯,這名字很貼切,就叫它!

Linux:我們給這個巨大的網絡也取一個名字吧,叫Internet怎麼樣?

Unix:Internet,因特網,聽起來還不錯

比特宇宙-TCP/IP的诞生

Windows:大佬,既然要通信,接下來咱們需要要討論下通信協議了吧。

Unix:通信協議?

Windows:對啊,咱們得制定一套規範標準,所有帝國按照這套規範來收發信息,才能互相理解對方在說什麼。

Unix:嗯,確實需要這麼一套標準協議。既然網絡叫Internet,那咱這套標準協議就叫Internet Protocol,那具體協議內容怎麼制定呢?

Linux:等下,給我個表現機會,讓我先說說。

Windows:洗耳恭聽。

Linux:咱們給所有帝國編一個號,用4個字節的整數來表示,嗯,我想想,從0x00000000到0xFFFFFFFF,差不多能表示42億多個帝國了,綽綽有餘了。這個編號,就叫Internet Protocol Address,也就是IP地址。

Windows:嗯,用是夠用了,不過我建議不要用16進製表示,不太好書寫,人類那智商肯定記不住。既然是4個字節整數,要不就用人類熟悉的4個十進制整數來寫,用點來隔開,像這樣:0.0.0.0~255.255.255.255,把這種寫法叫做IP地址的點分十進制表示法,怎麼樣?

IP: 192.168.1.1

Linux:嗯,這個建議好,可以採納。我剛才還沒講完,通信的時候,數據前面加一個頭部,頭部裡面寫上發件人的IP地址、收件人的IP地址,這樣發送出去,然後交給網絡中的中間節點,讓他們轉發出去...

Windows:等一下,有一個問題,中間節點該如何知道轉發給誰呢?

·······

又是一陣沉默

······

Linux:有了,人類收發快遞的時候,他們的地址是分了省,市,縣到街道,一層層分級了,逐級進入就能找到收件人的地方。咱們的網絡也可以這樣效仿,把網絡分不同大區,大區裡面分子網。然後負責轉發的這些中間節點,記錄一張表,表裡面記錄不同地區的地址該交給誰,如此,不同層級負責不同的地區,整個網絡就能運轉起來,收發信息了。

Unix:這個辦法好,咱就把這種技術叫路由技術,這個表叫做路由表。

Windows:確實很有頭腦嘛,不過我想到有一種情況可能可能比較難辦。

Linux:什麼情況,別賣關子了。

Windows:如果寫了一個不存在的收件人,或者是中間節點的路由表裡面都沒有記錄這個帝國,甚至有些中間節點之間踢皮球,誰都不知道交給誰,互相推諉,那發出去的數據包裹豈不是要在網絡裡面轉圈圈,沒完沒了浪費資源了?

Linux:額,好像確實是有這麼個麻煩問題,你解決問題沒啥能力,挑刺倒是一把好手嘛!

Unix:有了!咱們在在這個頭部裡面除了寫上收發地址外,再加一個計數器,表示這個包裹的生命週期,發件人初始設置一個數字,表示允許最多在網絡中傳遞幾次。中間節點收到後,就把數字減1,如果某個節點拿到後發現減1後變成0,那就丟掉它不再傳輸了。

Linux:嗯,這個辦法好,這個計數器也取一個名字,叫Time to Live吧,就是生存時間的意思,簡寫成TTL

Windows:大佬,果然有經驗,佩服佩服。不過原諒我還要繼續提問題哦。

Linux:你的問題怎麼這麼多,快說!

Windows:帝國之內有許多的公司都需要經貿合作,如何能進一步區分是哪家公司的信息呢?

Linux:這樣看來,4個字節整數不夠用啊,再加一點怎麼樣,給每個公司都弄一個編號。

Windows:這恐怕不太現實,帝國的公司經常在變化,每天誕生消亡不計其數,還有些公司根本不做國際化貿易,不需要網絡通信,這種辦法不好操作。

Linux:這,,,

Unix:今天時間也不早了,要不明天繼續討論這個議題如何,今天的收穫已經不少了。

Linux:好的,我回去再琢磨琢磨。

☆ 第二天 ☆

Unix:兩位昨晚休息的如何?

Windows:還不錯。

Linux:還行吧,對了,昨天最後那個問題我有新的解決方案了。

Windows:哦,是嗎,我也想到了一個辦法,要不你先說。

Linux:昨天的IP地址技術方案還是不變,IP地址只用來在網絡中標識一個帝國,至於帝國內部的公司,由帝國內部自己管理。帝國內部再給自己的公司編個碼,既然你說到公司會不斷消亡和誕生,那這個號碼就動態生成。

Windows:跟我想的差不多,帝國負責網絡通信的部門給需要通信的公司分配一個號碼,我取名叫端口號,用2個字節來表示,總共65535個端口號,公司要通信的時候,向帝國網絡通信部門申請,用完就回收。通信過程中,把這個端口號也帶上,帝國網絡通信部門收到來自網絡的信息包裹後,根據上面收件人的端口號,就能交給具體業務的公司了!

比特宇宙-TCP/IP的诞生

Linux:對對對,跟我想的簡直一摸一樣!

Unix:嗯,不錯不錯,其實我也想到了這個辦法。好了現在怎麼通信的問題解決了,大家覺得我們的標準還差什麼不?

Linux:我覺得整體框架已經很完善了,有一個可以再優化一點的地方。

Unix:額哦,是什麼呢?

Linux:目前的方案通信是沒有問題了,但因為咱們的包裹都是拆開了一個個發,由於中間網絡的路況變化,可能後發的先到,有些還可能丟掉了,需要補發,還有可能發重複了,還有可能後面發的優先級更高,需要加快處理等等各種複雜的情況其實還挺多的,咱們可能還得想一套辦法來解決這個問題。

比特宇宙-TCP/IP的诞生

Unix:呀,聽你這麼一說,我瞬間覺得問題還挺大的啊

Windows:看來簡單的分組轉發還不行,得有一套傳輸控制協議,來專門來解決上面的問題。

Linux:是的,你繼續說下去。

Windows:我們來改造下原來的IP協議,除了把剛才說到的端口號也加進去,同時再設置一些標記,對包裹編號,這樣收到後才好排序,去重。

Linux:嗯,想法不錯,不過我不建議改造原來的IP協議,IP協議只負責帝國之間的傳送,負責網絡路由送達,至於數據的問題,不應該他來負責。我建議在IP協議後面再擴展一層出來,單獨來做傳輸控制。

Unix:嗯, 我同意,不要把所有事情都攪合在一起,分層處理,每層只負責自己的職責。

Windows:也好,我也同意。

Linux:不過如何知道包裹丟失呢?

Windows:要不然這樣,收到包裹後,得給一個答覆,告訴發件人我收到了。

Linux:那其他問題呢?

Windows:額,暫時還沒想好。

Unix:讓我也出出注意,我們給這些數據包裹再加一些標誌字段,用來對數據包裹進行編號,發送速度調節,優先級標識等等。

Windows:看起來可行,不過這雙方可能在傳輸數據之前得先做些初始化工作。

Linux:嗯,要不在通信之前,雙方先建立一個連接

Unix:連接,怎麼又要建立連接,不是分組轉發嗎?

Windows:是啊,你要開倒車嗎?

Linux:兩位先別急,此連接非彼連接,這是一個邏輯上的虛擬連接。正式通信之前先確認網絡通達性,彼此做好初始化操作,可以理解為通過網絡遠程握手。通信完成後,再斷開連接。

比特宇宙-TCP/IP的诞生
比特宇宙-TCP/IP的诞生

Windows:這樣啊,倒是一個好辦法。不過感覺這一套工作下來挺複雜的,有些公司業務比較簡單,數據量小,信息包裹丟失大不了一會兒重發,弄這些感覺成本高,不一定所有公司會買賬。

Unix:你說的這種情況也確實存在,要不這些比較簡單的業務就不要走這套流程了,不用這套控制傳輸協議,單獨弄一個簡單版本的。

Linux:老大說的在理,剛才這套複雜的協議咱們取名叫TCP協議,就是傳輸控制協議的意思,老大說的簡單版本的要不叫UDP,用戶數據報協議,只記錄收發公司的端口號就行,非常簡單。

Unix:非常好,就這麼愉快的決定了!

Linux:老大,咱們這套標準改個名吧,叫TCP/IP協議如何?

Windows:這是兩個協議,加上其他協議,這是一個家族了,應該叫TCP/IP協議族。

Unix:同意!應該叫協議族才對!

比特宇宙-TCP/IP的诞生

第三天,Unix、Linux、Windows三大帝國集團代表發佈《關於比特宇宙推進經貿合作的聯合聲明》,比特宇宙迎來全新的歷史時期!

會議達成的網絡通信標準TCP/IP協議族很快在比特宇宙中流行開來,無數的帝國紛紛擁抱因特網,沒過多久,各種各樣的網絡業務便發展起來,因特網一片欣欣向榮。這其中發展最為迅速的要數Web業務,無數的帝國通過因特網相連,傳輸網頁供人類瀏覽,後來人類又給他們取了一個新名字:互聯網。

未完待續·······

彩蛋

彩蛋:隨著Web業務的不斷髮展,雖然我們提供了點分十進制的書寫方法,不過記憶力低下的人類仍然覺得過IP地址來標記一個提供網頁服務的帝國還是太難了。比特宇宙中一些精明的帝國公司發現了新的商機......

比特宇宙-TCP/IP的诞生

歡迎評論留言,如果覺得不錯,幫幫忙轉發分享哦

比特宇宙-TCP/IP的诞生
比特宇宙-TCP/IP的诞生比特宇宙-TCP/IP的诞生
比特宇宙-TCP/IP的诞生


分享到:


相關文章: