特點:
1.面向無連接的協議;
2.UDP報頭只有8字節。
簡介:
1.傳輸數據前源端和終端不需要連接,當它傳送數據時簡單地去抓取來自應用程序的數據,并盡可能快的把它。換句話說就是,客戶端向服務器發送信息,客戶端只需要給出服務器的ip地址和端口號,然后將信息封裝到一個待發送的報文中并且發送出去。至于服務器端是否存在,或者能否收到該報文,客戶端根本不用管。
2.在發送端,UDP傳送數據的速度僅僅受程序生成數據的速度、計算機能力和傳輸帶寬的限制。
3.在接收端,UDP把每個消息放到隊列中,應用程序每次從隊列中讀取一個消息段。
4.由于傳輸數據不需要建立連接,因此也就不用維護連接狀態,包括收發狀態等,因此一臺服務器可以同時向多個客戶機傳輸相同的消息。
5.UDP包的標題很短,只有8個字節,相對于TCP的20個字節信息包額外的開銷小很多。
6.吞吐量不受擁擠算法的調節,只受應用程序生成數據的速度、傳輸帶寬、源端和終端性能的限制。
7.UDP使用盡最大努力交付,即不保證可靠交付,所以主機不需要維護復雜的連接狀態表。
8.UDP是面向報文的。發送方的UDP對應用程序交下來的報文,添加了首部后直接交給下層的IP層,既不拆分,也不合并,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。
使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常,其實“ping”命令的原理就是向對方主機發送UDP數據包,然后對方主機確認收到數據包,如果數據包是否到達的消息及時反饋回來,那么網絡就是通的。
優點:
1.傳輸速率快,不需要像TCP一樣建立連接,傳送數據時沒有確認、重傳、擁塞控制等機制。
2.較安全,由于沒有TCP的一些機制,被攻擊的漏洞少。
缺點:
1.不可靠,不穩定,由于沒有TCP的機制,在傳送數據時,如果網絡不好,容易出現丟包的情況。
用UDP協議通訊時怎樣得知目標機是否獲得了數據包?
????????偽造TCP的做法,每發一個UDP包時,都在里面加入一個seq序號,接收方接收到包后,將seq回復給發送方。如果在發送方指定的時間內沒有收到回應,說明丟包了。
TCP與UDP的區別
TCP | UDP |
---|---|
TCP面向有連接的通信服務 | UDP非面向連接的通信服務 |
TCP提供可靠的通信傳輸 | UDP提供不可靠的通信傳輸,會丟包 |
TCP保證數據順序 | UDP不保證 |
TCP數據無邊界 | UDP有邊界 |
TCP速度慢 | UDP速度快 |
TCP面向字節流 | UDP面向報文 |
TCP一對一 | UDP可以一對一,可一對多 |
TCP報文頭至少20個字節 | UDP報文頭8個字節 |
TCP有流量控制、擁塞控制 | UDP沒有 |
問題:
為什么UDP比TCP快
1.TCP需要三次握手連接;
2.TCP有流量控制、擁塞控制。為什么TCP比UDP可靠
1.TCP是面向連接,建立連接后才發送數據;而UDP則不管對方存不存在都會發送數據。
2.TCP有確認機制,接收端每收到一個正確包都會回應給發送端;超時或者數據包不完整的時候發送端會重傳。UDP沒有,因此容易丟包。什么時候使用TCP
????????當對網絡通訊質量有要求的時候。比如:把整個數據完整無誤的發送給對方,這往往用于一些要求可靠的應用,如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸協議。在日常生活中,常見的TCP協議的應用有:瀏覽器、用HTTP的FlashFXP,用FTP的OutLook,用POP、SMTP 的Putty,用Telnet、SSH的QQ文件傳輸。什么時候應該使用UDP
????????當對網絡通訊質量要求不高的時候,要求網絡通信速度盡量快,這時用UDP。日常常見的使用UDP協議的應用:QQ語音,QQ視頻,TFTP。TCP無邊界
????????客戶端將數據分多次發生數據給服務器,如果服務器的數據緩沖區夠大,那么服務器會在客戶端發送完數據后一次性接收過來,所以是無邊界的。UDP有邊界
????????保護消息邊界,就是指傳輸協議把數據當作一條獨立的消息在網上傳輸,接收端只能接收獨立的消息.也就是說存在保護消息邊界,接收端一次只能接收發送端發出的一個數據包.
????????而面向流則是指無保護消息保護邊界的,如果發送端連續發送數據, 接收端有可能在一次接收動作中,會接收兩個或者更多的數據包.
????????客戶端每發送一次,服務器端就會接收一次,也就是說發送多少次就會接收多少次,因此是有邊界的。例如,我們連續發送三個數據包,大小分別是2k, 4k , 8k,這三個數據包,都已經到達了接收端的網絡堆棧中,如果使 用UDP協議,不管我們使用多大的接收緩沖區去接收數據,我們必須有 三次接收動作,才能夠把所有的數據包接收完.而使用TCP協議,我們 只要把接收的緩沖區大小設置在14k以上,我們就能夠一次把所有的 數據包接收下來.只需要有一次接收動作。
參考:TCP與UDP