在TCP/IP的傳輸層,提供了兩種數(shù)據(jù)傳輸服務(wù),即TCP和UDP。在Internet網(wǎng)絡(luò)架構(gòu)中,傳輸層占有非常重要的地位,需要從兩種傳輸服務(wù)的數(shù)據(jù)單元格式來分析。
首先,傳輸層中有一個非常重要的概念參考,即端口。1.端口
端口用于區(qū)分不同的應(yīng)用程序進程或不同的連接號。在實際應(yīng)用中,經(jīng)常會同時打開多個IE瀏覽器窗口來瀏覽不同站點的網(wǎng)絡(luò)資源,或者還有其他的網(wǎng)絡(luò)應(yīng)用窗口。在計算機系統(tǒng)中,每打開一個應(yīng)用程序,就意味著至少打開了一個進程(什么是進程,請參考第11章問題4-1),打開多個IE窗口就是打開多個進程.那么,當應(yīng)用層的各個進程產(chǎn)生的數(shù)據(jù)報被傳輸層服務(wù)時,就會遇到TCP或UDP同時為多個應(yīng)用進程提供并發(fā)服務(wù)的問題,即多個應(yīng)用進程可能需要通過相同的TCP 或UDP 協(xié)議。服務(wù)接入點傳輸數(shù)據(jù),見圖4-6。
為了區(qū)分上層不同的應(yīng)用進程或連接,當應(yīng)用層協(xié)議與傳輸層協(xié)議交互時,傳輸層使用不同的端口號來描述上層應(yīng)用在傳輸層的通信路徑。因此,端口號對于上層應(yīng)用程序來說是一個非常重要的識別標志。端口號分為兩類:一類是知名端口,一類是動態(tài)端口。
1)知名端口
眾所周知的端口(Well Known Ports): 來自。到1023。這些端口與某些服務(wù)緊密綁定,并指示該服務(wù)的應(yīng)用層協(xié)議。該類端口采用全局分配,屬于集中控制方式。經(jīng)認可的中央機構(gòu)根據(jù)用戶服務(wù)需要進行統(tǒng)一分配,并向社會公布結(jié)果。比如80端口明確告知所有客戶,應(yīng)用層是HTTP協(xié)議通信,21端口是FTP協(xié)議通信等。如果有一個服務(wù)器提供web服務(wù),希望全世界的用戶都能訪問它的資源,它必須打開80端口并在這個端口上等待,等待隨時為客戶提供HTTP服務(wù)。
2)動態(tài)端口
動態(tài)端口(Dynamic Ports) :從1024到65535。之所以稱為動態(tài)端口,是因為它們一般不會固定分配給特定的應(yīng)用程序。這類端口采用本地分配,是一種動態(tài)控制方式。一個進程如果需要傳輸層服務(wù),首先要向本地操作系統(tǒng)申請一個端口,操作系統(tǒng)從可用的動態(tài)端口號中隨機返回一個本地未使用的端口號。應(yīng)用獲取的端口號是綁定的。當進程關(guān)閉時,占用的端口號也被釋放。
【示例】客戶端啟動Yahoo Messger應(yīng)用時,客戶端至少要啟動兩個會話進程,隨機獲取的兩個動態(tài)端口分別連接到Y(jié)ahoo服務(wù)器和賬戶驗證中心。例如, 的進程連接是與Yahoo 的本地端口2192。服務(wù)器5050端口的連接,另一個過程是本地2196端口與雅虎賬號驗證中心433端口的連接。
2192和2196是客戶端動態(tài)分配的端口號,433是雅虎賬號驗證中心的服務(wù)端口,5050是雅虎服務(wù)器的服務(wù)端口(這里服務(wù)器端口5050是動態(tài)端口號指定的,實際應(yīng)用中可能會出現(xiàn)的情況有很多,比如QQ應(yīng)用等)。
當客戶端和在線好友通過YahooMessger聊天窗口進行文字聊天時,會在客戶端建立一個新的會話進程,比如:的本地5101端口與對方4548端口的連接。如果想給離線的某位好友留言,消息會從本地2192端口和雅虎服務(wù)器端口5050建立的連接投遞到雅虎服務(wù)器,再由對方投遞給對方。雅虎服務(wù)器代理。
常見的端口號如表4-1所示。2. TCP/UDP協(xié)議
1)TCP協(xié)議
TCP(Transmission Control Protocol)傳輸控制協(xié)議是一種面向連接的、可靠傳輸?shù)耐ㄐ艆f(xié)議。
什么是面向連接,要在對等傳輸層之間傳輸數(shù)據(jù),發(fā)送方和接收方首先要建立數(shù)據(jù)傳輸?shù)倪壿嬐ㄐ沛溌罚═CP的“三次握手”,見下文解釋),之后數(shù)據(jù)傳輸完畢,需要斷開這個連接。可靠傳輸?shù)脑蚴荰CP可以保證發(fā)送方和接收方之間數(shù)據(jù)傳輸?shù)耐暾裕ú粊G失,不誤傳),即接收方每收到一個來自發(fā)送方相應(yīng)層的TCP數(shù)據(jù)報,經(jīng)過驗證無誤,必須向發(fā)件人發(fā)回確認信息,否則發(fā)件人將重新發(fā)送。這種數(shù)據(jù)傳輸方式就像我們?nèi)粘I钪写螂娫捯粯?。首先,我們需要建立通話連接,然后開始通話,最后斷開連接。因此,這種服務(wù)方式的數(shù)據(jù)傳輸適用于一次傳輸大量數(shù)據(jù)且需要可靠傳輸?shù)膽?yīng)用。
2) UDP協(xié)議UDP(User Datagram Protocol)用戶數(shù)據(jù)報協(xié)議,是一種面向非連接的、不可靠傳輸?shù)暮唵瓮ㄐ艆f(xié)議。
UDP的無連接通信,即發(fā)送端UDP收到上層應(yīng)用傳遞下來的數(shù)據(jù)報,添加UDP協(xié)議頭信息后就直接向下交付給網(wǎng)絡(luò)層。其不可靠傳輸,即接收端收到UDP數(shù)據(jù)報后,對校驗沒問題的數(shù)據(jù)報直接向上層提交報文數(shù)據(jù),不需要向發(fā)送端回送確認;而校驗有問題的數(shù)據(jù)報則直接丟掉。因丟掉的數(shù)據(jù)報不需要重傳,故無法保證傳送數(shù)據(jù)的完整性.這種數(shù)據(jù)傳輸方式就如同我們?nèi)粘I钪型ㄟ^郵局郵遞普通信件一樣,發(fā)信方將信件投人某郵遞信筒即可,不用關(guān)心信件是否能送到;收信方收到信件后也不裕要向發(fā)信方確認。
這種服務(wù)方式的數(shù)據(jù)傳輸適合一次傳輸小量、可靠性要求不高的應(yīng)用中。
如圖4-7所示,應(yīng)用層要求傳輸層提供可靠傳輸服務(wù)的有HTTP, FTP, Telnet和SMTP等,它們都需要高度的可靠性和完整性。
而TFTP以及SNMP在兩端傳輸?shù)臄?shù)據(jù)均是很簡單的數(shù)據(jù),如網(wǎng)絡(luò)設(shè)備配置信息或網(wǎng)絡(luò)管理信息,通過UDP能達到基本的數(shù)據(jù)傳輸需求。還有像QQ等即時通信工具,在網(wǎng)絡(luò)通信良好的情況下,語音數(shù)據(jù)均優(yōu)先使用UDP進行傳輸。因為使用UDP可減少信道的額外開銷,不需要建立連接、維持連接,更不需要在端到端之間傳遞確認消息;UDP協(xié)議頭本身比TCP小很多,也減少了信道占用帶寬,提高了信道的數(shù)據(jù)傳輸速率。
我們專注高端建站,小程序開發(fā)、軟件系統(tǒng)定制開發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開發(fā)、各類API接口對接開發(fā)等。十余年開發(fā)經(jīng)驗,每一個項目承諾做到滿意為止,多一次對比,一定讓您多一份收獲!