上一步 回到第一頁 下一步

TCP/IP

若說起歷史,TCP/IP 也算得上是個冷戰時代的產物,它是應美國國防部的戰爭考量而提出開發的。TCP/IP 當初是用來配合 ARPANET (Advanced Research Projects Agency Network) 來處理不同硬體之間的連接問題的,比如 Sun 系統和 Mainframe、Mainframe 和個人電腦之間的連接。 事實上,TCP/IP 所指的是一整套龐大的通訊協定家族,其中以 Transmission Control Protocol(TCP) 及 Internet Protocol (IP) 這兩套協定最具代表性。IP 協定工作於網路層(以後會繼續和大家探討 OSI 的網路層級),它提供了一套標準讓不同的網路有規則可循。當然,前提是您想使用 IP 從一個網路將封包路由到另一個網路。IP 在設計上可用來在 LAN-LAN 及 PC-PC 之間進行傳輸的。 您可以把 IP 看成是游戲規則,而 TCP 則用來詮釋這些規則的。雖然 TCP/IP 原先是專門為幾所大學和機構的使用而設計的,但現在 TCP/IP 已經成為最流行的通訊協定了,我們使用的 Internet 就是用 TCP/IP 來傳送封包的了。下面就讓我們看看 TCP/IP 是怎樣工作的: 假如您的公司在好些地方都有分公司,各自都有著自己的本地網路(LAN),在總公司跑的是 PC 網路,但分公司大部份都是用麥金塔電腦。當 Mac 有數據要傳送給 PC 的時候將會如何呢? 首先,TCP 會在這兩個平臺建立起一個可以提供全雙工檢錯(對雙向的數據都進行錯誤檢測)的連接。 接著,IP 制定好 Mac 和 PC 之間的溝通規則,TCP 與上層協定制定用以連接的埠( port )。到這裡為止,Mac 端已經準備好數據了,如果數據太大,就將之分拆成幾份較小的封包,並且在封包上面加上一個新的 header (內含轉送位址),確保封包會被正確傳送。TCP/IP 還會加上標籤說明數據的種類及其長度。 再下來,IP 協定將負責將封包傳送給 PC。 最後,在 PC 上面的 TCP 將封包解碼並翻譯成 PC 能夠懂的格式,也就是它自己所使用的網路協定。

IP 封包表頭格式

Version (4)

Internet Header Length (4)

Type of Service (8)

Total Length (16)

Identification (16)

Flags (3)

Fragment Offset (13)

Time To Live (8)

Protocol (8)

Header checksum (16)

Source Address (32)

Destination Address (32)

Options (Variable)

Padding (0-24)

 
Data
。。。。

在上圖中,括號之內的數字就是各部件的長度 (bit),如果您夠細心,就會計算得出每一行的總長度都是 32bit。事實上,真正的封包是有連續的位元依序排列在一起的,之所以分行,完全是因為排版的關係。下面,我們分別對各部件名稱解釋一下

Version

版本 (VER)。表示的是 IP 規格版本,目前的 IP 規格多為版本 4 (version 4),所以這裡的數值通常為 0x4 (注意:封包使用的數字通常都是十六進位的)。

Internet Header Length

標頭長度 (IHL)。我們從 IP 封包規格中看到前面的 6 行為 header ,如果 Options 和 Padding沒有設定的話,也就只有5 行的長度﹔我們知道每行有 32bit ,也就是 4byt e﹔那麼, 5 列就是 20byte 了。20 這個數值換成 16 進位就成了 0x14,所以,當封包標頭長度為最短的時候,這裡數值會被換算為 0x14 。

Type of Service

服務類型 (TOS)。這裡指的是 IP 封包在傳送過程中要求的服務類型,其中一共由 8 個 bit 組成,每組 bit 組合分別代表不同的意思:

Total Length

封包總長 (TL)。通常以 byte 做單位來表示該封包的總長度,此數值包括標頭和數據的總和。

Identification

識別碼 (ID)。每一個IP封包都有一個 16bit 的唯一識別碼。我們從 OSI 和 TCP/IP 的網路層級知識裡面知道:當程式產生的數據要通過網路傳送時,都會在傳送層被拆散成封包形式發送,當封包要進行重組的時候,這個 ID 就是依據了。

Flag

旗標 (FL)。這是當封包在傳輸過程中進行最佳組合時使用的 3 個 bit 的識別記號。

Fragment Offset

分割定位 (FO)。當一個大封包在經過一些傳輸單位(MTU)較小的路徑時,會被被切割成碎片(fragment) 再進行傳送(這個切割和傳送層的打包有所不同,它是由網路層決定的)。由於網路情況或其它因素影響,其抵達順序並不會和當初切割順序一至的。所以當封包進行切割的時候,會為各片段做好定位記錄,所以在重組的時候,就能夠依號入座了。 如果封包沒有被切割,那麼 FO 的值為“0”。

Time To Live

存活時間 (TTL)。這個 TTL 的概念,在許多網路協定中都會碰到。當一個封包被賦予 TTL 值(以秒或跳站數目(hop)為單位),之後就會進行倒數計時。在 IP 協定中,TTL 是以 hop 為單位,每經過一個 router 就減一),如果封包 TTL 值被降為 0 的時候,就會被丟棄。這樣,當封包在傳遞過程中由於某些原因而未能抵達目的地的時候,就可以避免其一直充斥在網路上面。有隻叫做 traceroute 的程式,就是一個上佳的 TTL 利用實作,我們會在後面的章節裡面討論。

Protocol

協定(PROT)。這裡指的是該封包所使用的網路協定類型,例如:ICMP 或 TCP/UDP 等等。

Header Checksum

標頭檢驗值(HC)。這個數值主要用來檢錯用的,用以確保封包被正確無誤的接收到。當封包開始進行傳送後,接收端主機會利用這個檢驗值會來檢驗餘下的封包,如果一切看來無誤,就會發出確認信息,表示接收正常。

Source IP Address

來源位址(SA)。相信這個不用多解釋了,就是發送端的 IP 位址是也,長度為 32 bit。

Destination IP Address

目的地位址(SA)。也就是接收端的 IP 位址,長度為 32 bit。

Options & Padding

這兩個選項甚少使用,只有某些特殊的封包需要特定的控制,才會利用到。

上一步 回到第一頁 下一步