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

TCP協議講解一

我想給在北京上學的同學發一份包裹,所以我就去了菜鳥驛站找到了大華。

我跟他說:“大華我要往北京的同學那裡發一份包裹你幫幫我唄”。

大華說:“好,可是北京那邊有這麼多通道你準備走哪一個通道?”

我:“那就走80這個通道吧(TCP協議預設埠80)”

我跟著大華來到了菜鳥驛站的後邊,大華說不急,你先等我跟北京的小胖建立一個連線再說。大華拿出一張紙寫了“發貨地址:西安市233號,收貨地址:北京80號”把信紙放到信封裡之後就疊成紙飛機扔了出去。大華就開始坐著等,等了十分鐘之後一個紙飛機飛了過來,上邊寫著“西安西安,你好我是北京,我收到你的回信了,你那邊有個序號是4396吧,我這個序號是7777”

我很激動:“那咱們就準備發貨吧”

大華:“不行,咱們剛剛給他發了訊息,他給咱們回覆了訊息,但是萬一這個訊息是咱們兩年之前發的,紙飛機剛剛才飛到,他誤以為咱們要跟他發包裹怎麼辦,所以他必須要有一個我的確認,確認我現在確實是想發訊息。所以我再給他寫一封信,大華拿來紙開始寫北京北京,我是西安,我已經看到你的回信了,也明白了你的序號,我這就開始發訊息了,寫完疊成紙飛機就發出去了,這樣連結就算是建立了”

我:“這就是連結嗎?我咋沒看見你們有啥連結,只看見你們在扔紙飛機”。

大華:“這就是TCP連結,他是一個虛擬的,連結狀態並不會被路徑上邊的儲存,用來維持靠的是連結資訊的兩端,也就是我和北京小胖來維持的”

我:“你這三封信是不是有點過於複雜和冗餘了?”

大華:“愚蠢,這就是TCP的三次握手,你是不知道他的重要性, 有了它網路傳輸可靠了不少呢,你看啊,我給你分析一下,這三次握手不僅要建立連結,還得讓我們互相明白,我們都是正常的,不存在問題的兩端,我第一次給小胖發訊息,當小胖收到之後,就明白,我大華的發信能力是沒有問題的,他小胖的收信能力是沒有問題的,但是他不清楚我的收信能力和他的發信能力,然後他給我發了一個,當我收到小胖回我的訊息之後我就買明白,我的發信和收信都成功了,都沒有問題,但是這時候小胖還是不太確定自己的發信和我的收信,我就再給他一個ACK,告訴他我收到你的訊息了,放心吧, 我能正常收,你的傳送也沒問題。”

之後大華弄了一個大紙飛機,說來把你的東西放上來。

我:“你這麼辛辛苦苦建立的連結,你自己不來發我的包裹?”

大華:“我才不去呢,西安到北京這一路全是山,人煙稀少,我要是再遇到個野人野獸啥的,我在這不就交代了麼,讓紙飛機去,就算紙飛機沒送到中途出了意外,也沒有啥大損失”

那這紙飛機咋知道我要發給你啊,咋知道送到哪?

這你不用擔心,我們菜鳥中途有很多的網點,它們會沿著我們給他們設定好的路線開始走,每到一個網點的時候,網點的小紅、小藍、小粉它們看到我在紙飛機上做的標記,它們就知道該讓紙飛機繼續往哪個方向飛,這樣一點一點往北京小胖那邊靠攏,(這些網點就是我們的路由器)

那萬一這飛機,半路被熊孩子抓走了,或者下雨掉在半路上了,可咋辦。我這些特產丟了我還得重新再去買,很麻煩的。

這就是我們的問題咯,這也不能避免,到時候我們會有解決辦法的。你這貨 太大了,分開發,分成一個個的小份,不然飛機帶不動啊。然後給你的這些小部件都編一個號碼,不然小胖太笨了,萬一組裝不起來咱們就算是白忙活了。

按規定啊, 我這次只能先給你發前三個,說完大華弄來三個紙飛機,把我編號1.2.3的包裹放上去了。

我咋知道這些東西到底有沒有到北京那邊啊。

來,看見這個沙漏沒,如果說這個沙漏漏完了,小胖還沒給確認說他收到了,那就是你倒黴,貨丟了。

過了二十分鐘,一個紙飛機落了下來,大華趕緊撿起來,上邊寫著:大華,大華,一號包裹收到了。大華拿起我的四號包裹就又放到紙飛機上,讓他又走了。所以大華每次都是保證有三個包裹還沒有確認的包裹在路上,等了一會一下了來了三架紙飛機,2,3,4小胖都收到了。之後又把5,6,7直接傳送了過去,等了一會5小胖收到了,然後大華直接抓起8發了出去,我倆就在這坐著等,可是等著等著就就發現,這次的沙漏都快完了,6號的確認訊息還沒回來,我開始慌了...這玩意不會給我整丟了吧。大華一臉淡定的說,沒準是渭南或者石家莊下雨了,紙飛機沒了,小胖沒收到。你去想想6號包裹裡邊裝的啥,你趕緊再去買。

那7,8收到沒有?

我們現在還不確定,如果他倆也遇到雨了,那你也得重新再去買。

那你幹啥每次都給我發三個,你就不能每次一個一個來,確認收到了再去發下一個。

大華說,別喊了,這又不是我定的,這是我們老闆定的,這叫滑動視窗協議,你說我們要是一個一個發,現在沒準才發到你的第三個包裹,你說慢不慢,而且你說我傳送完一個包裹到收到確認訊息這段時間我幹啥,我們要是一次發三個,這樣大家都能不閒著,速度快不少呢

我趕緊去買了,兩袋特產又編好6給了大華。

大華就重新把我的6放到紙飛機上發了出去,

等把這十個包裹都發完已經晚上了。

我也明白了,TCP協議就是在那些不靠譜的紙飛機上做了一些相對可靠的機制,我能知道你紙飛機是不是安全的到了,是不是發給正確的人了。

TCP全稱是Transmission Control Protocol,是工作在傳輸層上的協議,TCP協議是面向連線的,可靠的,面向資料流的,可以看到上邊,我和大華在給小胖傳送資料之前,我們先通過三次握手來建立了連線,這就是我們所說的面向連線有連結,可靠是因為小胖到底有沒有收到我們資料,我們會有確認機制,收到了自然皆大歡喜,如果要是沒有收到我們也可以及時給他再重新發送一份,而面向資料流就是我和大華在傳送資料之前,把我們的資料給拆分了,沒有一整份資料直接全都發送過去。自然這些特點有時候會給我們帶來極大的安全感,但是在有些方面TCP協議並不是全都是優點。