TCP傳輸層協議的服務流程
通過對互聯網的認識,我們發現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狀態,完成三次握手。