????????前面講過套接字是應用程序進程和運輸層協議之間的接口。在發送端的應用程序將報文推進該套接字。在該套接字的另一側,運輸層協議負責使該報文進入接收進程的套接字。
????????包括因特網在內的很多網絡提供了不止一種運輸層協議。當開發一個應用時,必須選擇一種可用的運輸層協議。如何做出這種選擇呢?最可能的方式是,通過研究這些可用的運輸層協議所提供的服務、選擇一個最能為你的應用需求提供恰當服務的協議。
????????一個運輸層協議能夠為調用它的應用程序提供什么樣的服務呢?大體能夠從四個方面對應用程序服務要求進行分類:可靠數據傳輸、吞吐量、定時和安全性。
????????
1.可靠數據傳輸
???????分組在計算機網絡中可能丟失。例如,分組能夠使路由器中的緩存溢出,或者當分組中的某些比特損壞后可能被丟棄。像電子郵件、文件傳輸、遠程主機訪問、Web文檔傳輸以及金融應用等這樣的應用,數據丟失可能會造成災難性的后果(在后一種情況下,無論對銀行或對顧客都是如此!)。因此,為了支持這些應用,必須做一些工作以確保由應用程序的一端發送的數據正確、完全地交付給該應用程序的另一端。如果一個協議提供了這樣的確保數據交付服務,就認為提供了可靠數據傳輸(reliable data transfer)。運輸層協議能夠潛在地向應用程序提供的一個重要服務是進程到進程的可靠數據傳輸。當一個運輸協議提供這種服務時,發送進程只要將其數據傳遞進套接字,就可以完全相信該數據將能無差錯地到達接收進程。
????????當一個運輸層協議不提供可靠數據傳輸時,由發送進程發送的某些數據可能不能夠到達接收進程。這可能能被容忍丟失的應用(loss-tolerant application)所接受,最值得注意的是多媒體應用,如交談式音頻/視頻,它們能夠承受一定量的數據丟失。在這些多媒體應用中,丟失的數據引起播放的音頻/視頻出現小干擾,而不是致命的損傷。
2.吞吐量
????????可用吞吐量,在沿著一條網絡路徑上的兩個進程之間的通信會話場景中,可用吞吐量就是發送進程能夠向接收進程交付比特的速率。因為其他會話將共享沿著該網絡路徑的帶寬,并且因為這些會話將會到達和離開,該可用吞吐量將隨時間波動。這些觀察導致另一種自然的服務,即運輸層協議能夠以某種特定的速率提供確保的可用吞吐量。使用這種服務,該應用程序能夠請求r比特/秒的確保吞吐量,并且該運輸協議能夠確保可用吞吐量總是為至少r比特/秒。這樣的確保吞吐量的服務將對許多應用程序有吸引力。例如,如果因特網電話應用程序對語音以32kbps的速率進行編碼那么它也必須以這個速率向網絡發送數據,并向接收應用程序交付數據。如果運輸協議不能提供這種吞吐量,該應用程序或以較低速率進行編碼(并且接收足夠的吞吐量以維持這種較低的編碼速率),或它可能必須放棄發送,這是因為對于這種因特網電話應用而言,接收所需吞吐量的一半是幾乎沒有或根本沒有用處的。具有吞吐量要求的應用程序被稱為帶寬敏感的應用(bandwidh-sensitive application)。許多當前的多媒體應用是帶寬敏感的,盡管某些多媒體應用程序可能采用自適應編碼技術對數字語音或視頻以與當前可用帶寬相匹配的速率進行編碼。
????????帶寬敏感的應用具有特定的吞吐量要求,而彈性應用(elastic application)能夠根據情況或多或少地利用可供使用的吞吐量。電子郵件、文件傳輸以及Web傳送都屬于彈性應用。當然,吞吐量是越多越好。
3.定時
????????運輸層協議也能提供定時保證。如同具有吞吐量保證那樣,定時保證能夠以多種形式實現。一個保證的例子如:發送方注入進套接字中的每個比特到達接收方的套接字不遲于100ms。這種服務將對交互式實時應用程序有吸引力,如因特網電話、虛擬環境電話會議和多方游戲,所有這些服務為了有效性而要求數據交付有嚴格的時間限制。
????????對于非實時的應用,較低的時延總比較高的時延好,但對端到端的時延沒有嚴格的約束。
4.安全性
????????最后,運輸協議能夠為應用程序提供一種或多種安全性服務。例如,在發送主機中,運輸協議能夠加密由發送進程傳輸的所有數據,在接收主機中,運輸層協議能夠在將數據交付給接收進程之前解密這些數據。這種服務將在發送和接收進程之間提供機密性,以防該數據以某種方式在這兩個進程之間被觀察到。運輸協議還能提供除了機密性以外的其他安全性服務、包括數據完整性和端點鑒別。