TCP/IP 中有兩個具有代表性的傳輸層協(xié)議,分別是 TCP 和 UDP:
TCP 是面向連接的、可靠的流協(xié)議。流就是指不間斷的數(shù)據(jù)結(jié)構(gòu),當應用程序采用 TCP 發(fā)送消息時,雖然可以保證發(fā)送的順序,但還是猶如沒有任何間隔的數(shù)據(jù)流發(fā)送給接收端。TCP 為提供可靠性傳輸,實行“順序控制”或“重發(fā)控制”機制。此外還具備“流控制(流量控制)”、“擁塞控制”、提高網(wǎng)絡利用率等眾多功能。
UDP 是不具有可靠性的數(shù)據(jù)報協(xié)議。細微的處理它會交給上層的應用去完成。在 UDP 的情況下,雖然可以確保發(fā)送消息的大小,卻不能保證消息一定會到達。因此,應用有時會根據(jù)自己的需要進行重發(fā)處理。
TCP 和 UDP 的優(yōu)缺點無法簡單地、絕對地去做比較:TCP 用于在傳輸層有必要實現(xiàn)可靠傳輸?shù)那闆r;而在一方面,UDP 主要用于那些對高速傳輸和實時性有較高要求的通信或廣播通信。TCP 和 UDP 應該根據(jù)應用的目的按需使用。
端口號
數(shù)據(jù)鏈路和 IP 中的地址,分別指的是 MAC 地址和 IP 地址。前者用來識別同一鏈路中不同的計算機,后者用來識別 TCP/IP 網(wǎng)絡中互連的主機和路由器。在傳輸層也有這種類似于地址的概念,那就是端口號。端口號用來識別同一臺計算機中進行通信的不同應用程序。因此,它也被稱為程序地址。
根據(jù)端口號識別應用
一臺計算機上同時可以運行多個程序。傳輸層協(xié)議正是利用這些端口號識別本機中正在進行通信的應用程序,并準確地將數(shù)據(jù)傳輸。
通過IP地址、端口號、協(xié)議號進行通信識別
僅憑目標端口號識別某一個通信是遠遠不夠的。
通過端口號、IP地址、協(xié)議號進行通信識別
?① 和 ② 的通信是在兩臺計算機上進行的。它們的目標端口號相同,都是80。這里可以根據(jù)源端口號加以區(qū)分。③和 ① 的目標端口號和源端口號完全相同,但它們各自的源 IP 地址不同。此外,當 IP 地址和端口號全都一樣時,我們還可以通過協(xié)議號來區(qū)分(TCP 和 UDP)。
端口號的確定
標準既定的端口號:這種方法也叫靜態(tài)方法。它是指每個應用程序都有其指定的端口號。但并不是說可以隨意使用任何一個端口號。例如 HTTP、FTP、TELNET 等廣為使用的應用協(xié)議中所使用的端口號就是固定的。這些端口號被稱為知名端口號,分布在 0~1023 之間;除知名端口號之外,還有一些端口號被正式注冊,它們分布在 1024~49151 之間,不過這些端口號可用于任何通信用途。
時序分配法:服務器有必要確定監(jiān)聽端口號,但是接受服務的客戶端沒必要確定端口號。在這種方法下,客戶端應用程序完全可以不用自己設置端口號,而全權(quán)交給操作系統(tǒng)進行分配。動態(tài)分配的端口號范圍在 49152~65535 之間。
端口號與協(xié)議
端口號由其使用的傳輸層協(xié)議決定。因此,不同的傳輸層協(xié)議可以使用相同的端口號。此外,那些知名端口號與傳輸層協(xié)議并無關(guān)系。只要端口一致都將分配同一種應用程序進行處理。
UDP
(1)UDP 不提供復雜的控制機制,利用 IP 提供面向無連接的通信服務。
(2)并且它是將應用程序發(fā)來的數(shù)據(jù)在收到的那一刻,立即按照原樣發(fā)送到網(wǎng)絡上的一種機制。即使是出現(xiàn)網(wǎng)絡擁堵的情況,UDP 也無法進行流量控制等避免網(wǎng)絡擁塞行為。
(3)此外,傳輸途中出現(xiàn)丟包,UDP 也不負責重發(fā)。
(4)甚至當包的到達順序出現(xiàn)亂序時也沒有糾正的功能。
(5)如果需要以上的細節(jié)控制,不得不交由采用 UDP 的應用程序去處理。
(6)UDP 常用于一下幾個方面:1.包總量較少的通信(DNS、SNMP等);2.視頻、音頻等多媒體通信(即時通信);3.限定于 LAN 等特定網(wǎng)絡中的應用通信;4.廣播通信(廣播、多播)。
TCP
(1)TCP 與 UDP 的區(qū)別相當大。它充分地實現(xiàn)了數(shù)據(jù)傳輸時各種控制功能,可以進行丟包時的重發(fā)控制,還可以對次序亂掉的分包進行順序控制。而這些在 UDP 中都沒有。
(2)此外,TCP 作為一種面向有連接的協(xié)議,只有在確認通信對端存在時才會發(fā)送數(shù)據(jù),從而可以控制通信流量的浪費。
(3)根據(jù) TCP 的這些機制,在 IP 這種無連接的網(wǎng)絡上也能夠?qū)崿F(xiàn)高可靠性的通信( 主要通過檢驗和、序列號、確認應答、重發(fā)控制、連接管理以及窗口控制等機制實現(xiàn))。
三次握手
TCP 提供面向有連接的通信傳輸。面向有連接是指在數(shù)據(jù)通信開始之前先做好兩端之間的準備工作。所謂三次握手是指建立一個 TCP 連接時需要客戶端和服務器端總共發(fā)送三個包以確認連接的建立。在socket編程中,這一過程由客戶端執(zhí)行connect來觸發(fā)。