TCP/IP通訊協定及網路架構研析
二、利用TCP/IP傳送訊息
在上一節中,我們提到了TCP/IP的整體架構。接著我們詳細討論資料包,如何在TCP/IP的網路架構中傳送。在四層網路架構中,有兩個協定負責傳送及處理資料包。
TCP負責將訊息,切割成一塊塊資料包,在遠端主機重新按順序,組合起資料包,並且要負責重送遺失的資料包。為了達成任務,TCP必須在每一塊資料包的前面,加上一個資料頭,資料頭中,包含了TCP所需用來處理資料包的資訊。
這就好像我們將信件裝進信封中,而郵差可以根據信封上的住址,替我們送信一般。
TCP資料頭格式
一塊被 TCP加上資料頭的資料塊,看起來就像下面這個樣子:
TCP資料頭格式
其中的Source Port及Destination Port,用來指定此資料包,對於主機的不同連結(connection)。假設有兩個人,同時在一台就地端主機上,對另一台遠端主機,做檔案傳輸,此時就地端的FTP程式,可能指定其中一人的Source Port為1001,而另一個人的Source Port為1002(這是隨機所取的數字,只要能區分不同連結即可)。
至於遠端的主機,為了讓世界各地的主機,能夠和它作檔案傳輸的動作,所以其FTP伺服器,須有一公開的標準Port(就是Port 21)。 有了Source Port及Destination Port,遠端主機的TCP模組,就可以把資料包組合起來,給某一連結。
譬如,所有Source Port = 1001及Destination Port = 21的封包們,會被組合成為完整訊息,交給遠端的FTP伺服器程式(Destination Port 21所指定的應用程式)。同理也適用於Source Port = 1002及Destination Port = 21的資料包們。
至於資料頭中的Sequence Number,則是指定此資料包在訊息中的序號。有了這些序號,遠端的TCP模組,才能夠依序,將資料包組合起來,而不弄錯順序。Acknowledge Number,則是接收者,用來通知發送者(所以此欄位在由遠端傳回的資料包中才有效),已成功地接收到的字元數,讓發送者在一段時間後,重新發送未到達的資料包。
假設我們用下圖,來表示待傳送的訊息:
待傳送的訊息
首先,發送及接收兩端的TCP模組互相對話、建立連接,並且根據兩端所能處理的資料包大小,選擇較小的那個,為標準來切割資料包,結果如下:
訊息被切割成為資料包
然後,TCP模組,在每一塊資料包前,加上前述的TCP資料頭,此時整個待傳送的訊息,看起來如下:
資料包加上TCP資料頭
為了方便起見,我們仍將一塊,被加上TCP資料頭的資料包,稱為資料包(datagram),TCP模組將這些資料包,送給IP模組,同時告訴IP模組,接收端主機的IP位址。(此IP位址是一個32位元的數字,可以唯一區別網際網路上的每一台主機。我們將在下一節中,詳細討論此一位址的定義及相關技術)。
IP的工作,就是負責幫資料包,找到一條適當的路徑(route),以到達接收端主機。為了讓各網路的路由器(router),能往前繼續傳送資料包,IP必須在資料包前,加上自己的資料頭。
|