資源描述:
《TCP傳輸控制協(xié)議.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、傳輸控制協(xié)議(英語:TransmissionControlProtocol,TCP)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC793定義。在簡化的計算機網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能,用戶數(shù)據(jù)報協(xié)議(UDP)是同一層內(nèi)另一個重要的傳輸協(xié)議。在因特網(wǎng)協(xié)議族(Internetprotocolsuite)中,TCP層是位于IP層之上,應(yīng)用層之下的中間層。不同主機的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。應(yīng)用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)摹⒂?位字節(jié)表示的
2、數(shù)據(jù)流,然后TCP把數(shù)據(jù)流分區(qū)成適當(dāng)長度的報文段(通常受該計算機連接的網(wǎng)絡(luò)的數(shù)據(jù)鏈路層的最大傳輸單元(MTU)的限制)。之后TCP把結(jié)果包傳給IP層,由它來通過網(wǎng)絡(luò)將包傳送給接收端實體的TCP層。TCP為了保證不發(fā)生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的包發(fā)回一個相應(yīng)的確認(rèn)(ACK);如果發(fā)送端實體在合理的往返時延(RTT)內(nèi)未收到確認(rèn),那么對應(yīng)的數(shù)據(jù)包就被假設(shè)為已丟失將會被進行重傳。TCP用一個校驗和函數(shù)來檢驗數(shù)據(jù)是否有錯誤;在發(fā)送和接收時都要計算校驗和。運作方式TCP連接包括三個狀態(tài):
3、連接創(chuàng)建、數(shù)據(jù)傳送和連接終止。通路的創(chuàng)建TCP用三路握手(three-wayhandshake)過程創(chuàng)建一個連接。在連接創(chuàng)建過程中,很多參數(shù)要被初始化,例如序號被初始化以保證按序傳輸和連接的強壯性。TCP連接的正常創(chuàng)建一對終端同時初始化一個它們之間的連接是可能的。但通常是由一端打開一個套接字(socket)然后監(jiān)聽來自另一方的連接,這就是通常所指的被動打開(passiveopen)。服務(wù)器端被被動打開以后,用戶端就能開始創(chuàng)建主動打開(activeopen)。1.客戶端通過向服務(wù)器端發(fā)送一個SYN來創(chuàng)建一個主動打開,作為三路握手的一部分。2.服務(wù)器端應(yīng)當(dāng)
4、為一個合法的SYN回送一個SYN/ACK。3.最后,客戶端再發(fā)送一個ACK。這樣就完成了三路握手,并進入了連接創(chuàng)建狀態(tài)。數(shù)據(jù)傳輸在TCP的數(shù)據(jù)傳送狀態(tài),很多重要的機制保證了TCP的可靠性和強壯性。它們包括:使用序號,對收到的TCP報文段進行排序以及檢測重復(fù)的數(shù)據(jù);使用校驗和來檢測報文段的錯誤;使用確認(rèn)和計時器來檢測和糾正丟包或延時。串行號和確認(rèn)在TCP的連接創(chuàng)建狀態(tài),兩個主機的TCP層間要交換初始序號(ISN:initialsequencenumber)。這些序號用于標(biāo)識字節(jié)流中的數(shù)據(jù),并且還是對應(yīng)用層的數(shù)據(jù)字節(jié)進行記數(shù)的整數(shù)。通常在每個TCP報文段中
5、都有一對序號和確認(rèn)號。TCP報文發(fā)送者認(rèn)為自己的字節(jié)編號為序號,而認(rèn)為接收者的字節(jié)編號為確認(rèn)號。TCP報文的接收者為了確??煽啃?,在接收到一定數(shù)量的連續(xù)字節(jié)流后才發(fā)送確認(rèn)。這是對TCP的一種擴展,通常稱為選擇確認(rèn)(SelectiveAcknowledgement)。選擇確認(rèn)使得TCP接收者可以對亂序到達的數(shù)據(jù)塊進行確認(rèn)。每一個字節(jié)傳輸過后,ISN號都會遞增1。通過使用序號和確認(rèn)號,TCP層可以把收到的報文段中的字節(jié)按正確的順序交付給應(yīng)用層。序號是32位的無符號數(shù),在它增大到232-1時,便會回繞到0。對于ISN的選擇是TCP中關(guān)鍵的一個操作,它可以確保
6、強壯性和安全性。數(shù)據(jù)傳輸舉例TCP數(shù)據(jù)傳輸1.發(fā)送方首先發(fā)送第一個包含串行號為1(可變化)和1460字節(jié)數(shù)據(jù)的TCP報文段給接收方。接收方以一個沒有數(shù)據(jù)的TCP報文段來回復(fù)(只含報頭),用確認(rèn)號1461來表示已完全收到并請求下一個報文段。2.發(fā)送方然后發(fā)送第二個包含串行號為1461和1460字節(jié)數(shù)據(jù)的TCP報文段給接收方。正常情況下,接收方以一個沒有數(shù)據(jù)的TCP報文段來回復(fù),用確認(rèn)號2921(1461+1460)來表示已完全收到并請求下一個報文段。發(fā)送接收這樣繼續(xù)下去。3.然而當(dāng)這些數(shù)據(jù)包都是相連的情況下,接收方?jīng)]有必要每一次都回應(yīng)。比如,他收到第1到
7、5條TCP報文段,只需回應(yīng)第五條就行了。在例子中第3條TCP報文段被丟失了,所以盡管他收到了第4和5條,然而他只能回應(yīng)第2條。4.發(fā)送方在發(fā)送了第三條以后,沒能收到回應(yīng),因此當(dāng)時鐘(timer)過時(expire)時,他重發(fā)第三條。(每次發(fā)送者發(fā)送一條TCP報文段后,都會再次啟動一次時鐘:RTT)。1.這次第三條被成功接收,接收方可以直接確認(rèn)第5條,因為4,5兩條已收到。校驗和TCP的16位的校驗和(checksum)的計算和檢驗過程如下:發(fā)送者將TCP報文段的頭部和數(shù)據(jù)部分的和計算出來,再對其求反碼(一的補數(shù)),就得到了校驗和,然后將結(jié)果裝入報文中傳
8、輸。(這里用反碼和的原因是這種方法的循環(huán)進位使校驗和可以在16位、32位、64位等情況下的計算