RedRain的簡書:http://www.reibang.com/users/29e03e6ff407/latest_articles
TCP和UDP的區(qū)別
TCP/IP中有兩個具有代表意義的傳輸層協(xié)議, 它們分別是TCP和UDP.
- TCP: TCP是面向連接的, 可靠的流協(xié)議.
流就是指不間斷的數(shù)據(jù)結(jié)構(gòu), 你可以把它想象成排水管中的水流. 當應(yīng)用程序采用TCP發(fā)送消息時, 雖然可以保證發(fā)送的順序, 但還是猶如沒有任何間隔的數(shù)據(jù)流發(fā)送給接受端.
TCP為提供可靠性傳輸, 實行
順序控制
或重發(fā)控制
機制. 此外還具有流控制(流量控制)
,擁塞控制
,提高網(wǎng)絡(luò)利用率等眾多功能.
- UDP: 它是不具有可靠性的數(shù)據(jù)報協(xié)議. 細微的處理它會交給上層應(yīng)用去完成.
在UDP的情況下, 雖然可以確保發(fā)送消息的大小, 卻不能保證消息一定會到達, 因此,應(yīng)用有時會根據(jù)自己的需要進行重發(fā)處理.
TCP和UDP的區(qū)分
可能有人會認為, 鑒于TCP是可靠的傳輸協(xié)議, 那么它就一定優(yōu)于UDP. 其實不然TCP與UDP的優(yōu)缺點無法簡單地,絕對地去做比較.那么, 對這兩種協(xié)議應(yīng)該如何加以區(qū)分使用?
TCP 用于在傳輸層有必要實現(xiàn)可靠性的情況. 由于它是面向連接并具備順序控制, 重發(fā)控制等機制的, 所以它可以為應(yīng)用提供可靠傳輸.
而在一方面, UDP主要用于那些對高速傳輸和實時性有較高要求的通信和廣播通信. 我們舉個通過IP電話進行通話的例子. 如果使用TCP, 數(shù)據(jù)在傳輸途中如果丟失會被重發(fā), 但這樣無法流程地傳輸通話人是聲音, 會導(dǎo)致無法進行正常交流. 而采用UDP, 它會不進行重發(fā)處理. 從而也就不會有聲音大幅度延遲到達的問題. 即使有部分數(shù)據(jù)丟失, 也只是會影響某一小部分通話,
因此, TCP和UDP應(yīng)該根據(jù)應(yīng)用的目的按需使用.
套接字 (Socket)
應(yīng)用在使用TCP或UDP時, 會用到操作系統(tǒng)提供的類庫. 這種類庫一般被稱為API.
使用TCP或UDP通信時, 又會廣泛使用到套接字(Socket)的API. 套接字原本是由BSD UNIX開發(fā)的, 但是后被移植到了Windows的Winsock以及嵌入式操作系統(tǒng)中.
應(yīng)用程序利用套接字, 可以設(shè)置對端的IP地址, 端口號,并實現(xiàn)數(shù)據(jù)的發(fā)送和接受.
UDP
由于UDP面向無連接, 它可以隨時發(fā)送數(shù)據(jù). 再加上UDP本身的處理既簡單由高效, 因此經(jīng)常用于以下幾個方面:
- 包總量較少的通信(DNS, SNMP等)
- 視頻,音頻等多媒體通信(即時通信)
- 限定于LAN等特定網(wǎng)絡(luò)中的應(yīng)用通信
- 廣播通信(廣播, 多播)