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