兩類傳輸協議:TCP,UDP
TCP
TCP是Transfer Control Protocol(傳輸控制協議)的簡稱,是一種面向連接的保證可靠傳輸的協議。
在TCP/IP協議中,
IP層主要負責網絡主機的定位,數據傳輸的路由,由IP地址可以唯一確定Internet上的一台主機。
而TCP層則提供面向應用的可靠的或非可靠的數據傳輸機制,這是網絡編程的主要對象,一般不需要關心IP層是如何處理數據的。
通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。
發送方和接收方的成對的兩個socket之間必須建立連接,以便在TCP協議的基礎上進行通信。
當一個socket(通常都是server socket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數據傳輸,雙方都可以進行發送或接收操作。
TCP是一個基於連接的協議,它能夠提供兩台計算機之間的可靠的數據流。
HTTP、FTP、Telnet等應用都需要這種可靠的通信通道。
UDP
UDP是User Datagram Protocol的簡稱,是一種無連接的協議。
UDP是從一台計算機向另一台計算機發送稱為數據報的獨立數據包的協議,該協議並不保證數據報是否能正確地到達目的地,它是一個非面向連接的協議。
每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達時間以及內容的正確性都是不能保證的。
TCP和UDP的比較
使用UDP時,每個數據報中都給出了完整的地址信息,因此無需建立發送方和接收方的連接。
對於TCP協議,由於它是一個面向連接的協議,在socket之間進行數據傳輸之前必然要建立連接,所以在TCP中多了一個連接建立的時間。
使用UDP傳輸數據時是有大小限制的,每個被傳輸的數據報必須限定在64KB之內。
TCP沒有這方面的限制,一旦連接建立起來,雙方的socket就可以按統一的格式傳輸大量的數據。
UDP是一個不可靠的協議,發送方所發送的數據報並不一定以相同的次序到達接收方。
TCP是一個可靠的協議,它確保接收方完全正確地獲取發送方所發送的全部數據。
可靠的傳輸是要付出代價的,對數據內容正確性的檢驗必然占用計算機的處理時間和網絡的帶寬。因此TCP傳輸的效率不如UDP高。
TCP在網路通信上有極強的生命力,例如遠程連接(Telnet)和文件傳輸(FTP)都需要不定長度的數據被可靠地傳輸。
相比之下UDP操作簡單,而且僅需要較少的監護,因此通常用於局域網高可靠性的分散系統中client/server應用程序。
此處推薦書籍《TCP/IP詳解》,分三卷。
TCP/IP模型
TCP/IP模型包括四個層次:
應用層
傳輸層
網絡層
網絡接口
TCP/IP與OSI參考模型的對應關系:
JDK中的網絡類
通過java.net包中的類,java程序能夠使用TCP或UDP協議在互聯網上進行通訊。
Java通過擴展已有的流式輸入/輸出接口和增加在網絡上建立輸入/輸出對象特性這兩個方法支持TCP/IP。
Java支持TCP和UDP協議族。
TCP用於網絡的可靠的流式輸入/輸出。
UDP支持更簡單的、快速的、點對點的數據報模式。
參考資料
聖思園張龍老師Java SE系列視頻教程。