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