[轉]TCP協議簡述與三次握手原理解析


[摘要]  TCP(傳輸控制協議)是一系列規則的集合,它和網際協議(IP)共同使用,通過互聯網在計算機之間以信息單元的形式發送數據。IP協議控制實際的數據傳輸,TCP協議主要負責追蹤在互聯網上傳送的信息所划分的各個數據單元(包)。TCP協議是面向連接的協議,就是說在兩端傳送信息時,連接是一直建立和保持的。TCP協議負責把信息划分成IP協議所能夠處理的,也要能把接收到的包拼成一個完整的信息。在開放式系統互連(OSI)通信模型中,TCP協議位於第四層傳輸層中。 
TCP/IP是Internet/Intranet使用的協議體系,也是大多數網絡采用的協議。本文內容主要闡述有關TCP協議如何應用於傳輸數據及數據傳輸的詳細過程解析。 

1、TCP/IP協議概述 
TCP/IP協議(Transmission Control Protocol/Internet Protocol)叫做傳輸控制/網際協議,又叫網絡通訊協議,這個協議是Internet國際互聯網絡的基礎。TCP/IP是網絡中使用的基本的通信協議。雖然從名字上看TCP/IP包括兩個協議,傳輸控制協議(TCP)和網際協議(IP),但TCP/IP實際上是一組協議,它包括上百個各種功能的協議,如:遠程登錄、文件傳輸和電子郵件等,而TCP協議和IP協議是保證數據完整傳輸的兩個基本的重要協議。通常說TCP/IP是Internet協議族,而不單單是TCP和IP。TCP/IP協議使用范圍極廣,是目前異種網絡通信使用的唯一協議體系,適用於連接多種機型,既可用於局域網,又可用於廣域網,許多廠商的計算機操作系統和網絡操作系統產品都采用或含有TCP/IP協議。TCP/IP協議已成為目前事實上的國際標准和工業標准。 
TCP/IP是很多的不同的協議組成。 TCP用戶數據報表協議,也稱作TCP傳輸控制協議(Transport Control Protocol,可靠的主機到主機層協議),這里要先強調一下,傳輸控制協議是OSI網絡的第四層的叫法,TCP傳輸控制協議是TCP/IP傳輸的6個基本協議的一種。兩個TCP意思不相同)。TCP是一種可靠的面向連接的傳送服務。它在傳送數據時是分段進行的,主機交換數據必須建立一個會話。它用比特流通信,即數據被作為無結構的字節流。 通過每個TCP傳輸的字段指定順序號,以獲得可靠性。是在OSI參考模型中的第四層,TCP是使用IP的網間互聯功能而提供可靠的數據傳輸,IP不停的把報文放到 網絡上,而TCP是負責確信報文到達。在協同IP的操作中TCP負責:握手過程、報文管理、流量控制、錯誤檢測和處理(控制),可以根據一定的編號順序對非正常順序的報文給予從新排列順序。 

2、三次握手原理解析 
在TCP會話初期,有所謂的“三握手”,即對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據量而確定的數據確認數及數據發送、接收完畢后何時撤消聯系,並建立虛連接。為了提供可靠的傳送,TCP在發送新的數據之前,以特定的順序將數據包的序號,並需要這些包傳送給目標機之后的確認消息

TCP總是用來發送大批量的數據。當應用程序在收到數據后要做出確認時也要用到TCP。由於TCP需要時刻跟蹤,這需要額外開銷,使得TCP的格式有些顯得復雜。 
TCP握手協議在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。 
第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認; 
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態; 
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包
ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。完成三次握手,客戶端與服務器開始傳送數據,在上述過程中,還有一些重要的概念:未連接隊列:在三次握手協議中,服務器維護一個未連接隊列,該隊列為每個客戶端的SYN包(syn=j)開設一個條目,該條目表明服務器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在服務器處於Syn_RECV狀態,當服務器收到客戶的確認包時,刪除該條目,服務器進入ESTABLISHED狀態。Backlog參數:表示未連接隊列的最大容納數目。 
SYN-ACK :重傳次數。 服務器發送完SYN-ACK包,如果未收到客戶確認包,服務器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。 
半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。 
在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。如圖1所示。第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認; 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。 完成三次握手,客戶端與服務器開始傳送數據。  

 

 
圖1  三次握手 
需要斷開連接的時候,TCP也需要互相確認才可以斷開連接,采用四次揮手斷開一個連接,如圖2所示。在第一次交互中,首先發送一個FIN=1的請求,要求斷開,目標主機在得到請求后發送ACK=1進行確認;在確認信息發出后,就發送了一個FIN=1的包,與源主機斷開;隨后源主機返回一條ACK=1的信息,這樣一次完整的TCP會話就結束了。 
 


圖2 四次揮手 
結束語 
TCP是面向連接的,所謂面向連接,就是當計算機雙方通信時必需先建立連接,然后數據傳送,最后拆除連接三個過程。通過三個過程實現網絡數據包的發送與接收。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM