1. 程式人生 > >TCP協議講解二

TCP協議講解二

   慢慢的到了夏天,天氣越來越潮溼了,西安雖然很乾旱,但是在西安到北京的路上陰雨天氣越來越多,大華抱怨到:最近的紙飛機越來越脆弱了,經常就給丟了,煩的一批。我們得想想辦法解決啊。

   小胖說,要不這樣我們在這一路多安插一些人手,讓我們的紙飛機一直在我們的視野中,給他們站好崗。

   大華就急了:哪來那麼多人,給你站崗去,再說了,這麼遠的路,我一千米一個崗,我耗費多大的人力物力。

   小胖說:我不是這個意思嘛,你看你負責你西安那一段,我負責我北京這一段,河北那塊就讓阿水負責吧。鄭州就讓小虎負責。這不就行了麼。動用那些中間節點,當你想個山東發訊息的時候,就讓小明幫個忙,這樣就安全一些咯。

   大華想了想說也不是不可以嘛,那要不咱們就試試。

   小胖又補充到但是這樣的話,如果我們通道暫時一段時間不傳送包裹的話,那這個通道要浪費很多的人力物力啊。

   大華:“這不是沒辦法的辦法麼,先試試,錢能解決的問題就不是問題。”

這就是最初的虛電路傳輸方,就和我們抗日時期的專線電話一樣,除了傳送和接受資料的兩端,沒有其他人使用它,頻寬是不進行共享的。

   實行了一段時間之後,雖然訊息能夠傳輸到了,但是大華撐不住了,找小胖說,不行不行,這太浪費人力和財力了,我的菜鳥驛站已經發不起工資了,要換一個。於是小胖和大華都把大家叫來,一起商量一下怎麼辦,小虎小明他們也都說到,不行這確實太耗費財力了,

  這時候小虎說,我聽說江蘇那邊他們就需要人力來站崗,他們把包裹給了馬和駱駝,就可以了。

怎麼可能呢?馬和駱駝誰認識路?這不是胡鬧麼?

不不不,這些馬都是經過訓練的,他們只會沿著一條路一直走,他們會在最初的時候給馬選好一條路,讓馬走下去,當然,不是一條路直接通到目的地,但是他們會在岔路口設立一些小驛站,無論哪個方向的馬來了之後,他們都會讓馬歇一會,然後看看馬身上的包裹是往那個方向走的,他們就會把馬帶到正確的道路上,馬就繼續沿著這次選好的路繼續往下走,在寫一個岔路口會有新的驛站等著他。

小明又問了那你說即使一小段路,也有可能會有人把他們的馬牽走啊,那咋辦。

所以說呢,他們會還有一個機制叫做失敗重傳,當發現,他們的資料走了好久還沒有到,他們就預設這批資料丟掉了,就重新發。

那這也太浪費了吧。

他們也這麼認為,所以他們每次都讓馬少拉一點,用不同的馬來送貨,然後給貨編上號碼。在目的地那邊看看哪個編號的貨沒有收到就再發送哪個編號的貨。

大華說到:這就有意思了,他們不需要事先建立連結,甚至每個貨走的路徑都是不一樣的。是中間小驛站的人來決定他們走哪個方向的。

小虎繼續說到,對,路徑不同還有可能導致他們傳送接收的順序不同,他們用這種方法,中間的小驛站是不承擔責任的,他們完全可能導致包裹的亂序,重複甚至丟失,他說的可靠是由起點和終點來建立的,就是我沒收到會告訴你,然後再讓你重發。

那這個失敗重傳機制到底是怎麼實現的,這才是一個重點啊。他們那邊想把這個專利賣給我們可是實在是太貴了, 我們只能自己來解決了啊。

阿水說:不如這樣,我們傳送一個東西,都讓那邊給我們回覆一個確認訊息,這樣如果我傳送了一個數據,你沒給我回復我就認為你沒收到,你給我回復了我就認為你已經安全收到了。

這確實是一個辦法啊。

小明說:但是還有一個問題啊,如果你的反饋機制出現了問題咋辦,你不能好好給我回復了,我傳送了一個數據包之後,你不能給我回復,我就會再重新發送一個數據包,你這時候收到了你咋知道我是新資料包還是我再次給你重新發送的資料包。

這就是你的問題了啊。剛剛明明說了,他們會給資料進行編號啊。我先發送編號是1的資料包,然後我就等你1的確認,等收到了我就給你發2資料包啊。

但是那你說,如果你的確認我遲遲收不到咋辦,那我就一直等著你?我不幹別的了?

大華終於說話了,那咱們可以這樣,我們一人配一個沙漏,我們現在給你傳送包裹的時候,就讓他開始計時,如果說沙漏都漏完了,你還沒有給我回機制,我就當有問題了,我再給你重新發一份資料包1.

小胖也接著說道,那咱們這不是每次只能傳送一個數據了麼。你要是給我們多配送幾個沙漏,咱不就能多傳送幾個資料了麼。

愚蠢,這是沙漏的問題麼。這很複雜很容易讓傳送方和接收方混亂的不過我聽說有個機制叫視窗。

他們是這麼弄得。他們設定了以一個視窗大小,比如是4,傳送視窗只能同時傳送4個,如果四個滿了,就得等確認回來,回來一個就能再發一個,回來兩個就能發一對。

但是這樣也太蠢了吧。你明明都收到3,4了你還得扔掉

對確實很可惜,不過最初設計的時候為了簡單就設計了這麼一個叫做回退N步的協議

很顯然啊,你們得改進一下,哪些丟了再去傳哪些啊。

那我們這樣設計

 

這樣我們就可以只發送丟失的資料包2,等2來了之後把2和之前快取的3,4一起交給接收端。這樣就實現了,這就是我們選擇性重傳。