摘要:滴水不漏的TCP協(xié)議TCP是一種可靠的面向連接的傳送服務。它在傳送數(shù)據(jù)時是分段進行的,主機交換數(shù)據(jù)必須建立一個會話。它用比特流通信,即數(shù)據(jù)被作為無結構的字節(jié)流。通過對每個TCP傳輸?shù)淖侄沃付樞蛱?,可以獲得可靠性。如果一個分段被分解成幾個小段,接收主機會知道是否所有小段都已收到。通過發(fā)送應答,用以確認別的主機收
滴水不漏的TCP協(xié)議
TCP是一種可靠的面向連接的傳送服務。它在傳送數(shù)據(jù)時是分段進行的,主機交換數(shù)據(jù)必須建立一個會話。它用比特流通信,即數(shù)據(jù)被作為無結構的字節(jié)流。
通過對每個TCP傳輸?shù)淖侄沃付樞蛱?,可以獲得可靠性。如果一個分段被分解成幾個小段,接收主機會知道是否所有小段都已收到。通過發(fā)送應答,用以確認別的主機收到了數(shù)據(jù)。對于發(fā)送的每一個小段,接收主機必須在一個指定的時間返回一個確認。如果發(fā)送者未收到確認,數(shù)據(jù)會被重新發(fā)送;如果收到的數(shù)據(jù)包損壞,接收主機會舍棄它,因為確認未被發(fā)送,發(fā)送者仍會重新發(fā)送分段。
TCP是一個更高層次的協(xié)議。它允許運行在不同主機上的應用程序相互交換數(shù)據(jù)流。在大多數(shù)情況下,每個TCP數(shù)據(jù)段裝在一個IP數(shù)據(jù)報中進行發(fā)送。但如需要的話,TCP將把數(shù)據(jù)段分成多個數(shù)據(jù)報,而IP數(shù)據(jù)報則與同一網(wǎng)絡不同主機間傳輸位流和字節(jié)流的物理數(shù)據(jù)幀相容。由于IP并不能保證接收的數(shù)據(jù)報的順序與發(fā)送的相一致,TCP會在收信端裝配TCP數(shù)據(jù)段并形成一個不間斷的數(shù)據(jù)流。FTP和HTTP就是兩個非常流行的依靠TCP的TCP/IP應用程序。
另一個重要的TCP/IP協(xié)議集的成員是用戶數(shù)據(jù)報協(xié)議(UDP),它同TCP相似但比TCP原始許多。TCP是一個可靠的協(xié)議,因為它能通過錯誤檢查和握手確認來保證數(shù)據(jù)完整地到達目的地。UDP是一個“不可靠”的協(xié)議,因為它不能保證數(shù)據(jù)報的接收順序同發(fā)送順序相同,甚至不能保證它們是否全部到達。如果有可靠性要求,則應用程序避免使用它。同許多TCP/IP工具同時提供的SNMP(簡單網(wǎng)絡管理協(xié)議)就是一個使用UDP協(xié)議的應用例子。
下面的內容可以讓我們對TCP協(xié)議的功能和特點有更為深刻的認識。
(一)怎么接頭--端口與套接字Socket
TCP端口為信息的傳送提供地點,端口號小于256的定義為常用端口。 SOCKETS實用程序使用一個協(xié)議端口號來標明自己應用的性。端口可以使用0到65536之間的任何數(shù)字。在服務請求時,操作系統(tǒng)動態(tài)地為客戶端的應用程序分配端口號。
套接字
網(wǎng)絡應用程序把兩臺希望相互通訊的計算機連在一起,所以它們需要連接來交換數(shù)據(jù)。在TCP/IP中,這種連接叫做套接字(Socket),它和金屬套管用的是一個詞。TCP/IP的套接字是一種支撐某物的支架,所以需要兩個套接程序,每臺計算機一個。為了建立雙方的連接,以達到各類通訊要求,一個應用程序通過定義三部分來產(chǎn)生一個套接字:主機IP地址、服務類型(面向連接的服務是TCP,無連接服務是UDP)、應用程序所用的端口。套接字在要領上與文件句柄類似,因為其功能是作為網(wǎng)絡通信的終結點。
(二)電影院散場與TCP的流量控制
就像電影院散場的時候人如潮涌,平時則冷冷清清,網(wǎng)絡中的通信量也會時大時小,有時傳輸量過大,信號就無法到達目的地。TCP的一個重要作用就是對通信量的控制。
TCP采用可變發(fā)送窗口的方式進行流量控制。發(fā)送窗口在連接建立時由雙方商定。但在通信的過程中,接收端可根據(jù)自己的資源情況,隨時動態(tài)地調整自己的接收窗口(可增大或減小),然后告訴對方,使對方的發(fā)送窗口和自己的接收窗口一致。這種由接收端控制發(fā)送端的做法,在計算機網(wǎng)絡中經(jīng)常使用。
(三)沒收到?再發(fā)唄!--TCP的重發(fā)機制
重發(fā)機制是TCP中最重要和最復雜的問題之一。TCP每發(fā)送一個報文段,就設置一次定時器。只要定時器設置的重發(fā)時間到而還沒有收到確認,就要重發(fā)這一報文段。但是,大家知道,TCP的下層往往是一個互連網(wǎng)環(huán)境,可能是一個高速的局域網(wǎng),也可能是多個低速的廣域網(wǎng),而且路由還可能會發(fā)生變化,所以往返時延(就是從數(shù)據(jù)發(fā)出到收到對方的確認所經(jīng)歷的時間)差別很大。那么,TCP的超時定時器的重發(fā)時間究竟應設置為多大?TCP采用了一種自適應算法,就是把各個報文段的往返時延樣本平均得出平均往返時延,每測量到一個新的往返時延樣本就計算一次平均往返時延,并通過公式更新定時器的重發(fā)時間。
(四)三次握手--TCP的運輸連接管理
TCP對話通過三次握手來初始化。三次握手的目的是使數(shù)據(jù)段的發(fā)送和接收同步;告訴其它主機其一次可接收的數(shù)據(jù)量,并建立虛連接。
我們來看看這三次握手的簡單過程:
(1)初始化主機通過一個同步標志置位的數(shù)據(jù)段發(fā)出會話請求。
(2)接收主機通過發(fā)回具有以下項目的數(shù)據(jù)段表示回復:同步標志置位、即將發(fā)送的數(shù)據(jù)段的起始字節(jié)的順序號、應答并帶有將收到的下一個數(shù)據(jù)段的字節(jié)順序號。
(3)請求主機再回送一個數(shù)據(jù)段,并帶有確認順序號和確認號。
通信工程師備考資料免費領取
去領取