簡介:
傳輸控制協議(TCP)是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由IETF的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內另外一個重要的傳輸協議。在因特網協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不一樣主機的應用層之間常常須要可靠的、像管道同樣的鏈接,可是IP層不提供這樣的流機制,而是提供不可靠的包交換。
應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,而後TCP把數據流分區成適當長度的報文段(一般受該計算機鏈接的網絡的數據鏈路層的最大傳輸單元(MTU)的限制)。以後TCP把結果包傳給IP層,由它來經過網絡將包傳送給接收端實體的TCP層。TCP爲了保證不發生丟包,就給每一個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。而後接收端實體對已成功收到的包發回一個相應的確認(ACK);若是發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據包就被假設爲已丟失將會被進行重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。
功能:
當應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,TCP則把數據流分割成適當長度的報文段,最大傳輸段大小(MSS)一般受該計算機鏈接的網絡的數據鏈路層的最大傳送單元(MTU)限制。以後TCP把數據包傳給IP層,由它來經過網絡將包傳送給接收端實體的TCP層。
TCP爲了保證報文傳輸的可靠,就給每一個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。而後接收端實體對已成功收到的字節發回一個相應的確認(ACK);若是發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據(假設丟失了)將會被重傳。
-
在數據正確性與合法性上,TCP用一個校驗和函數來檢驗數據是否有錯誤,在發送和接收時都要計算校驗和;同時可使用md5認證對數據進行加密。
-
在保證可靠性上,採用超時重傳和捎帶確認機制。
-
在流量控制上,採用滑動窗口協議,協議中規定,對於窗口內未經確認的分組須要重傳。
-
在擁塞控制上,採用廣受好評的TCP擁塞控制算法(也稱AIMD算法)。該算法主要包括三個主要部分:1)加性增、乘性減;2)慢啓動;3)對超時事件作出反應。
實行標準:算法
TCP/IP(Transmission Control Protocol/Internet Protocol) 即傳輸控制協議/網間協議,是一個工業標準的協議集,它是爲廣域網(WAN)設計的。它是由ARPANET網的研究機構發展起來的。
TCP/IP的標準在一系列稱爲RFC的文檔中公佈。文檔由技術專家、特別工做組、或RFC編輯修訂。公佈一個文檔時,該文檔被賦予一個RFC編號,如RFC959(FTP的說明文檔)、RFC793(TCP的說明文檔)、RFC791(IP的說明文檔)等。最初的RFC一直保留而歷來不會被更新,若是修改了該文檔,則該文檔又以一個新號碼公佈。所以,重要的是要確認你擁有了關於某個專題的最新RFC文檔。一般在RFC的開頭部分,有相關RFC的更新(update)、排錯(errata)、做廢(obsolete)信息,提示讀者信息的時效性。
鏈接創建:
TCP是因特網中的傳輸層協議,使用三次握手協議創建鏈接。當主動方發出SYN鏈接請求後,等待對方回答
TCP的三次握手
SYN+ACK,並最終對對方的 SYN 執行 ACK 確認。這種創建鏈接的方法能夠防止產生錯誤的鏈接,TCP使用的流量控制協議是可變大小的滑動窗口協議。
TCP三次握手的過程以下:
-
客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。
-
服務器端收到SYN報文,迴應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
-
客戶端收到服務器端的SYN報文,迴應一個ACK(ACK=y+1)報文,進入Established狀態。
-
三次握手完成,TCP客戶端和服務器端成功地創建鏈接,能夠開始傳輸數據了。
可靠性:
TCP提供一種面向鏈接的、可靠的字節流服務。面向鏈接意味着兩個使用TCP的應用(一般是一個客戶和一個服務器)在彼此交換數據包以前必須先創建一個TCP鏈接。這一過程與打電話很類似,先撥號振鈴,等待對方摘機說「喂」,而後才說明是誰。在一個TCP鏈接中,僅有兩方進行彼此通訊。廣播和多播不能用於TCP。
TCP經過下列方式來提供可靠性:
1.應用數據被分割成TCP認爲最適合發送的數據塊。這和UDP徹底不一樣,應用程序產生的數據長度將保持不變。由TCP傳遞給IP的信息單位稱爲報文段或段(segment)。
2.當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。若是不能及時收到一個確認,將重發這個報文段。當TCP收到發自TCP鏈接另外一端的數據,它將發送一個確認。TCP有延遲確認的功能,在此功能沒有打開,則是當即確認。功能打開,則由定時器觸發確認時間點。
3.TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程當中的任何變化。若是收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(但願發端超時並重發)。
4.既然TCP報文段做爲IP數據報來傳輸,而IP數據報的到達可能會失序,所以TCP報文段的到達也可能會失序。若是必要,TCP將對收到的數據進行從新排序,將收到的數據以正確的順序交給應用層。
5.既然IP數據報會發生重複,TCP的接收端必須丟棄重複的數據。
6.TCP還能提供流量控制。TCP鏈接的每一方都有固定大小的緩衝空間。TCP的接收端只容許另外一端發送接收端緩衝區所能接納的數據。這將防止較快主機導致較慢主機的緩衝區溢出。
兩個應用程序經過TCP鏈接交換8bit字節構成的字節流。TCP不在字節流中插入記錄標識符。咱們將這稱爲字節流服務(bytestreamservice)。若是一方的應用程序先傳10字節,又傳20字節,再傳50字節,鏈接的另外一方將沒法瞭解發方每次發送了多少字節。只要本身的接收緩存沒有塞滿,TCP 接收方將有多少就收多少。一端將字節流放到TCP鏈接上,一樣的字節流將出如今TCP鏈接的另外一端。
窗口確認:
TCP的一項功能就是確保每一個數據段都能到達目的地。位於目的主機的TCP服務對接受到的數據進行確認,並向源應用程序發送確認信息。
TCP的狀態機
使用數據報頭序列號以及確認號來確認已收到包含在數據段的相關的數據字節。
TCP在發回源設備的數據段中使用確認號,指示接收設備期待接收的下一字節。這個過程稱爲期待確認。
源主機在收到確認消息以前能夠傳輸的數據的大小稱爲窗口大小。用於管理丟失數據和流量控制。這些變化如右圖所示。