網絡(二):TCP和UDP差異

前言:以後我博客的主要內容可能是對一些他人的文章用自己的話講述與信息的提煉。

當然我的博客會記錄些我沒有很熟悉的內容,如果你希望我寫些什麼,歡迎評論區留言。

推薦一個很好用的記錄軟件幕布,這裏附上幕布鏈接:https://mubu.com/inv/1813497。有幸看到此文並感興趣的可以選擇使用。注:鏈接是我的推薦鏈接。


轉自即時通訊網:http://www.52im.net/

原作者:MeloDev,本文由即時通訊網重新修訂發佈,感謝原作者的無私分享。


總說:

TCP 是面向連接的、可靠的、有序的、數據流協議

UDP 是無連接的、不可靠的、無序的、數據報協議

細說:

1、數據發送方式不同:TCP、UDP分裝的報頭文件就不同。

TCP是數據流協議。理論上數據流不存在大小的限制。但是由於緩衝區有大小限制,所以用 TCP 發送一段很大的數據,可能會截斷成好幾段,接收方依次的接收。所以可能存在粘包的問題。

UDP是數據報協議。再報頭裏有16位的UDP報文長度。所以最大報文長度也就不能超過 2^16 = 65535。雖然理論上是這麼多,但是再因特網下,還有一個最大傳輸單元MTU的概念。MTU = 576字節。同時減去20字節的IP包頭,8字節的UDP包頭。最後也就是548字節。

2、數據接收順序

TCP因爲有着超時重傳、錯誤重傳等機制,所以保證了TCP接收的數據是有序的。

UDP只管一個一個發,接收方可能會以任意順序接收。

3、可靠性

TCP由於超時重傳、錯誤重傳、流量控制、阻塞控制、慢啓動算法、擁塞避免算法、快速恢復算法等保證了TCP的可靠性。

UDP無連接協議,只管發,對方收沒收到不管。


分析一下UDP什麼情況下會丟包:

  • 數據報分片重組丟失:上述體到MTU概念,也就是說在根據MTU分包的時候可能丟失數據。UDP 本身有 CRC 檢測機制,會拋棄掉丟失的 UDP 包。
  • UDP 緩衝區填滿:當 UDP 的緩衝區已經被填滿的時候,接收方還沒有處理這部分的 UDP 數據報,這個時候再過來的數據報就沒有地方可以存了,自然就都被丟棄了。

那在什麼時候我們非用 UDP 不可呢?

  • 對實時性要求高:比如實時視頻這種情況下,如果使用 TCP,當網絡不好發生重傳時,畫面肯定會有延時,甚至越堆越多。如果使用 UDP 的話,即使偶爾丟了幾個包,但是也不會影響什麼,這種情況下使用 UDP 比較好;
  • 多點通信:TCP 需要保持一個長連接,那麼在涉及多點通訊的時候,肯定需要和多個通信節點建立其雙向連接,然後有時在NAT環境下,兩個通信節點建立其直接的 TCP 連接不是一個容易的事情,而 UDP 可以無需保持連接,直接發就可以了,所以成本會很低,而且穿透性好。這種情況下使用 UDP 也是沒錯的。

UDP不可靠,爲什麼要用UDP?上述問題其實也可以解釋該問題。

  • 由於時代進步,科技發展,網速快了,網絡環境變好,網絡的延遲性,穩定性都不錯,UDP的丟包概率也沒有想象中的誇張。並且UDP性能本身就優於TCP(TCP爲了可靠使用了很複雜的算法,速度難以進一步提升)所以UDP的使用或許會佔到主導地位。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章