趣文:TCP/IP 之 大明王朝郵差

碼農老劉發表於2016-05-14

前言:本文主要想說一下TCP的知識, 比喻有不恰當之處,敬請包涵。

大明王朝天啟四年, 清晨。

天色剛矇矇亮,我就趕著裝滿貨物的馬車來到了南城門, 這裡是集中處理貨物的地方 , 一隊一隊的馬車都來到這裡, 城頭的士兵帶著頭盔,身披盔甲, 手持長槍, 虎視眈眈的注視這下面的動靜。

城門口的大棚裡亂哄哄的,是一群人圍在一起賭錢, 這些傢伙都穿著同樣的衣服, 前胸和後背寫著三個大字 “TCP郵差”

我知道這就是我要找的人, 他們會幫我把貨物發出去。

我下了車,在大棚裡四處檢視, 找到一個無聊的坐著獨自喝悶酒的小夥子。

“郵差小哥 ,幫我把這車貨發了唄”

小夥子懶洋洋的站起來說: “你從哪兒來,要到哪兒而去啊?”

我趕緊拿出寫好的地址說: ”我住在我們們城裡北拐街224號, 要發一車貨物到內鄉縣衙“

“內鄉縣衙有很多門, 你的貨進那個門啊?” 郵差小哥接著問。

“出發的時候老闆給我說了, 發到80號門 。”

郵差小哥說: “走吧, 我們們到前面去。”

大棚的前面是一大批開闊地, 可能我們來的早 , 現在只有我,郵差小哥, 當然,還有我的馬車。

“你等等, 我先給內鄉縣衙建立個連線 ”郵差說著, 吹了個口哨, 一匹馬跑了過來。

他拿起毛筆在一張紙寫了一封信:

“縣衙縣衙, 我是京城, 我想和你建立連線, 我的序號1024 , 收到請回話! ”

信封上寫著:

發貨地:京城北拐街224號
收貨地:內鄉縣衙, 80號門

然後把這這個紙放到了馬背上的褡褳裡, 拍了拍馬屁股: “快走吧。”

過了兩個時辰, 那匹馬回來了, 郵差掏出了馬運回來的那封信, 上面寫著:

“京城京城,收到了你的信, 你的信裡邊有個序號是1024,對不對? 同意建立我們們的連線, 我這邊序號是2048”

郵差喜形於色 : “ 看看, 連線快要建立了, 我再給他們發一封信就行了”

”縣衙縣衙, 我收到你的確認信了, 也看到了你的序號是2048, 我開始發貨了”

我問他: “這就是連線嗎, 我沒看見你扯一條線把京城和縣衙連起來啊”

郵差說: “這你就不懂了吧,這就是TCP連線, 是虛擬的, 連線的狀態資訊並不會在路上儲存; 相反, 連線的狀態資訊是在兩端維持的, 也就是在我這裡和縣衙那裡一起維持的。 ”

“那你們為啥要發三封信呢? ”

“這就是三次握手啊, 我給你分析一下啊, 這三次握手主要是為了驗證我這邊和縣衙那邊的發信/收信能力沒問題, 這樣就證明連線是通的, 可以正式發貨了。”

第一次握手:京城發信,縣衙收到了,此時縣衙就會明白:京城發信能力和自己的收信能力是沒問題的。

第二次握手:縣衙發信,京城收到了,此時京城就會明白:京城的發信和收信都是好的, 縣衙的發信和收信也都是沒問題的。 要不然收不到縣衙的回信 , 但是縣衙還不知道自己的發信功能如何?所以需要第三次握手:

第三次握手:京城發信,縣衙收到了,此時京城已經確認,雙發的收信,發信都是沒問題的, 這次回應的目的只是消除縣衙對自己的發信功能和京城的收信功能的擔憂而已。

說實在的, 我有點暈, 郵差小哥說 : “你多琢磨琢磨就明白了。”

我問他: “你這麼辛苦的建立連線, 難道不親自去送貨嗎?”

郵差說:“ 我才不去呢! 本朝新皇登基以來,整天像木匠一樣做木工,不理朝政, 導致民不聊生, 大片田地荒蕪, 強盜,野獸橫行, 早就沒有人敢冒著風險去送貨了。所以內閣的那幫大臣們就想了個招,修建四通八達的官道, 讓馬,驢這些牲畜去送貨, 即使被老虎吃掉也沒啥損失, 天朝還是挺以人為本的。”

“那這些馬怎麼知道把我的貨送的內鄉縣衙啊”

“不用擔心, 它們都是訓練過的, 會沿著官道走,在每一個每個岔路口朝廷都會修建一個驛站, 馬累了可以吃草喝水休息, 更關鍵的是,每個驛站的衙役會看看我剛才寫的信 ,他們知道路, 然後把馬領到一個新的正確的官道,繼續走, 最終就能到內鄉縣衙。 對了, 大家給這些驛站起來個別名:路由器”

“萬一馬跑丟了, 或者被老虎吃掉,到不了,或者回不來怎麼辦?”

“那就是我們TCP郵差要乾的事兒了, 你馬上就會看到, 我來看看你的貨, 哎啊, 你這個櫃子太大了, 一匹馬馱不走, 得分成小包裹, 一個一個運”

