一、TCP概述
1、TCP的由來(lái)
傳輸控制協(xié)議(TCP,Transmission Control Protocol)是互聯(lián)網(wǎng)(Internet)上的第一個(gè)可靠的傳輸協(xié)議。我們知道,互聯(lián)網(wǎng)(Internet)最早源自于美國(guó)國(guó)防部(稱之為DARPA INTERNET)。在互聯(lián)網(wǎng)(Internet)民用后,互聯(lián)網(wǎng)工程任務(wù)組 (IETF)在其相關(guān)國(guó)防部標(biāo)準(zhǔn)的TCP等標(biāo)準(zhǔn)的基礎(chǔ)上編制了傳輸控制協(xié)議(TCP),即1980年1月發(fā)布的RFC 761。后在1981年9月進(jìn)行了第一次更新,被發(fā)布為RFC 793,并代替了RFC 761。RFC 793描述傳輸控制協(xié)議要執(zhí)行的功能、實(shí)現(xiàn)該協(xié)議的程序、以及它與需要其服務(wù)的程序或用戶之間的接口。
欲更多了解IETF及RFC文檔情況介紹的請(qǐng)進(jìn)入。
2、TCP簡(jiǎn)述
TCP協(xié)議是一個(gè)端對(duì)端、面向連接的協(xié)議,旨在支持多網(wǎng)絡(luò)的協(xié)議分層層次結(jié)構(gòu)的應(yīng)用;其目的是在分組交換計(jì)算機(jī)通信網(wǎng)絡(luò)中,特別是在這種網(wǎng)絡(luò)的互聯(lián)系統(tǒng)中,作為主機(jī)之間高度可靠的主機(jī)對(duì)主機(jī)協(xié)議使用。使得在“盡力而為”的互聯(lián)網(wǎng)上實(shí)現(xiàn)可靠的數(shù)據(jù)傳輸,包括信令信息。
TCP符合一個(gè)分層的協(xié)議架構(gòu),就在一個(gè)基本的互聯(lián)網(wǎng)協(xié)議(IP)之上,如下圖1-2所示。IP為TCP提供了一種方式來(lái)發(fā)送和接收包含在互聯(lián)網(wǎng)數(shù)據(jù)報(bào)“信封”中的可變長(zhǎng)度的信息段。TCP提供了一種在不同網(wǎng)絡(luò)中因特網(wǎng)數(shù)據(jù)報(bào)的源和目標(biāo)的尋址方法。IP協(xié)議還處理通過(guò)多個(gè)網(wǎng)絡(luò)和互連網(wǎng)關(guān)實(shí)現(xiàn)傳輸和交付所需的TCP段的任何碎片或重組。IP協(xié)議還攜帶有關(guān)TCP段的優(yōu)先級(jí)、安全分類和劃分的信息,因此這些信息可以跨多個(gè)網(wǎng)絡(luò)進(jìn)行端到端通信。
圖 1-2:互聯(lián)網(wǎng)的協(xié)議分層
然而,TCP該協(xié)議彌補(bǔ)了IP協(xié)議(RFC 760)的某些不足之處,這是因?yàn)椋?/span>
首先,IP只解決了不同網(wǎng)絡(luò)主機(jī)的通信問(wèn)題,但該協(xié)議不能檢測(cè)IP數(shù)據(jù)報(bào)的丟失。而TCP能夠保證在IP數(shù)據(jù)報(bào)丟失時(shí)進(jìn)行重發(fā),能夠刪去重復(fù)收到的IP數(shù)據(jù)報(bào),還能保證精確地按原發(fā)送端的發(fā)送順序重新組裝數(shù)據(jù)。
其次,IP只負(fù)責(zé)按目的IP地址傳送數(shù)據(jù)報(bào),但不能區(qū)別屬于同一應(yīng)用報(bào)文的一組IP數(shù)據(jù)報(bào)以及所傳送的應(yīng)用報(bào)文的性質(zhì)。而TCP能區(qū)別屬于同一應(yīng)用報(bào)文的一組IP數(shù)據(jù)報(bào),并能鑒別應(yīng)用報(bào)文的性質(zhì)。以使某些具有4層協(xié)議功能的高端路由器可以對(duì)IP數(shù)據(jù)報(bào)進(jìn)行流量、優(yōu)先級(jí)、安全管理、負(fù)荷分配、復(fù)用等智能控制。
二、TCP的相關(guān)功能
1、TCP保證傳輸可靠性的功能
TCP是面向連接的。所謂連接,是指在進(jìn)行通信之前,通信雙方必須建立連接才能進(jìn)行通信,而在通信結(jié)束后,終止其連接。還有一種無(wú)連接的,指雙方在進(jìn)行通信之前,不需要建立好連接。IP是面向無(wú)連接的協(xié)議,而TCP面向連接,故TCP的特點(diǎn)是具有高可靠性。
TCP面向連接主要體現(xiàn)在:發(fā)起連接的源主機(jī)內(nèi)有一個(gè)程序發(fā)出連接請(qǐng)求;在目的主機(jī)內(nèi),有一個(gè)程序接受該連接請(qǐng)求,于是建立了源主機(jī)與目的主機(jī)的連接。建立連接后,兩臺(tái)主機(jī)即可互相發(fā)送數(shù)據(jù)。最后,有一方發(fā)出終止通信的請(qǐng)求,待對(duì)方確認(rèn)后,雙方結(jié)束通信。
當(dāng)目的主機(jī)接收到由源主機(jī)向目的主機(jī)發(fā)送的IP數(shù)據(jù)報(bào)后,目的主機(jī)需要向源主機(jī)回送一個(gè)確認(rèn)消息。這是依靠目的主機(jī)的TCP完成的。TCP中還有一個(gè)重傳記時(shí)器(RTO),當(dāng)源主機(jī)發(fā)送IP數(shù)據(jù)報(bào)時(shí)就開始記時(shí),如在超時(shí)之前收到確認(rèn)信號(hào),則記時(shí)器回零。如果記時(shí)器超時(shí),則說(shuō)明該IP數(shù)據(jù)報(bào)已丟失,源主機(jī)進(jìn)行重傳。對(duì)重傳記時(shí)器,確定合適的記時(shí)時(shí)長(zhǎng)是十分重要的,它由往返時(shí)間來(lái)決定。TCP能根據(jù)不同情況自動(dòng)調(diào)節(jié)記時(shí)時(shí)長(zhǎng)。
需要說(shuō)明的是,TCP所建立的連接是端到端的連接,即源主機(jī)與目的主機(jī)間的連接Internet中的轉(zhuǎn)接節(jié)點(diǎn)(路由器)對(duì)TCP段透明傳輸。
TCP的主要功能是保證端到端可靠地傳輸數(shù)據(jù)信息,為保證端到端傳輸?shù)目煽啃裕?/span>TCP主要采取了如下表2-1所列的5項(xiàng)技術(shù)與措施。
表 2-1:TCP保證可靠性連接所具有的技術(shù)與措施
總之,IP不提供差錯(cuò)報(bào)告和差錯(cuò)糾正機(jī)制,而TCP向應(yīng)用層提供了面向連接的服務(wù),確保了網(wǎng)絡(luò)上所傳送的數(shù)據(jù)報(bào)完整、正確、可靠的接收。一旦數(shù)據(jù)有損傷或丟失,則由TCP負(fù)責(zé)重傳,而應(yīng)用層不參與解決。
2、TCP提供部分應(yīng)用層信息的功能
IP只解決了單個(gè)數(shù)據(jù)報(bào)的傳輸問(wèn)題,而在某些情況下,需要在傳輸過(guò)程中對(duì)應(yīng)用報(bào)文數(shù)據(jù)流進(jìn)行控制。TCP攜帶了部分應(yīng)用層信息,能夠區(qū)別同一報(bào)文數(shù)據(jù)流的一組IP數(shù)據(jù)報(bào)及其性質(zhì)。
TCP之上是應(yīng)用層協(xié)議,如FTP、SMTP、Telnet等,最終是依靠它們實(shí)現(xiàn)主機(jī)間的通信的。TCP對(duì)這些應(yīng)用層協(xié)議規(guī)定了整數(shù)標(biāo)志符,稱為端口號(hào),TCP端口號(hào)對(duì)應(yīng)的應(yīng)用協(xié)議這里搜集了9種詳見下表2-2。這些規(guī)定的端口號(hào)成為保留端口,其值在0~1023范圍內(nèi),從0~255都是預(yù)先定義的(不能由網(wǎng)絡(luò)管理員定義),而任何大于255的端口號(hào)可以由網(wǎng)絡(luò)管理員來(lái)定義。此外還有自由端口號(hào),供個(gè)人程序使用,或用它來(lái)區(qū)分兩主機(jī)間相同應(yīng)用層協(xié)議的多個(gè)通信,即兩臺(tái)主機(jī)間復(fù)用多個(gè)用戶會(huì)話連接。
表 2-2:常用的TCP端口號(hào)
插口號(hào)由主機(jī)的IP地址和端口號(hào)組成,正在進(jìn)行通信的每臺(tái)主機(jī)的每個(gè)用戶會(huì)話連接,都有一個(gè)插口號(hào)。插口號(hào)對(duì)整個(gè)Internet是唯一的,一對(duì)插口號(hào)唯一地標(biāo)志了每個(gè)端口的連接,其中:
發(fā)端插口號(hào) = 源主機(jī)IP地址+源端口號(hào);
收端插口號(hào) = 目的主機(jī)IP地址+目的端口號(hào);
利用插口號(hào)可在目的主機(jī)中區(qū)分不同源主機(jī)對(duì)同一目的主機(jī)的相同端口號(hào)的多個(gè)用戶會(huì)話連接。在TCP段的頭部各域中具有“碼位”一項(xiàng)。其中SYN碼位為應(yīng)用數(shù)據(jù)流的開始位,SYN置“1”表示該IP數(shù)據(jù)報(bào)為某一應(yīng)用報(bào)文的第一份數(shù)據(jù)報(bào)。而碼位中的FIN碼位為應(yīng)用數(shù)據(jù)流的結(jié)束位。FIN置“1”表示此時(shí)數(shù)據(jù)報(bào)為上述應(yīng)用報(bào)文的最后一份數(shù)據(jù)報(bào)。故可利用SYN/FIN兩個(gè)碼位來(lái)確定某一應(yīng)用報(bào)文(或某一應(yīng)用數(shù)據(jù)流)的開始與結(jié)束。
綜上所述,我們可利用端口號(hào)和SYN/FIN碼位來(lái)區(qū)分應(yīng)用數(shù)據(jù)流,并判斷其性質(zhì),從而使具有四層功能的高端路由器具有某些對(duì)應(yīng)用數(shù)據(jù)流的控制功能。
三、TCP段格式
TCP傳輸數(shù)據(jù)的基本單位是段,每段又可分為段頭部與數(shù)據(jù)區(qū)兩大部分,TCP段格式如下圖3所示;段格式中的有關(guān)各部分的含義詳見下表3-1。其中“碼位”一項(xiàng)有6種控制,在置“1”時(shí)的含義詳見下表3-2。
圖 3:TCP段格式
表 3-1:TCP段格式中的有關(guān)各部分的含義
表 3-2:TCP段格式中“碼位”的具體內(nèi)容及含義
四、總述
上述僅對(duì)傳輸控制協(xié)議(TCP)給出了一些簡(jiǎn)要的介紹,若要詳細(xì)了解該協(xié)議具體內(nèi)容的請(qǐng)查閱下附件。
附件:RFC 793(09/1981)《Transmission Control Protocol》
綜上,TCP的主要目的是提供可靠的數(shù)據(jù)進(jìn)程對(duì)之間的安全邏輯電路或連接服務(wù)。在不太可靠的互聯(lián)網(wǎng)通訊系統(tǒng)上提供這項(xiàng)服務(wù),TCP需要提供如下表4所述的關(guān)鍵操作。
表 4:TCP需要提供的關(guān)鍵操作
然而,隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,越來(lái)越多的應(yīng)用發(fā)現(xiàn)TCP限制太大。 因此,需要開發(fā)一種新的互聯(lián)網(wǎng)傳輸協(xié)議來(lái)繞過(guò)這些限制,于是,IETF就又推出了流量控制傳輸協(xié)議(SCTP,Stream Control Transmission Protocol),特別適用于在IP網(wǎng)中傳送公用交換電話網(wǎng)(PSTN)的信令消息和IP網(wǎng)內(nèi)的信令消息。
欲進(jìn)一步了解流量控制傳輸協(xié)議(SCTP)介紹的請(qǐng)進(jìn)入。