TCP:Transmission Control Protocol 傳輸控制協議
首先,TCP建立連接之后,通信雙方都同時可以進行數據的傳輸,其次,他是全雙工的;在保證可靠性上,采用超時重傳和捎帶確認機制。
在流量控制上,采用滑動窗口協議,協議中規定,對于窗口內未經確認的分組需要重傳。
在擁塞控制上,采用慢啟動算法。
注解:該協議主要用于在主機間建立一個虛擬連接,以實現高可靠性的數據包交換。IP協議可以進行IP數據包的分割和組裝,但是通過IP協議并不能清楚地了解到數據包是否順利地發送給目標計算機。而使用TCP協議就不同了,在該協議傳輸模式中在將數據包成功發送給目標計算機后,TCP會要求發送一個確認;如果在某個時限內沒有收到確認,那么TCP將重新發送數據包。另外,在傳輸的過程中,如果接收到無序、丟失以及被破壞的數據包,TCP還可以負責恢復。
傳輸控制協議(Transmission Control Protocol,TCP)是一種面向連接的、可靠的、基于字節流的運輸層通信協議,通常由IETF的RFC 793說明。在簡化的計算機網絡OSI模型中,它完成運輸層所指定的功能。
什么是TCP/IP?
TCP/IP(Transmission Control Protocol/Internet Protocol) 即傳輸控制協議/網間協議,是一個工業標準的協議集,它是為廣域網(WANs)設計的。它是由ARPANET網的研究機構發展起來的。
有時我們將TCP/IP描述為互聯網協議集\"Internet Protocol Suite\",TCP和IP是其中的兩個協議(后面將會介紹)。由于TCP和IP是大家熟悉的協議,以至于用TCP/IP或IP/TCP這個詞代替了整個協議集。這盡管有點奇怪,但沒有必要去爭論這個習慣。例如,有時我們討論NFS 是基于TCP/IP時,盡管它根本沒用到TCP(只用到IP,和另一種交互式 協議UDP而不是TCP)。
Internet是網絡的集合,包括ARPANET、NSFNET、分布在各地的局域網、以及其它類型的網絡,如(DDN,Defense Data Network美國國防數據網絡),這些統稱為Internet。所有這些大大小小的網絡互聯在一起。(因為大多數網絡基本協議是由DDN組織開發的,所以以前有時DDN與Internet在某種意義上具有相同的含義)。網絡上的用戶可以互相傳送信息,除一些有授權限制和安全考慮外。一般的講,互聯網協議文檔案是Internet委員會自己采納的基本標準。 TCP/IP標準與其說由委員會指定,倒不如說由\"輿論\"來開發的。 任何人都可以提供一個文檔,以RFC(Request for Comment需求注釋) 方式公布。
TCP/IP的標準在一系列稱為RFC的文檔中公布。文檔由技術專家、特別工作組、或RFC編輯修訂。公布一個文檔時,該文檔被賦予一個RFC量,如RFC959說明FTP、RFC793說明TCP、RFC791說明IP等。 最初的RFC一直保留而從來不會被更新,如果修改了該文檔,則該文檔又以一個新號碼公布。因此,重要的是要確認你擁有了關于某個專題的最新RFC文檔。文后會列出主要的RFC文檔號。
不管怎樣,TCP/IP是一個協議集。為應用提供一些\"低級\"功能,這些包括IP、TCP、UDP。其它是執行特定任務的應用協議,如計算機間傳送文件、發送電子郵件、或找出誰注冊到另外一臺計算機。因此, 最重要的\"商業\"TCP/IP服務有:
* 文件傳送File Transfer。
文件傳送協議FTP(File Transfer Protocol)允許用戶從一臺計算機到另一臺取得文件,或發送文件到另外一臺計算機。從安全性方面考慮,需要用戶指定一個使用其它計算機的用戶名和口令。它不同與NFS(Network File System)和Netbios協議。一旦你要訪問另一臺 系統中的文件,任何時刻都要運行FTP。而且你只能拷貝文件到自己的機器中去來使用它。(RFC 959中關于FTP的說明)
* 遠程登錄Remote login
網絡終端協議TELNET允許用戶登錄到網絡上任一計算機上。你可啟動一個遠程進程連接到指定的計算機,直到進程結束,期間你所鍵入的內容被送到所指定的計算機。值得注意的是,這時你實際上是與你的計算機進行對話。TELENET程序使得你的計算機在整個過程中不見了,所敲的每一個字符直接送到所登錄的計算機系統。一般的說,這種遠程連接是通過類式撥號連接的,也就是,撥通后,遠程系統提示你輸入注冊名和口令,退出遠程系統,TELNET程序也就退出,你又與自己的計算機對話了。微電腦中的TELNET工具一般含有一個終端仿真程序。
* 計算機郵件Mail
允許你發送消息給其它計算機的用戶。通常,人們趨向于使用指定的一臺或兩臺計算機。計算機郵件系統只需你簡單地往另一用戶的郵件文件中添加信息,但隨之產生問題,使用的微電腦的環境不同,還有重要的是宏(MICRO)不適合于接受計算機郵件。為了發送電子郵件,郵件軟件希望連接到目的計算機,如果是微電腦,也許它已關機,或者正在運行另一個應用程序呢?出于這種原因,通常由一個較大的系統來處理這些郵件,也就是一個一直運行著的郵件服務器。郵件軟件成為用戶從郵件服務器取回郵件的一個界面。
任何一個的TCP/IP工具提供上述這些服務。這些傳統的應用功能在基于TCP/IP的網絡中一直扮演非常重要的角色。目前情況有點變化,這些功能使用也發生變化,如老系統的改造,計算機的發展等,出現了各種安裝版本,如:微電腦、工作站、小型機、和巨型機等。這些計算機好像在一起完成指定的任務,盡管有時看來像是只用到某個指定 的計算機,但它是通過網絡得到其它計算機系統的服務。服務器Server是為網絡上其它提供指定服務的系統,客戶Client是得到這種服務的另外計算機系統。(值得注意的是,服務/客戶機不一定是不同的計算機,有可能是同一計算機中的不同運行程序)。以下是幾種目前計算機上典型的一些服務,這些服務可在TCP/IP網絡上調用。
* 網絡文件系統(NFS)
這種訪問另一計算機的文件的方法非常接近于流行的FTP。網絡文件系統提供磁盤或設備服務,而無需特定的網絡實用程序來訪問另一系統的文件。可以簡單地認為它是一個外加的磁盤驅動器。這種額外\"虛擬\"磁盤驅動器就是其它計算機系統的磁盤。這非常有用。你只需加大幾臺計算機的磁盤容量,就可使網絡上其他用戶訪問它,且不說所帶來的經濟效益,它還能夠讓幾臺工作的計算機共享相同的文件。它也使得系統維護和備份易如反掌,因為再不必為大量的不同機器上 的文件的升級和備份而擔心。
* 遠程打印(Remote printing)
允許你使用其它計算機上的打印機,好像這些打印機直接連到你的計算機上。
* 遠程執行(Remote execution)
允許你請求運行在不同計算機上的特殊程序。當你在一個很小的計算機上運行一個需要大機系統資源的程序時,這時候遠程執行非常有用。
* 名字服務器(Name servers)
在一個大的系統安裝過程中,需要用到大量的各種名字,包括用戶名、口令,姓名、網絡地址、帳號等,管理這些是非常令人乏味的。因此將這些數據形成數據庫,放到一個小系統中去,其它系統通過網絡來訪問這些數據。
* 終端服務器(Terminal servers)
很多的終端連接安裝不再直接將終端連到計算機,取而代之的是,將他們連接到終端服務器上。終端服務器是一個小的計算機,它只需知道怎樣運行TELNET(或其它一些完成遠程登錄的協議)。如果你的終端想連上去,只用鍵入要連的計算機名就可。通常有可能同時有幾個這種連接,這時終端服務器采用快速開關技術來切換。
上述所描述的一些協議是由Berkeley, Sun,或其它組織定義的。因此,它們不是互聯網協議集(Internet Protocol Suite)的一部分, 只是使用到TCP/IP的工具,如同一般的TCP/IP 應用協議。因為協議的定義不一致,并且商業支持的TCP/IP工具廣泛應用,也許會把這些協議作為互聯協議集中的一部分。上述列出的只是基于TCP/IP部分服務的一些簡單例子,但包含了一些\"主要\"的應用。
TCP的服務
TCP協議提供的是可靠的、面向連接的傳輸控制協議,即在傳輸數據前要先建立邏輯連接,然后再傳輸數據,最后釋放連接3個過程。TCP提供端到端、全雙工通信;采用字節流方式,如果字節流太長,將其分段;提供緊急數據傳送功能。
盡管TCP和UDP都使用相同的網絡層(IP),TCP卻向應用層提供與UDP完全不同的服務。
TCP提供一種面向連接的、可靠的字節流服務。
面向連接意味著兩個使用TCP的應用(通常是一個客戶和一個服務器)在彼此交換數據之前必須先建立一個TCP連接。這一過程與打電話很相似,先撥號振鈴,等待對方摘機說“喂”,然后才說明是誰。
在一個TCP連接中,僅有兩方進行彼此通信。廣播和多播不能用于TCP。
TCP通過下列方式來提供可靠性:
•應用數據被分割成TCP認為最適合發送的數據塊。這和UDP完全不同,應用程序產生的數據報長度將保持不變。由TCP傳遞給IP的信息單位稱為報文段或段(segment)TCP如何確定報文段的長度。
•當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。•當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒
•TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時并重發)。
•既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
•既然IP數據報會發生重復,TCP的接收端必須丟棄重復的數據。
•TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。
兩個應用程序通過TCP連接交換8bit字節構成的字節流。TCP不在字節流中插入記錄標識符。我們將這稱為字節流服務(bytestreamservice)。如果一方的應用程序先傳10字節,又傳20字節,再傳50字節,連接的另一方將無法了解發方每次發送了多少字節。收方可以分4次接收這80個字節,每次接收20字節。一端將字節流放到TCP連接上,同樣的字節流將出現在TCP連接的另一端。
另外,TCP對字節流的內容不作任何解釋。TCP不知道傳輸的數據字節流是二進制數據,還是ASCII字符、EBCDIC字符或者其他類型數據。對字節流的解釋由TCP連接雙方的應用層解釋。
這種對字節流的處理方式與Unix操作系統對文件的處理方式很相似。Unix的內核對一個應用讀或寫的內容不作任何解釋,而是交給應用程序處理。對Unix的內核來說,它無法區分一個二進制文件與一個文本文件。
TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求后,等待對方回答SYN,ACK。這種建立連接的方法可以防止產生錯誤的連接,TCP使用的流量控制協議是可變大小的滑動窗口協議。第一次握手:建立連接時,客戶端發送SYN包(SEQ=x)到服務器,并進入SYN_SEND狀態,等待服務器確認。第二次握手:服務器收到SYN包,必須確認客戶的SYN(ACK=x+1),同時自己也送一個SYN包(SEQ=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態。第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ACK=y+1),此包發送完畢,客戶端和服務器時入Established狀態,完成三次握手。
TCP建立連接時的三次握手