1. 程式人生 > 其它 >怎麼理解TCP的面向連線和UDP的面向無連線

怎麼理解TCP的面向連線和UDP的面向無連線

如題,在理解TCP和UDP中,一個是面向連線的傳輸協議,一個是不面向連線的協議。怎麼能夠更好的理解他們的不同。

亞當和夏娃分別生活在兩個山頭,山頭之間是萬丈深淵,亞當採集野果需要分享給夏娃,如果他們之間有一條索道(物理連線),野果可以順著索道滑到夏娃那一邊,那就沒有車小胖什麼事了。

事實上山頭之間沒有索道,但是亞當何等聰明,於是他想出了一個方法,假設亞當需要給夏娃10個野果,否則她會餓死。

連線建立

亞當對著夏娃大喊:愛妃,你聽得到嗎?

夏娃迴應:孩他爹,我聽得到!

亞當接著喊:那好,我扔果子給你吃,你接到果子就喊一聲,一共十個。

運送貨物

於是亞當開始扔第一個,夏娃喊收到了一個。

亞當扔第二個,夏娃喊收到兩個。

超時重傳 ( timeout retransmit)

亞當扔第三個,可是夏娃遲遲沒有迴音,亞當意識到可能果子落到懸崖了,於是重新扔,夏娃喊收到第三個。

Advertised window size = 0

於是亞當連續扔了第四、五、六個,夏娃急了:孩他爹,慢點扔,臣妾忙不過來了…

Advertised window size > 0

於是亞當坐下休息,愛妃又開始叫了:繼續扔吧。

亞當開始扔第七個,夏娃喊收到七個。

關閉連線

終於亞當扔完了,亞當喊:愛妃,果子扔完了,寡人去忙別的了。

夏娃回覆:好的,我也休息一下,再見

亞當:再見

以上的過程類似TCP連線的過程,TCP是一個虛擬連線。

何為虛擬連線?

和物理連線所對應,物理連線是實實在在存在的,看得見摸得著,比如索道。而虛擬連線是不存在的,看不見摸不著,通過雙向的訊息、訊息確認來模擬物理連線。

由於有確認機制,亞當可以確保夏娃可以收到10個果子。

那接下來再談談什麼是無連線的UDP?

亞當和夏娃吵架了,任憑亞當如何大聲喊,夏娃躲在樹林後生悶氣,一聲不響,亞當害怕夏娃餓死,於是開始自說自話朝著夏娃的山頭扔玉米棒子:

一個、兩個、三個…

一共扔了十個,但最終扔到對方山頭到底有幾個,亞當沒有底,也許有的玉米棒子落到懸崖了,但是這個效率高啊,可以連續扔,以前扔10個果子需要一分鐘,現在只需要20秒。

亞當扔果子、扔玉米都有可能扔到懸崖下,但是扔果子為何可以確保對方收到十個?那是因為夏娃收到一個果子,然後喊收到了,如果沒有收到,亞當就重新扔,直到夏娃說收到了。而扔玉米棒子對方沒有確認,所以對於丟棄的情況無法知道,也無法重新扔。