Java網絡編程之傳輸控制協議(一)

一、概述
TCP提供的網絡通訊接口與用戶數據報協議(UDP)截然不同。TCP的特性使網絡編程很具魅力,而且它刪除了UDP的很多干擾部分(例如數據包的排序和丟失),簡化了網絡通訊。UDP關心的是數據包的傳輸,而TCP關注的是建立網絡連接,并在網絡連接中發送和接收字節流。
數據包可以通過網絡用多種方法發送,并且它們到達的時間可能不同。這有利于性能的提高和程序的健壯性,因為單個包的丟失不一定干擾其它包的傳輸。但是,這樣的系統使程序員必須作更多的工作,他們必須保證數據的送達(delivery)。TCP通過對發送和次序的保證消除了這些額外的工作,為客戶端和支持兩路(two-way)通訊的服務器之間提供了可靠的字節通訊流。它在兩臺計算機之間建立了"虛擬連接",可以通過虛擬連接發送數據流。

圖1:TCP建立虛擬連接傳輸數據
TCP使用更低層的(lower-level)的IP通訊協議在兩臺計算機之間建立連接。這種連接提供了一個允許字節流發送和接收的接口,并且采用透明的方式把數據轉換為IP數據報。數據報(datagram)的問題之一是不能保證數據包到達目的地。TCP解決了這個問題,它提供了有保證的數據字節的送達。當然,網絡錯誤影響了送達也是可能的,但是TCP通過類似重新發送數據包解決了這種實現的問題,并且只在情況很嚴重(例如沒有到網絡主機的路由或連接丟失了)的時候才提醒程序員。