大體而言,網際網路協定的功能包括如下﹕
· 定義資網際網路中傳輸的基本單位。
· 定義網際網路的定址方式。
· 負責網路存取層和傳送層之間的資料傳遞。
· 決定資料傳送的路由路徑。
· 執行資料的分解和重組。
這層協定主要要做的事情﹐是將從傳送層傳來的資料準確的送到遠端機器上。讓我們溫習一下剛學過的 ARP 協定﹐我們知道當主機獲得應該 IP 后﹐如果在 ARP 表格中找不到目的主機的實體位址的時候(因為底層的傳送是以實體位址為依據的)﹐那么就理由 ARP 協定是以廣播的方式去尋問對方的實體位址。不過﹐這里有一個限制﹕廣播封包是有限制的﹐只能在同一個網段( segment )上的節點才能收到廣播封包。假如當我們有一個封包﹐從教室傳到網際網路上地球另一邊的主機﹐那這時候要如何處理呢﹖
Okay﹐這就是 IP 協定要解決的問題了。讓我們先看看 IP 封包的格式吧。
IP 封包表頭格式
首先﹐讓我們看看IP封包的組成部份﹐以及各部件的長度﹕
在上圖中﹐括號之內的數字就是各部件的長度 (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 的識別記號。請參考下表﹕
000. 當此值為 0 的時候﹐表示目前未被使用。
.0.. 當此值為 0 的時候﹐表示封包可以被分割﹐若為 1 則不能被分割。
..0. 當上一個值為 0 時﹐此值為 0 就示該封包是最后一個封包﹐如果為 1 則表示其后還有被分割的封包。
Fragment Offset
分割定位 (FO)。當一個大封包在經過一些傳輸單位(MTU)較小的路徑時﹐會被被切割成碎片(fragment) 再進行傳送(這個切割和傳送層的打包有所不同﹐它是由網路層決定的)。由于網路情況或其它因素影響﹐其抵達順序并不會和當初切割順序一至的。所以當封包進行切割的時候﹐會為各片段做好定位記錄﹐所以在重組的時候﹐就能夠依號入座了。 DL@bitsCN_com網管軟件下載
如果封包沒有被切割﹐那么 FO 的值為“0”
。
Time To Live
存活時間 (TTL)。這個 TTL 的概念﹐在許多網路協定中都會碰到。當一個封包被賦予 TTL 值(以秒或跳站數目(hop)為單位)﹐之后就會進行倒數計時。在 IP 協定中,TTL 是以 hop 為單位,每經過一個 router 就減一)﹐如果封包 TTL 值被降為 0 的時候﹐就會被丟棄。這樣﹐當封包在傳遞過程中由于某些原因而未能抵達目的地的時候﹐就可以避免其一直充斥在網路上面。有只叫做 traceroute 的程式﹐就是一個上佳的 TTL 利用實作﹐我們會在后面的章節里面討論。
Protocol
協定(PROT)。這里指的是該封包所使用的網路協定類型﹐例如﹕ICMP 或 TCP/UDP 等等。要注意的是﹕這里使用的協定是網路層的協定﹐這和上層的程式協定(如﹕FTP﹑HTTP 等)是不同的。您可以從 Linux 的 /etc/protocol 這個檔案中找到這些協定和其代號﹔其內容如下﹕
------------------------------------------------------
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management bitsCN.nET*中國網管博客
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport
rspf 73 RSPF #Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # Yet Another IP encapsulation
encap 98 ENCAP # Yet Another IP encapsulation
------------------------------------------------------
Header Checksum
標頭檢驗值(HC)。這個數值主要用來檢錯用的﹐用以確保封包被正確無誤的接收到。當封包開始進行傳送后﹐接收端主機會利用這個檢驗值會來檢驗余下的封包﹐如果一切看來無誤﹐就會發出確認信息﹐表示接收正常。
Source IP Address
來源位址(SA)。相信這個不用多解釋了﹐就是發送端的 IP 位址是也﹐長度為 32 bit。
Destination IP Address
目的地位址(SA)。也就是接收端的 IP 位址﹐長度為 32 bit。
Options & Padding
這兩個選項甚少使用﹐只有某些特殊的封包需要特定的控制﹐才會利用到。這里也不作細表啦。
前面所介紹的 IP 封包格式﹐請花點時間研究一下﹐因為在日后的網路生涯中﹐許多概念都要求設計者非常了解 IP 和 TCP 封包(標頭)的結構﹐例如﹕防火墻設定和 socket 程式設計。 中國_網管聯盟bitsCN.com
IP 位址
當我們知道 IP 封包結構之后﹐接著我們就要接觸一個在 TCP/IP 網路管理中最重要的一個概念﹕ 子網切割( subnetting ) 。子網路這個名詞我們前面不斷的碰到過﹐或許同學們心里都很納悶它究竟是什么東東?不過﹐在真正了解子網路的定義之前﹐我們必須要先了解的一個概念是 IP 位址。
IP 位址雖然只有 4 組用小點 (.) 分開的數字(IP v4)﹐然而它卻是整個 TCP/IP 協定的基石。如果我們在討論 TCP/IP 網路的時候﹐不知道 IP 位址的各個數字代表什么意思﹐那就什么都免談了。
那我們如何解讀出 IP 位址所隱含的深刻意思呢﹖首先,我們要具備一定的數學和邏輯基礎﹐下面兩個概念是一定要知道的﹕十進位和二進位的換算﹐以及基本邏輯運算。這里不打算討論十進位和二進位的換算了﹐如果您忘記了﹐請回學校問問數學老師吧。然而﹐邏輯運算也不打算詳細討論了﹐下面只把在學習 IP 子網計算所需的幾個運算﹐作一簡單歸納而已﹕
如果不知道它們的工作原理﹐那么以后我們在討論 IP 位址和子網的時候﹐您就只能靠死記一途了。不過,一旦你知道了其原理﹐那么您在任何的 IP 網路中都不至于迷失﹐所謂“萬變不離其宗”是也。 中國_網管聯盟bitsCN.com
我們在前面講述網路存取層的時候﹐層介紹過 ifconfig 命令來查找界面實體位址。事實上,在命令的輸出結果里面﹐還包含了一個非常重要的資訊﹕inet addr 和 Mask﹕
eth0 Link encap:Ethernet HWaddr 00:A0:0C:11:EA:11 inet addr:203.30.35.134 Bcast:203.30.35.159 Mask:255.255.255.224 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:3 Base address:0x300eth1 Link encap:Ethernet HWaddr 00:80:C7:47:8C:9A inet addr:192.168.0.17 Bcast:192.168.0.255 Mask:255.255.255