我沒辦法, 只好把一件大貨物拆開, 分成小包裹。

“ 給每個包裹編個號吧” 郵差說到。 “這樣到了內鄉縣衙他們就能組裝起來,原樣恢復了”

我突然想到一個嚴重問題:“萬一馬被強盜搶走了。我這個櫃子的一條腿豈不就丟了 ”

郵差見怪不怪: “沒辦法, 內閣的大人們說了, 這種情況, 就重新傳送那一個包裹。”

擦, 我心頭有一萬頭羊駝跑過: 這幫大人們真是站著說話不腰疼啊, 萬一櫃子的腿兒丟了, 我還得重做啊。

郵差把包裹按編號擺成一列, 1, 2, 3, …… 10 ,一共10個包裹。

“按規定我們每次最多發3個包裹,按序號發, 先發 1, 2, 3號包裹” 郵差說著叫來3匹馬, 裝上貨,馬一溜煙的跑掉了。

我在那裡提心吊膽的等著,生怕一個包裹丟了。

可是怎麼知道包裹是不是到了縣衙了呢。

郵差似乎看出了我的心思, 從懷裡掏出一個沙漏說: 如果漏完了, 縣衙還沒給我們們確認, 那就是丟了, 只有重發了。

過了一個時辰, 我期盼的縣衙的馬終於來了, 裡邊的信裡說: 1號包裹收到了。

“好了” 郵差說, “縣衙確認收到了 1號包裹, 我們們可以再發一個了”, 說著叫來一匹馬, 把第4號包裹發了出去。

我現在有點理解了, 郵差的做法是每次只保證有3個包裹發出去並且沒有確認

又過了一會, 縣衙一下子來了3匹馬, 帶來了2,3,4號包裹的確認。

郵差說: ” 看來你的運氣還不錯, 我在把5,6,7 號發出去“ 說著他把沙漏掉了個個, 重新開始計時。

5號包裹的確認很快來了, 郵差又把8號發了出去, 這樣已經傳送但是沒有確認的包裹還是三個。

現在6,7,8號包裹都發出去了, 可是6號包裹的確認遲遲不來, 我心急如焚。

正在此時, 沙漏漏完了, 我不安的向郵差看去。

他倒是滿不在乎:“ 哎呀, 超時了,有可能是運送6號包裹的馬被老虎吃了, 縣衙沒收到”

“那怎麼辦啊” 我焦急的問。

“我們只好從6號包裹開始重新傳送了, 6號包裹恰好是櫃子的一條腿兒, 回去給你老闆說說, 再做做個櫃子腿兒吧, 一定要保證和之前發出去的一模一樣。”

我問他: “那7,8號包裹呢? 縣衙收到沒有?”

“我們現在還不知道,如果收到了, 他們會暫時存下來。 如果沒收到, 那還得像6號包裹一樣,繼續重發。”

我的忍耐力到了極限, 真想跳起來揍郵差一頓。

冷靜下來, 我想了想說:“不對,你為什麼一下發了3個包裹, 你不能發一個等著確認一個嗎? 我要告你去 。”

郵差說: “隨便你了, 反正你是告不贏的, 這是內閣首輔大人確定的, 我們用的叫滑動視窗協議, 如果視窗N=1 , 即發一個等著確認一個, 那樣就太慢了, 我這個郵差也不能一直被你佔用, 我們把N的值設大一點, 例如N=3, 就是為了能夠像流水線那樣做事, 一邊發包裹, 一邊收確認, 這樣快一點。”

沒辦法,只好回去找老闆做櫃子腿兒, 這耽誤了很多時間。

郵差把6號包裹又發了出去, 再次重新計時。

6號包裹的確認還是沒有收到! 7號的確認也沒收到, 但是8號包裹的確認先收到了!

郵差說: “恩, 不錯,6,7號的確認包裹估計是在路上丟了, 沒關係, 只要縣衙說收到了8號包裹, 暗含的意思就是 6, 7 號都收到了。 要不然他們不會發8號的確認。”

接下來就發9,10號包裹, 這次還行, 總算沒丟, 終於把整個櫃子全發出去了。

內鄉縣衙那邊也把櫃子給組裝了起來。 我的任務總算完成了。

後來我得知, 縣衙其實是收到了第6號包裹,只是他們的發給京城的確認包裹在路上給弄丟了, 我們沒收到, 導致我們重新發了一份。

我算是明白了這所謂的TCP, 無非就是在那些不可靠馬匹運輸的基礎上建立一個可靠的傳送辦法, 基本上就是失敗重發, 受苦的還是我們這些底層老百姓。

我給郵差付了2兩銀子作為費用 , 拉著馬車,頭也不回的走了。

只聽到郵差在後邊喊:“ 歡迎再來, 內閣首輔正在研究新的協議呢, 下次一定要來試試啊。”

我沒理他, 因為我再也不想來到這個鬼地方了!

更多精彩文章, 盡在微信公眾號: 碼農翻身


打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

趣文:TCP/IP 之 大明王朝郵差 趣文:TCP/IP 之 大明王朝郵差

相關文章