- 論壇徽章:
- 1
|
TCP/IP協(xié)議基礎(chǔ)
--------------------------------------------------------------------------------
1、TCP/IP協(xié)議棧
四層模型
TCP/IP這個協(xié)議遵守一個四層的模型概念:應(yīng)用層、傳輸層、互聯(lián)層和網(wǎng)絡(luò)接口層。
網(wǎng)絡(luò)接口層
模型的基層是網(wǎng)絡(luò)接口層。負責(zé)數(shù)據(jù)幀的發(fā)送和接收,幀是獨立的網(wǎng)絡(luò)信息傳輸單元。網(wǎng)絡(luò)接口層將幀放在網(wǎng)上,或從網(wǎng)上把幀取下來。
互聯(lián)層
互聯(lián)協(xié)議將數(shù)據(jù)包封裝成internet數(shù)據(jù)報,并運行必要的路由算法。
這里有四個互聯(lián)協(xié)議:
網(wǎng)際協(xié)議IP:負責(zé)在主機和網(wǎng)絡(luò)之間尋址和路由數(shù)據(jù)包。
地址解析協(xié)議ARP:獲得同一物理網(wǎng)絡(luò)中的硬件主機地址。
網(wǎng)際控制消息協(xié)議ICMP:發(fā)送消息,并報告有關(guān)數(shù)據(jù)包的傳送錯誤。
互聯(lián)組管理協(xié)議IGMP:被IP主機拿來向本地多路廣播路由器報告主機組成員。
傳輸層
傳輸協(xié)議在計算機之間提供通信會話。傳輸協(xié)議的選擇根據(jù)數(shù)據(jù)傳輸方式而定。
兩個傳輸協(xié)議:
傳輸控制協(xié)議TCP:為應(yīng)用程序提供可靠的通信連接。適合于一次傳輸大批數(shù)據(jù)的情況。并適用于要求得到響應(yīng)的應(yīng)用程序。
用戶數(shù)據(jù)報協(xié)議UDP:提供了無連接通信,且不對傳送包進行可靠的保證。適合于一次傳輸小量數(shù)據(jù),可靠性則由應(yīng)用層來負責(zé)。
應(yīng)用層
應(yīng)用程序通過這一層訪問網(wǎng)絡(luò)。
網(wǎng)絡(luò)接口技術(shù)
IP使用網(wǎng)絡(luò)設(shè)備接口規(guī)范NDIS向網(wǎng)絡(luò)接口層提交幀。IP支持廣域網(wǎng)和本地網(wǎng)接口技術(shù)。
串行線路協(xié)議
TCP/IPG一般通過internet串行線路協(xié)議SLIP或點對點協(xié)議PPP在串行線上進行數(shù)據(jù)傳送。(是不是我們平時把它稱之為異步通信,對于要拿LINUX提供建立遠程連接的朋友應(yīng)該多研究一下這方面的知識)?
2、ARP
要在網(wǎng)絡(luò)上通信,主機就必須知道對方主機的硬件地址(我們不是老遇到網(wǎng)卡的物理地址嘛)。地址解析就是將主機IP地址映射為硬件地址的過程。地址解析協(xié)議ARP用于獲得在同一物理網(wǎng)絡(luò)中的主機的硬件地址。
解釋本地IP地址(要了解地址解析工作過程的朋友看好了)
主機IP地址解析為硬件地址:
(1)當(dāng)一臺主機要與別的主機通信時,初始化ARP請求。當(dāng)該IP斷定IP地址是本地時,源主機在ARP緩存中查找目標主機的硬件地址。
(2)要是找不到映射的話,ARP建立一個請求,源主機IP地址和硬件地址會被包括在請求中,該請求通過廣播,使所有本地主機均能接收并處理。
(3)本地網(wǎng)上的每個主機都收到廣播并尋找相符的IP地址。
(4)當(dāng)目標主機斷定請求中的IP地址與自己的相符時,直接發(fā)送一個ARP答復(fù),將自己的硬件地址傳給源主機。以源主機的IP地址和硬件地址更新它的ARP緩存。源主機收到回答后便建立起了通信。
解析遠程IP地址
不同網(wǎng)絡(luò)中的主機互相通信,ARP廣播的是源主機的缺省網(wǎng)關(guān)。
目標IP地址是一個遠程網(wǎng)絡(luò)主機的話,ARP將廣播一個路由器的地址。
(1)通信請求初始化時,得知目標IP地址為遠程地址。源主機在本地路由表中查找,若無,源主機認為是缺省網(wǎng)關(guān)的IP地址。在ARP緩存中查找符合該網(wǎng)關(guān)記錄的IP地址(硬件地址)。
(2)若沒找到該網(wǎng)關(guān)的記錄,ARP將廣播請求網(wǎng)關(guān)地址而不是目標主機的地址。路由器用自己的硬件地址響應(yīng)源主機的ARP請求。源主機則將數(shù)據(jù)包送到路由器以傳送到目標主機的網(wǎng)絡(luò),最終達到目標主機。
(3)在路由器上,由IP決定目標IP地址是本地還是遠程。如果是本地,路由器用ARP(緩存或廣播)獲得硬件地址。如果是遠程,路由器在其路由表中查找該網(wǎng)關(guān),然后運用ARP獲得此網(wǎng)關(guān)的硬件地址。數(shù)據(jù)包被直接發(fā)送到下一個目標主機。
(4)目標主機收到請求后,形成ICMP響應(yīng)。因源主機在遠程網(wǎng)上,將在本地路由表中查找源主機網(wǎng)的網(wǎng)關(guān)。找到網(wǎng)關(guān)后,ARP即獲取它的硬件地址。
(5)如果此網(wǎng)關(guān)的硬件地址不在ARP緩存中,通過ARP廣播獲得。一旦它獲得硬件地址,ICMP響應(yīng)就送到路由器上,然后傳到源主機。
ARP緩存
為減少廣播量,ARP在緩存中保存地址映射以備用。ARP緩存保存有動態(tài)項和靜態(tài)項。動態(tài)項是自動添加和刪除的,靜態(tài)項則保留在CACHE中直到計算
機重新啟動。
ARP緩存總是為本地子網(wǎng)保留硬件廣播地址(0xffffffffffffh)作為一個永久項。
此項使主機能夠接受ARP廣播。當(dāng)查看緩存時,該項不會顯示。
每條ARP緩存記錄的生命周期為10分鐘,2分鐘內(nèi)未用則刪除。緩存容量滿時,刪除最老的記錄。
加入靜態(tài)(永久)記錄
通過添加靜態(tài)ARP項可減少ARP請求訪問主機的次數(shù)。
ARP包的結(jié)構(gòu)
ARP結(jié)構(gòu)的字段如下:
硬件類型--使用的硬件(網(wǎng)絡(luò)訪問層)類型。
協(xié)議類型--解析過程中的協(xié)議使用以太類型的值。
硬件地址長度--硬件地址的字節(jié)長度,對于以太網(wǎng)和令牌環(huán)來說,其長度為6字節(jié)。
協(xié)議地址長度--協(xié)議地址字節(jié)的長度,IP的長度是4字節(jié)。
操作號--指定當(dāng)前執(zhí)行操作的字段。
發(fā)送者的硬件地址--發(fā)送者的硬件地址。
發(fā)送者的協(xié)議地址--發(fā)送者的協(xié)議地址。
目的站硬件地址--目標者的硬件地址。
目的站協(xié)議地址--目標者的協(xié)議地址。
3、ICMP和IGMP
internet控制消息協(xié)議ICMP是用于報告錯誤并代表IP對消息進行控制。
IP運用互聯(lián)組管理協(xié)議IGMP來告訴路由器,某一網(wǎng)絡(luò)上指導(dǎo)組中的可用主機。
ICMP
ICMP源抑制消息:當(dāng)TCP/IP主機發(fā)送數(shù)據(jù)到另一主機時,如果速度達到路由器或者鏈路的飽和狀態(tài),路由器發(fā)出一個ICMP源抑制消息。
ICMP數(shù)據(jù)包結(jié)構(gòu)
類型:一個8位類型字段,表示ICMP數(shù)據(jù)包類型。
代碼:一個8位代碼域,表示指定類型中的一個功能。如果一個類型中只有一種功能,代碼域置為0。
檢驗和:數(shù)據(jù)包中ICMP部分上的一個16位檢驗和。
指定類型的數(shù)據(jù)隨每個ICMP類型變化的一個附加數(shù)據(jù)。
IGMP
IGMP信息傳給別的路由器以使每個支持多路廣播的路由器獲知哪個主機組和哪個網(wǎng)絡(luò)中。
IGMP包結(jié)構(gòu)
版本:IGMP的版本,值一般為0x1h。
類型:IGMP消息的類型。0x1h類型稱為主機成員請求,在多路廣播路由器上用于指定多級組中的任何成員輪詢一個網(wǎng)絡(luò)。0x2h類型稱為主機成員報告,在主機上用于發(fā)布指定組中的成員情況或?qū)σ粋路由器的主機成員請求進行回答。
未用:未用的域名被發(fā)送者置零且被接收者忽略。
檢驗和:IGMP頭的一個16位檢驗和。
組地址:主機用該組地址在一個主機成員請求中存儲IP多路廣播地址。在主機成員請求中,組地址被全置零,而且硬件級的多路廣播地址被用來標示主機組。
4、IP
IP是一個無連接的協(xié)議,主要就是負責(zé)在主機間尋址并為數(shù)據(jù)包設(shè)定路由,在交換數(shù)據(jù)前它并不建立會話。因為它不保證正確傳遞,另一方面,數(shù)據(jù)在被收到時,IP不需要收到確認,所以它是不可靠的。
有一些字段,在當(dāng)數(shù)據(jù)從傳輸層傳下來時,會被附加在數(shù)據(jù)包中,我們來看一下這些字段:
源IP地址:用IP地址確定數(shù)據(jù)報發(fā)送者。
目標IP地址:用IP地址確定數(shù)據(jù)報目標。
協(xié)議:告知目的機的IP是否將包傳給TCP或UDP。
檢查和:一個簡單的數(shù)學(xué)計算,用來證實收到的包的完整性。
TTL生存有效時間:指定一個數(shù)據(jù)報被丟棄之前,在網(wǎng)絡(luò)上能停留多少時間(以秒計)。它避免了包在網(wǎng)絡(luò)中無休止循環(huán)。路由器會根據(jù)數(shù)據(jù)在路由器中駐留的時間來遞減TTL。其中數(shù)據(jù)報通過一次路由器,TTL至少減少一秒。
根據(jù)我們前面提到關(guān)于ARP的知識,如果IP地址目標為本地地址時,IP將數(shù)據(jù)包直接傳給那個主機;如果目標地址為遠程地址的話,IP在本地的路由表中查找遠程主機的路由(看來好象我們平時撥114一樣)。如果找到一個路由,IP用它傳送數(shù)據(jù)包。如果沒找到呢,就會將數(shù)據(jù)包發(fā)送到源主機的缺省網(wǎng)關(guān),也稱之為路由器。(很多時候一直在搞網(wǎng)關(guān)和路由器的定義,其實我覺得在學(xué)的時候不一定死摳概念,現(xiàn)在硬件和軟件結(jié)合的產(chǎn)品越來越多了,一時很分清的,只要我們運用的時候可以解決實際問題嘛。)
這樣當(dāng)路由器收到一個包后,該包向上傳給IP:
(1)如果交通阻塞(聽起來蠻可怕的),包在路由器中停滯,TTL至少減1或更多。要是它降到0的話,包就會被拋棄。
(2)如果對于下一網(wǎng)絡(luò)來說包太大的話,IP會將它分割成若干個小包。
(3)如果包被分解,IP為每個新包制造一個新頭,其中包括:一個標志,用來顯示其它小包在其后;一個小包ID,用來確定所有小包是一起的;一個小包偏移,用來告訴接收主機怎么重新組合它們。
(4)IP計算一個新的檢驗和。
(5)IP獲取一個路由的目標硬件地址。
(6)IP轉(zhuǎn)發(fā)包。
在下一主機,包被發(fā)送到TCP或UDP。每個路由器都要重復(fù)該過程。直到包到達最終目的地。當(dāng)包到達最終目的地后,IP將小包組裝成原來的包。
5、TCP
TCP是一種可靠的面向連接的傳送服務(wù)。它在傳送數(shù)據(jù)時是分段進行的,主機交換數(shù)據(jù)必須建立一個會話。它用比特流通信,即數(shù)據(jù)被作為無結(jié)構(gòu)的字節(jié)流。
通過每個TCP傳輸?shù)淖侄沃付樞蛱,以獲得可靠性。如果一個分段被分解成幾個小段,接收主機會知道是否所有小段都已收到。通過發(fā)送應(yīng)答,用以確認別的主機收到了數(shù)據(jù)。對于發(fā)送的每一個小段,接收主機必須在一個指定的時間返回一個確認。如果發(fā)送者未收到確認,數(shù)據(jù)會被重新發(fā)送;如果收到的數(shù)據(jù)包損壞,接收主機會舍棄它,因為確認未被發(fā)送,發(fā)送者會重新發(fā)送分段。
端口
SOCKETS實用程序使用一個協(xié)議端口號來標明自己應(yīng)用的唯一性。端口可以使用0到65536之間的任何數(shù)字。在服務(wù)請求時,操作系統(tǒng)動態(tài)地為客戶端的應(yīng)用程序分配端口號。
套接字
套接字在要領(lǐng)上與文件句柄類似,因為其功能是作為網(wǎng)絡(luò)通信的終結(jié)點。一個應(yīng)用程序通過定義三部分來產(chǎn)生一個套接字:主機IP地址、服務(wù)類型(面向連接的服務(wù)是TCP,無連接服務(wù)是UDP)、應(yīng)用程序所用的端口。
TCP端口
TCP端口為信息的傳送提供定地點,端口號小于256的定義為常用端口。
TCP的三次握手
TCP對話通過三次握手來初始化。三次握手的目的是使數(shù)據(jù)段的發(fā)送和接收同步;告訴其它主機其一次可接收的數(shù)據(jù)量,并建立虛連接。
我們來看看這三次握手的簡單過程:
(1)初始化主機通過一個同步標志置位的數(shù)據(jù)段發(fā)出會話請求。
(2)接收主機通過發(fā)回具有以下項目的數(shù)據(jù)段表示回復(fù):同步標志置位、即將發(fā)送的數(shù)據(jù)段的起始字節(jié)的順序號、應(yīng)答并帶有將收到的下一個數(shù)據(jù)段的字節(jié)順序號。
(3)請求主機再回送一個數(shù)據(jù)段,并帶有確認順序號和確認號。
TCP滑動窗口
TCP滑動窗口用來暫存兩臺主機間要傳送的數(shù)據(jù),有點類似CACHE。
每個TCP/IP主機有兩個滑動窗口:一個用于接收數(shù)據(jù),另一個用于發(fā)送數(shù)據(jù)。
6、UDP
用戶數(shù)據(jù)報協(xié)議UDP提供了無連接的數(shù)據(jù)報服務(wù)。它適用于無須應(yīng)答并且通常一次只傳送少量數(shù)據(jù)的應(yīng)用軟件。
UDP端口
端口作為多路復(fù)用的消息隊列使用。
15 NETSTAT 網(wǎng)絡(luò)狀態(tài)
53 DOMAIN 域名服務(wù)器
69 TFTP 平凡文件傳送協(xié)議
137 NETBIOS-NS NETBIOS命令服務(wù)
138 NETBIOS-DGM NETBIOS數(shù)據(jù)報服務(wù)
161 SNMP SNMP網(wǎng)絡(luò)監(jiān)視器
IP地址分配
1、IP地址
IP地址標識著網(wǎng)絡(luò)中一個系統(tǒng)的位置。我們知道每個IP地址都是由兩部分組成的:網(wǎng)絡(luò)號和主機號。其中網(wǎng)絡(luò)號標識一個物理的網(wǎng)絡(luò),同一個網(wǎng)絡(luò)上所有主機需要同一個網(wǎng)絡(luò)號,該號在互聯(lián)網(wǎng)中是唯一的;而主機號確定網(wǎng)絡(luò)中的一個工作端、服務(wù)器、路由器其它TCP/IP主機。對于同一個網(wǎng)絡(luò)號來說,主機號是唯一的。每個TCP/IP主機由一個邏輯IP地址確定。
網(wǎng)絡(luò)號和主機號
IP地址有兩種表示形式:二進制表示(1和0太多了就搞不清)和點分十進制表示。每個IP地址的長度為4字節(jié),由四個8位域組成,我們通常稱之為八位體。八位體由句點.分開,表示為一個0-255之間的十進制數(shù)。一個IP地址的4個域分別標明了網(wǎng)絡(luò)號和主機號。
2、地址類型
為適應(yīng)不同大小的網(wǎng)絡(luò),internet定義了5種IP地址類型。
可以通過IP地址的前八位來確定地址的類型:
類型 IP形式 網(wǎng)絡(luò)號 主機號
A類 w.x.y.z w x.y.z
B類 w.x.y.z w.x y.z
C類 w.x.y.z w.x.y z
我們來看一下這5類地址:
A類地址:可以擁有很大數(shù)量的主機,最高位為0,緊跟的7位表示網(wǎng)絡(luò)號,余24位表示主機號,總共允許有126個網(wǎng)絡(luò)。
B類地址:被分配到中等規(guī)模和大規(guī)模的網(wǎng)絡(luò)中,最高兩位總被置于二進制的10,允許有16384個網(wǎng)絡(luò)。
C類地址:被用于局域網(wǎng)。高三位被置為二進制的110,允許大約200萬個網(wǎng)絡(luò)。
D類地址:被用于多路廣播組用戶,高四位總被置為1110,余下的位用于標明客戶機所屬的組。
E類地址是一種僅供試驗的地址。
3、地址分配指南
在分配網(wǎng)絡(luò)號和主機號時應(yīng)遵守以下幾條準則:
(1)網(wǎng)絡(luò)號不能為127。大家知道該標識號被保留作回路及診斷功能,還記得平時ping
127.0.0.1?
(2)不能將網(wǎng)絡(luò)號和主機號的各位均置1。如果每一位都是1的話,該地址會被解釋為網(wǎng)內(nèi)
廣播而不是一個主機號。(TCP/IP是一個可廣播的協(xié)議嘛)
(3)相應(yīng)于上面一條,各位均不能置0,否則該地址被解釋為“就是本網(wǎng)絡(luò)”。
(4)對于本網(wǎng)絡(luò)來說,主機號應(yīng)該是唯一。(否則會出現(xiàn)IP地址已分配或有沖突之類的錯誤)
分配網(wǎng)絡(luò)號
對于每個網(wǎng)絡(luò)以及廣域連接,必須有唯一的網(wǎng)絡(luò)號,主機號用于區(qū)分同一物理網(wǎng)絡(luò)中的不同主機。如果網(wǎng)絡(luò)由路由器連接,則每個廣域連接都需要唯一的網(wǎng)絡(luò)號。
分配主機號
主機號用于區(qū)分同一網(wǎng)絡(luò)中不同的主機,并且主機號應(yīng)該是唯一的。所有的主機包括路由器間的接口,都應(yīng)該有唯一的網(wǎng)絡(luò)號。路由器的主機號,要配置成工作站的缺省網(wǎng)關(guān)地址。
有效的主機號
A類:w.0.0.1--w.255.255.254
B類:w.x.0.1--w.x.255.254
C類:w.x.y.1--w.x.y.254
4、子網(wǎng)屏蔽和IP地址
TCP/IP上的每臺主機都需要用一個子網(wǎng)屏蔽號。它是一個4字節(jié)的地址,用來封裝或“屏蔽”IP地址的一部分,以區(qū)分網(wǎng)絡(luò)號和主機號。當(dāng)網(wǎng)絡(luò)還沒有劃分為子網(wǎng)時,可以使用缺省的子網(wǎng)屏蔽;當(dāng)網(wǎng)絡(luò)被劃分為若干個子網(wǎng)時,就要使用自定義的子網(wǎng)屏蔽了。
缺省值
我們來看看缺省的子網(wǎng)屏蔽值,它用于一個還沒有劃分子網(wǎng)的網(wǎng)絡(luò)。即使是在一個單段網(wǎng)絡(luò)上,每臺主機也都需要這樣的缺省值。
它的形式依賴于網(wǎng)絡(luò)的地址類型。在它的4個字節(jié)里,所有對應(yīng)網(wǎng)絡(luò)號的位都被置為1,于是每個八位體的十進制值都是255;所有對就主機號的位都置為0。例如:C類網(wǎng)地址192.168.0.1和相應(yīng)的缺省屏蔽值255.255.255.0。
確定數(shù)據(jù)包的目的地址
我們說把屏蔽值和IP地址值做“與”的操作其實是一個內(nèi)部過程,它用來確定一個數(shù)據(jù)包是傳給本地還是遠程網(wǎng)絡(luò)上的主機。其相應(yīng)的操作過程是這樣的:當(dāng)TCP/IP初始化時,主機的IP地址和子網(wǎng)屏蔽值相“與”。在數(shù)據(jù)包被發(fā)送之前,再把目的地址也和屏蔽值作“與”,這樣如果發(fā)現(xiàn)源IP地址和目的IP地址相匹配,IP協(xié)議就知道數(shù)據(jù)包屬于本地網(wǎng)上的某臺主機;否則數(shù)據(jù)包將被送到路由器上。
注:我們知道“與”操作是將IP地址中的每一位與子網(wǎng)屏蔽中相應(yīng)的位按邏輯與作比較。
建立子網(wǎng)
1、 子網(wǎng)簡介
一個網(wǎng)絡(luò)實際上可能會有多個物理網(wǎng)段,我們把這些網(wǎng)段稱之為子網(wǎng),其使用的IP地址是由某個網(wǎng)絡(luò)號派生而得到的。
將一個網(wǎng)絡(luò)劃分成若干個子網(wǎng),需要使用不同的網(wǎng)絡(luò)號或子網(wǎng)號。當(dāng)然了,劃分子網(wǎng)有它的優(yōu)點,通過劃分子網(wǎng),每個單位可以將復(fù)雜的物理網(wǎng)段連接成一個網(wǎng)絡(luò),并且可以:
(1) 混合使用多種技術(shù),比如以太網(wǎng)和令牌環(huán)網(wǎng)。(最流行的兩種接口都支持了哦)
(2) 克服當(dāng)前技術(shù)的限制,比如突破每段主機的最大數(shù)量限制。
(3) 通過重定向傳輸以及減少廣播等傳輸方式以減輕網(wǎng)絡(luò)的擁擠。
實現(xiàn)子網(wǎng)劃分
在動手劃分子網(wǎng)之前,我們一定要先分析一下自己的需求以及將來的規(guī)劃。一般情況下我們遵循這樣的準則:
(1) 確定網(wǎng)絡(luò)中的物理段數(shù)量。(就是子網(wǎng)個數(shù)嘛)
(2) 確定每個子網(wǎng)需要的主機數(shù)。注意一個主機至少一個IP地址。
(3) 基于此需求,定義:整個網(wǎng)絡(luò)的子網(wǎng)屏蔽、每個子網(wǎng)唯一的子網(wǎng)號和每個子網(wǎng)的主機號范圍。
子網(wǎng)屏蔽位
在定義一個子網(wǎng)屏蔽之前,確定一下將來需要的子網(wǎng)數(shù)量及每子網(wǎng)的主機數(shù)是必不可少的一步。因為當(dāng)更多的位用于子網(wǎng)屏蔽時,就有更多的可用子網(wǎng)了,但每個子網(wǎng)中的主機數(shù)將減少。(這和定義IP地址的概念正好相反)
2、定義子網(wǎng)屏蔽
將網(wǎng)絡(luò)劃分成若干個子網(wǎng)時,必須要定義好子網(wǎng)屏蔽。我們來看看定義的步驟:
(1)確定物理網(wǎng)段也就是子網(wǎng)的個數(shù),并將這個數(shù)字轉(zhuǎn)換成二進制數(shù)。比如B類地址,分6個子網(wǎng)就是110。
(2)計算物理網(wǎng)段數(shù)(子網(wǎng)數(shù))的二進制位數(shù),這里是110,所以需要3位。
(3)以高位順序(從左到右)將這個反碼轉(zhuǎn)換成相應(yīng)的十進制值,因為需要3位,就將主機號前3位作為子網(wǎng)號,這里是11100000,所以屏蔽就是255.255.254.0。
3、定義子網(wǎng)號
子網(wǎng)號與子網(wǎng)屏蔽的位數(shù)相同。
(1)列出子網(wǎng)號按高到低的順序使用的位數(shù)。例如子網(wǎng)屏蔽使用了3位,二進制值是11100000。
(2)將最低的一位1轉(zhuǎn)換成十進制,用這個值來定義子網(wǎng)的增量。這個例子中是1110,所以增量是32。
(3)用這個增量迭加從0開始的子網(wǎng)號,直到下一個值為256。這個例子中就是w.x.32.1-w.x.63.254、w.x.64.1-w.x.127.254等。
4、定義子網(wǎng)中的主機號
從上面的例子看出,一旦定義了子網(wǎng)號,就已經(jīng)確定了每個子網(wǎng)的主機號了。我們在做每次增量后得出的值表明了子網(wǎng)中主機號范圍的起始值。
確定每個子網(wǎng)中的主機數(shù)目
(1)計算主機號可用的位數(shù)。例如在B類網(wǎng)中用3位定義了網(wǎng)絡(luò)號,那么余下的13位定義了主機號。
(2)將這個余下的位數(shù)也就是主機號轉(zhuǎn)換為十進制,再減去1。例如13位值1111111111111轉(zhuǎn)換為十進制的話就是8191,所以這個網(wǎng)絡(luò)中每個子網(wǎng)的主機數(shù)就是8190了。
--------------------------------------------------------------------------------
實現(xiàn)IP路由
1、IP路由簡介
路由就是選擇一條數(shù)據(jù)包傳輸路徑的過程。當(dāng)TCP/IP主機發(fā)送IP數(shù)據(jù)包時,便出現(xiàn)了路由,且當(dāng)?shù)竭_IP路由器還會再次出現(xiàn)。路由器是從一個物理網(wǎng)向另一個物理網(wǎng)發(fā)送數(shù)據(jù)包的裝置,路由器通常被稱為網(wǎng)關(guān)。對于發(fā)送的主機和路由器而言,必須決定向哪里轉(zhuǎn)發(fā)數(shù)據(jù)包。在決定路由時,IP層查詢位于內(nèi)存中的路由表。
(1)當(dāng)一個主機試圖與另一個主機通信時,IP首先決定目的主機是一個本地網(wǎng)還是遠程網(wǎng)。
(2)如果目的主機是遠程網(wǎng),IP將查詢路由表來為遠程主機或遠程網(wǎng)選擇一個路由。
(3)若未找到明確的路由,IP用缺省的網(wǎng)關(guān)地址將一個數(shù)據(jù)傳送給另一個路由器。
(4)在該路由器中,路由表再次為遠程主機或網(wǎng)絡(luò)查詢路由,若還未找到路由,該數(shù)據(jù)包將發(fā)送到該路由器的缺省網(wǎng)關(guān)地址。
每發(fā)現(xiàn)一條路由,數(shù)據(jù)包被轉(zhuǎn)送下一級路由器,稱為一次“跳步”,并最終發(fā)送至目的主機。
若未發(fā)現(xiàn)任何一個路由,源主機將收到一個出錯信息。
--------------------------------------------------------------------------------
TCP/IP協(xié)議介紹
TCP/IP的通訊協(xié)議
這部分簡要介紹一下TCP/IP的內(nèi)部結(jié)構(gòu),為討論與互聯(lián)網(wǎng)有關(guān)的安全問題打下基礎(chǔ)。TCP/IP協(xié)議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協(xié)議(例如T1和X.25、以太網(wǎng)以及RS-232串行接口)之上。確切地說,TCP/IP協(xié)議是一組包括TCP協(xié)議和IP協(xié)議,UDP(User Datagram Protocol)協(xié)議、ICMP(Internet Control Message Protocol)協(xié)議和其他一些協(xié)議的協(xié)議組。
TCP/IP整體構(gòu)架概述
TCP/IP協(xié)議并不完全符合OSI的七層參考模型。傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)路層、傳輸層、話路層、表示層和應(yīng)用層。而TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為:
應(yīng)用層:應(yīng)用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠程訪問協(xié)議(Telnet)等。
傳輸層:在此層中,它提供了節(jié)點間的數(shù)據(jù)傳送服務(wù),如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報協(xié)議(UDP)等,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又,這一層負責(zé)傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達并接收。
互連網(wǎng)絡(luò)層:負責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達目的主機(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。
網(wǎng)絡(luò)接口層:對實際的網(wǎng)絡(luò)媒體的管理,定義如何使用實際網(wǎng)絡(luò)(如Ethernet、Serial Line等)來傳送數(shù)據(jù)。
TCP/IP中的協(xié)議
以下簡單介紹TCP/IP中的協(xié)議都具備什么樣的功能,都是如何工作的:
1. IP
網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)議。
IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因為IP并沒有做任何事情來確認數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時,通常假設(shè)包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務(wù)的認證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個有效的主機發(fā)送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務(wù)來說,使用了該選項的IP包好象是從路徑上的最后一個系統(tǒng)傳遞過來的,而不是來自于它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統(tǒng)來進行平常是被禁止的連接。那么,許多依靠IP源地址做確認的服務(wù)將產(chǎn)生問題并且會被非法入侵。
2. TCP
如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進行錯誤檢查,同時實現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應(yīng)用程序,例如Telnet的服務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動程序和物理介質(zhì),最后到接收方。
面向連接的服務(wù)(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發(fā)送和接收域名數(shù)據(jù)庫),但使用UDP傳送有關(guān)單個主機的信息。
3.UDP
UDP與TCP位于同一層,但對于數(shù)據(jù)包的順序錯誤或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢---應(yīng)答的服務(wù),例如NFS。相對于FTP或Telnet,這些服務(wù)需要交換的信息量較小。使用UDP的服務(wù)包括NTP(網(wǎng)落時間協(xié)議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統(tǒng)間沒有虛電路),也就是說,與UDP相關(guān)的服務(wù)面臨著更大的危險。
4.ICMP
ICMP與IP位于同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關(guān)通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其他系統(tǒng)的更準確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務(wù)。
5. TCP和UDP的端口結(jié)構(gòu)
TCP和UDP服務(wù)通常有一個客戶/服務(wù)器的關(guān)系,例如,一個Telnet服務(wù)進程開始在系統(tǒng)上處于空閑狀態(tài),等待著連接。用戶使用Telnet客戶程序與服務(wù)進程建立一個連接?蛻舫绦蛳蚍⻊(wù)進程寫入信息,服務(wù)進程讀出信息并發(fā)出響應(yīng),客戶程序讀出響應(yīng)并向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。
兩個系統(tǒng)間的多重Telnet連接是如何相互確認并協(xié)調(diào)一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:
源IP地址---發(fā)送包的IP地址。
目的IP地址---接收包的IP地址。
源端口---源系統(tǒng)上的連接的端口。
目的端口---目的系統(tǒng)上的連接的端口。
端口是一個軟件結(jié)構(gòu),被客戶程序或服務(wù)進程用來發(fā)送和接收信息。一個端口對應(yīng)一個16比特的數(shù)。服務(wù)進程通常使用一個固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號是‘廣為人知’的,因為在建立與特定的主機或服務(wù)的連接時,需要這些地址和目的地址進行通訊。
--------------------------------------------------------------------------------
TCP/IP遠程訪問操作
TCP/IP網(wǎng)絡(luò)通信軟件包使用遠程訪問的命令,這些命令首先是由UC Berkely為Arpanet開發(fā)的。它允許您遠程注冊到另一個系統(tǒng)中,并從一個系統(tǒng)復(fù)制文件到另一個系統(tǒng)。您能取得關(guān)于一個系統(tǒng)的信息,比如當(dāng)前誰正在注冊使用。調(diào)用一個系統(tǒng)的地址時,這些遠程命令使用域名或IP地址。和TCP/IP遠程訪問命令一樣,域名地址開始好是為在Arpanet上使用而設(shè)計。
許多TCP/IP命令可以和用在Internet上的網(wǎng)絡(luò)通信功能相比較。例如,用TCP/IP命令rlogin可以遠程注冊到一個系統(tǒng),它和telnet相似。rcp命令能遠程復(fù)制文件,它執(zhí)行和ftp相同的功能。TCP/IP命令的不同之處是它們提供給用戶的易用和易控制性。您能很容易地訪問在不同的Unix或Linux系統(tǒng)中的帳號,并且能控制訪問這些帳號但沒有提供口令的用戶。事實上您能提供給不同的用戶提供關(guān)于您的帳號的一種組權(quán)限。
一、TCP/IP網(wǎng)絡(luò)系統(tǒng)信息:rwho,uptime和ping
這些命令是一些TCP/IP命令,通過它們,您能從網(wǎng)絡(luò)中的不同系統(tǒng)上取得信息。您能找到誰正在注冊,得到另一個系統(tǒng)中用戶的信息,或查詢一個系統(tǒng)是否正在運行。例如,rwho命令和who命令的功能很相似。它顯示網(wǎng)絡(luò)中的每個系統(tǒng)的當(dāng)前注冊的用戶。
$rwho
violet robert:tty1 Sept 10 10:34
garnet chris:tty2 Sept 10 09:22
命令ruptime可以顯示網(wǎng)絡(luò)中的每個系統(tǒng)的信息。此信息能顯示出每個系統(tǒng)是如何執(zhí)行。ruptime顯示系統(tǒng)是否運行,它運行了多久,系統(tǒng)中的用戶數(shù)和系統(tǒng)在最后5、10和15分鐘內(nèi)的系統(tǒng)負荷。
$ruptime
violet up 11+04:10, 8 users, load 1.20 1.10
garnet up 11+04:10, 20 users, load 1.50 1.30
命令ping能檢測出系統(tǒng)是否啟動和運行。ping命令加上您想檢測的系統(tǒng)名做為參數(shù),下面的例子將檢測violet是否啟動并連接在網(wǎng)絡(luò)中。
$ping violet
violet is alive
$
如果您想檢測的系統(tǒng)已經(jīng)關(guān)機,將得到一個如下的響應(yīng)。這種情況下,garnet是關(guān)閉并沒有連接到網(wǎng)絡(luò)中。
$ping garnet
no answer from garnet
$
二、遠程訪問權(quán)限:.rhosts
您能用.rhosts文件控制使用TCP/IP命令對您帳號的訪問。用戶能用標準的編輯器象Vi來創(chuàng)建他們帳號中的.rhosts文件。它必須位于用戶的主目錄。下面的例子中,使用者顯示文件.rhosts文件的內(nèi)容。
$cat.rhosts
garnet chris
ciolet robert
使用.rhosts文件是一種允許用戶不提供口令而訪問您的系統(tǒng)的簡單方法。如果需要禁止此用戶訪問,只須簡單地從文件.rhost中刪除系統(tǒng)各和用戶注冊名。如果一個用戶的注冊名和系統(tǒng)名在文件.rhost中,那么此用戶即呆不提供口令直接訪問系統(tǒng)。并不是所有的遠程注冊操作都需要這種訪問形式(您能用輸入口令的方式來替代);但一些遠程命令要求有.rhosts文件,象遠程復(fù)制文件或遠程執(zhí)行Linux命令。如果您想在遠程系統(tǒng)的帳號中招待這些命令,此帳號的.rhosts文件中必須有您 的注冊名和系統(tǒng)名。
通過.rhosts對某一系統(tǒng)進行訪問時,也允許您使用TCP/IP命令直接訪問系統(tǒng)中您的其他帳號。您不需要先注冊到這些帳號中?梢园严到y(tǒng)中您的其他帳號做為當(dāng)前注冊帳號的擴展。不管文件牌佻 的哪個賬號下,都可以用frcp命令從一個目錄復(fù)制到另一個目錄。用命令rsh,可以在您的其他帳號中招待任何Linux命令。
三、遠程注冊:rlogin
您可能在網(wǎng)絡(luò)中的不同系統(tǒng)上都有自己的帳號,或者可以訪問別人在另一個系統(tǒng)上的帳號。要訪問別的系統(tǒng)中的帳號,首先要注冊到您的系統(tǒng)中,接著通過網(wǎng)絡(luò)遠程注冊到帳號所在的系統(tǒng)中。用命令rlogin可以遠程注冊支別的系統(tǒng)。命令的參數(shù)應(yīng)是一個系統(tǒng)名。命令將把您連接到另一個系統(tǒng)中并開始注冊的過程.
用rlogin的注冊過程和一般的注冊過程有所不同,用rlogin時用戶不被提示輸入注冊名。rlogin假設(shè)您的本地系統(tǒng)中的注冊名和遠程系統(tǒng)中的一致。所以象上面執(zhí)行rlogin命令時,您將馬上被提示輸入口令。輸入口令后,您即可進入遠程系統(tǒng)各的帳號。
用rlogin假設(shè)注冊各是相同的,因為大多數(shù)的人用rlogin訪問別的系統(tǒng)中的注冊名一般和本地的注冊名是相同的。然而,當(dāng)遠程系統(tǒng)中的注冊名和本地系統(tǒng)的不同時,選項1-允許您輸入遠程系統(tǒng)帳戶的不同的注冊名。語法如下所示:
$rlogin sys tem-name -1 login-name
在下面的例子中,用戶使用注冊名robert注冊到violet的系統(tǒng)中。
$rlogin violet-1 robert
password
$
: 一旦注冊到遠程系統(tǒng)中,您能執(zhí)行任何命令?梢杂胑xit、CTRL-d或logout(TCSH或C-shell)結(jié)束連接。
四、遠程復(fù)制文件:rcp
您能用命令rcp從遠程系統(tǒng)復(fù)制文件到本地系統(tǒng)中。rcp執(zhí)行文件傳輸?shù)墓δ,它的操作和cp命令很相似,但它是通過網(wǎng)絡(luò)連接到另一系統(tǒng)。執(zhí)行命令rcp時要求遠程系統(tǒng)的。rhosts文件中有您的本地系統(tǒng)名和注冊各。命令rcp用關(guān)鍵字rcp開頭,參數(shù)為源文件名和復(fù)制的目標文件名。為了指定文件在遠程系統(tǒng)中,您需要在文件名前放置一個系統(tǒng)名,兩者之間用冒號分隔,如下所示:
$rcp sys tem-name:source-file slystem-name:copy-file
當(dāng)復(fù)制一個文件到遠程系統(tǒng)中時,復(fù)制的目標文件是遠程文件,它要求帶有系統(tǒng)名。而源文件在您的本機系統(tǒng)中,不要求系統(tǒng)名:
$rcp source-file remote-sys tem-name:copy-file
在下面的例子中,用戶從自己的系統(tǒng)中復(fù)制文件weather到遠程系統(tǒng)violet并重命名為monday.
$rcp weather violet:Monday
從遠程系統(tǒng)中復(fù)制一個文件到本地時,源文件是遠程文件,它要求帶有系統(tǒng)名。而復(fù)制的目標文件在您的本機系統(tǒng)中,不要求系統(tǒng)名:
$rcp remote-sys tem-name:source-file copy-file
在下面的例子中,用戶從遠程系統(tǒng)之間復(fù)制整個目錄。rcp命令加上-r選項將從一個系統(tǒng)復(fù)制一個目錄和它的子目錄到另一個系統(tǒng)。象cp命令一樣,rcp要求一個源目錄和復(fù)制目錄。在遠程系統(tǒng)中的目錄要求系統(tǒng)名和一個以分隔系統(tǒng)名和目錄名的冒號,以及目錄名。當(dāng)從您的系統(tǒng)復(fù)制目錄到一個遠程系統(tǒng),則在遠程系統(tǒng)中的復(fù)制目錄需要遠程系統(tǒng)名。
$rcp -r source-directory remote-sys tem-name:copy-directory
在下面的例子中,使用者把目錄letters復(fù)制到遠程系統(tǒng)violet中的目錄oldnotes中。
$rcp-r letters violet ldnotes
當(dāng)從您的系統(tǒng)復(fù)制一個遠程系統(tǒng)中的目錄到本地時,在遠程系統(tǒng)中的源目錄需要遠程系統(tǒng)名。
$rcp-r remote-sys tem-name:source-directory copy-directory
在下面的例子中,使用者把遠程系統(tǒng)violet中的目錄birthdays復(fù)制到本地的目錄party中。
$rcp-r violet:birthdays party
同時,您可以用星號指定名字,或用圓點引用當(dāng)前目錄。對于Shell的特殊字符,是由您的本地系統(tǒng)進行解釋轉(zhuǎn)換,而不是遠程系統(tǒng)。為了使遠程系統(tǒng)解釋轉(zhuǎn)換一個特定字符,您必須通進某種方式引用它。為了復(fù)制遠程系統(tǒng)種所有帶擴展名.c的文件到您的系統(tǒng)中,您需要用特殊字符-星號:*.c來指定所有的帶擴展名.c的文件。您必須注意引用星號的方式。下面的例子中,在系統(tǒng)violet中的帶.c擴展名的文件被復(fù)制到使用者的系統(tǒng)中。注意,星號是通過一個反斜杠引用。而最后的圓點,表示當(dāng)前的目錄,并沒被引用。它是由您的本地系統(tǒng)解釋并轉(zhuǎn)換的。
$rcp violet:\*.c
下面的例子中,目錄report將從使用者的本地系統(tǒng)復(fù)制到遠程系統(tǒng)的當(dāng)前目錄中。注意圓點被引用,它將被遠程系統(tǒng)解釋轉(zhuǎn)換。
$rcp -r reports violet:\.
五、遠程執(zhí)行:rsh
您可能需要在遠程系統(tǒng)中執(zhí)行一個命令。rsh命令將在遠程Linux系統(tǒng)上執(zhí)行一個命令并把結(jié)果顯示到您的系統(tǒng)中。當(dāng)然,您的系統(tǒng)名和注冊名必須在遠程系統(tǒng)的.rhosts文件中,命令rsh有兩個一般的參數(shù),一個系統(tǒng)名和一個Linux命令。語法如下所示:
$rsh remote-sytem-neame Linux-command
在下面的例子中,rsh命令將在遠程系統(tǒng)violet中執(zhí)行一個ls命令以列出在violet中目錄/home/robert中的文件。
$rsh violet ls /home/robert
除非是引用特定字符,否則它將被本李系統(tǒng)解釋轉(zhuǎn)換,對于控制標準輸出的特殊字符更是如此,象重定向或管道字符。下面的例了中列出遠程系統(tǒng)上的文件,并把它們送到本系統(tǒng)中的標準輸出。重定向操作由本地系統(tǒng)解釋,并把輸出改向到本地系統(tǒng)中的文件myfiles中。
$rsh violet ls /home/robert>;myfiles
如您引用一個特定字符,它將成為Linux命令的一部分被遠程系統(tǒng)解釋。引用重定向操作符將允許您在遠程系統(tǒng)中執(zhí)行重定向操作。下面的例子中,引用一個重定向操作符。它變成Linux命令的一部分,包括命令的參數(shù),文件名myfile。命令ls產(chǎn)生一列文件名并把它們重定向到遠程系統(tǒng)中的一個文件myfile中。
$rsh violet ls /home/robert'>;'myfiles
對于管道操作也是如此。下面例子中第一個命令輸出一列文件到本地的打印機中。標準的輸出能過管道輸出到您的在線打印機中。第二個命令中,一列文件將輸出遠程系統(tǒng)的打印機上。管道線被遠程系統(tǒng)解釋。輸送標準輸出到遠程系統(tǒng)的打印機上。
--------------------------------------------------------------------------------
(安全篇)
TCP/IP的層次不同提供的安全性也不同,例如,在網(wǎng)絡(luò)層提供虛擬私用網(wǎng)絡(luò),在傳輸層提供安全套接服務(wù)。下面將分別介紹TCP/IP不同層次的安全性和提高各層安全性的方法。
一、Internet層的安全性
對Internet層的安全協(xié)議進行標準化的想法早就有了。在過去十年里,已經(jīng)提出 了一些方案。例如,“安全協(xié)議3號(SP3)”就是美國國家安全局以及標準技術(shù)協(xié) 會作為“安全數(shù)據(jù)網(wǎng)絡(luò)系統(tǒng)(SDNS)”的一部分而制定的。“網(wǎng)絡(luò)層安全協(xié)議(NLS P)”是由國際標準化組織為“無連接網(wǎng)絡(luò)協(xié)議(CLNP)”制定的安全協(xié)議標準。 “集成化NLSP(I-NLSP)”是美國國家科技研究所提出的包括IP和CLNP在內(nèi)的統(tǒng)一 安全機制。SwIPe是另一個Intenet層的安全協(xié)議,由Ioannidis和Blaze提出并實 現(xiàn)原型。所有這些提案的共同點多于不同點。事實上,他們用的都是IP封裝技術(shù)。 其本質(zhì)是,純文本的包被加密,封裝在外層的IP報頭里,用來對加密的包進行In ternet上的路由選擇。到達另一端時,外層的IP報頭被拆開,報文被解密,然后 送到收報地點。
Internet工程特遣組(IETF)已經(jīng)特許Internet協(xié)議安全協(xié)議(IPSEC)工作組對IP安 全協(xié)議(IPSP)和對應(yīng)的Internet密鑰管理協(xié)議(IKMP)進行標準化工作。IPSP的主 要目的是使需要安全措施的用戶能夠使用相應(yīng)的加密安全體制。該體制不僅能在 目前通行的IP(IPv4)下工作,也能在IP的新版本(IPng或IPv6)下工作。該體制應(yīng) 該是與算法無關(guān)的,即使加密算法替換了,也不對其他部分的實現(xiàn)產(chǎn)生影響。此 外,該體制必須能實行多種安全政策,但要避免給不使用該體制的人造成不利影 響。按照這些要求,IPSEC工作組制訂了一個規(guī)范:認證頭(Authentication Hea der,AH)和封裝安全有效負荷(Encapsulating Security Payload,ESP)。簡言之, AH提供IP包的真實性和完整性,ESP提供機要內(nèi)容。
IP AH指一段消息認證代碼(Message Authentication Code,MAC),在發(fā)送IP包之 前,它已經(jīng)被事先計算好。發(fā)送方用一個加密密鑰算出AH,接收方用同一或另一 密鑰對之進行驗證。如果收發(fā)雙方使用的是單鑰體制,那它們就使用同一密鑰; 如果收發(fā)雙方使用的是公鑰體制,那它們就使用不同的密鑰。在后一種情形,AH 體制能額外地提供不可否認的服務(wù)。事實上,有些在傳輸中可變的域,如IPv4中 的time-to-live域或IPv6中的hop limit域,都是在AH的計算中必須忽略不計的。 RFC 1828首次規(guī)定了加封狀態(tài)下AH的計算和驗證中要采用帶密鑰的MD5算法。而與 此同時,MD5和加封狀態(tài)都被批評為加密強度太弱,并有替換的方案提出。
IP ESP的基本想法是整個IP包進行封裝,或者只對ESP內(nèi)上層協(xié)議的數(shù)據(jù)(運輸狀 態(tài))進行封裝,并對ESP的絕大部分數(shù)據(jù)進行加密。在管道狀態(tài)下,為當(dāng)前已加密 的ESP附加了一個新的IP頭(純文本),它可以用來對IP包在Internet上作路由選擇。 接收方把這個IP頭取掉,再對ESP進行解密,處理并取掉ESP頭,再對原來的IP包 或更高層協(xié)議的數(shù)據(jù)就象普通的IP包那樣進行處理。RFC 1827中對ESP的格式作了 規(guī)定,RFC 1829中規(guī)定了在密碼塊鏈接(CBC)狀態(tài)下ESP加密和解密要使用數(shù)據(jù)加 密標準(DES)。雖然其他算法和狀態(tài)也是可以使用的,但一些國家對此類產(chǎn)品的進 出口控制也是不能不考慮的因素。有些國家甚至連私用加密都要限制。
AH與ESP體制可以合用,也可以分用。不管怎么用,都逃不脫傳輸分析的攻擊。人 們不太清楚在Internet層上,是否真有經(jīng)濟有效的對抗傳輸分析的手段,但是在 Internet用戶里,真正把傳輸分析當(dāng)回事兒的也是寥寥無幾。
1995年8月,Internet工程領(lǐng)導(dǎo)小組(IESG)批準了有關(guān)IPSP的RFC作為Internet標 準系列的推薦標準。除RFC 1828和RFC 1829外,還有兩個實驗性的RFC文件,規(guī)定 了在AH和ESP體制中,用安全散列算法(SHA)來代替MD5(RFC 1852)和用三元DES代 替DES(RFC 1851)。
在最簡單的情況下,IPSP用手工來配置密鑰。然而,當(dāng)IPSP大規(guī)模發(fā)展的時候,就需要在Internet上建立標準化的密鑰管理協(xié)議。這個密鑰管理協(xié)議按照IPSP安全條例的要求,指定管理密鑰的方法。
因此,IPSEC工作組也負責(zé)進行Internet密鑰管理協(xié)議(IKMP),其他若干協(xié)議的標準化工作也已經(jīng)提上日程。其中最重要的有:
IBM 提出的“標準密鑰管理協(xié)議(MKMP)”
SUN 提出的“Internet協(xié)議的簡單密鑰管理(SKIP)”
Phil Karn 提出的“Photuris密鑰管理協(xié)議”
Hugo Krawczik 提出的“安全密鑰交換機制(SKEME)”
NSA 提出的“Internet安全條例及密鑰管理協(xié)議”
Hilarie Orman 提出的“OAKLEY密鑰決定協(xié)議”
在這里需要再次強調(diào)指出,這些協(xié)議草案的相似點多于不同點。除MKMP外,它們都要求一個既存的、完全可操作的公鑰基礎(chǔ)設(shè)施(PKI)。MKMP沒有這個要求,因為它假定雙方已經(jīng)共同知道一個主密鑰(Master Key),可能是事先手工發(fā)布的。SK IP要求Diffie-Hellman證書,其他協(xié)議則要求RSA證書。
1996年9月,IPSEC決定采用OAKLEY作為ISAKMP框架下強制推行的密鑰管理手段, 采用SKIP作為IPv4和IPv6實現(xiàn)時的優(yōu)先選擇。目前已經(jīng)有一些廠商實現(xiàn)了合成的 ISAKMP/OAKLEY方案。
Photuris以及類Photuris的協(xié)議的基本想法是對每一個會 話密鑰都采用Diffie-Hellman密鑰交換機制,并隨后采用簽名交換來確認Diffie --Hellman參數(shù),確保沒有“中間人”進行攻擊。這種組合最初是由Diffie、Oos chot和Wiener在一個“站對站(STS)”的協(xié)議中提出的。Photuris里面又添加了一 種所謂的“cookie”交換,它可以提供“清障(anti-logging)”功能,即防范對 服務(wù)攻擊的否認。 Photuris以及類Photuris的協(xié)議由于對每一個會話密鑰都采用Diffie-Hellman密 鑰交換機制,故可提供回傳保護(back-traffic protection,BTP)和完整轉(zhuǎn)發(fā)安 全性(perfect-forward secrecy,PFS)。實質(zhì)上,這意味著一旦某個攻擊者破解 了長效私鑰,比如Photuris中的RSA密鑰或SKIP中的Diffie-Hellman密鑰,所有其 他攻擊者就可以冒充被破解的密碼的擁有者。但是,攻擊者卻不一定有本事破解 該擁有者過去或未來收發(fā)的信息。
值得注意的是,SKIP并不提供BTP和PFS。盡管它采用Diffie-Hellman密鑰交換機 制,但交換的進行是隱含的,也就是說,兩個實體以證書形式彼此知道對方長效 Diffie--Hellman 公鑰,從而隱含地共享一個主密鑰。該主密鑰可以導(dǎo)出對分組 密鑰進行加密的密鑰,而分組密鑰才真正用來對IP包加密。一旦長效Diffie-Hel lman密鑰泄露,,則任何在該密鑰保護下的密鑰所保護的相應(yīng)通信都將被破解。 而且SKIP是無狀態(tài)的,它不以安全條例為基礎(chǔ)。每個IP包可能是個別地進行加密 和解密的,歸根到底用的是不同的密鑰。
SKIP不提供BTP和PFS這件事曾經(jīng)引起IPSEC工作組內(nèi)部的批評,該協(xié)議也曾進行過 擴充,試圖提供BTP和PFS。但是,擴充后的SKIP協(xié)議版本其實是在BTP和PFS功能 的提供該協(xié)議的無狀態(tài)性之間的某種折衷。實際上,增加了BTP和PFS功能的SKIP 非常類似于Photuris以及類Photuris的協(xié)議,唯一的主要區(qū)別是SKIP(仍然)需要 原來的Diffie-Hellman證書。這一點必須注意:目前在Internet上,RSA證書比其 他證書更容易實現(xiàn)和開展業(yè)務(wù)。
大多數(shù)IPSP及其相應(yīng)的密鑰管理協(xié)議的實現(xiàn)均基于Unix系統(tǒng)。任何IPSP的實現(xiàn)都 必須跟對應(yīng)協(xié)議棧的源碼糾纏在一起,而這源碼又能在Unix系統(tǒng)上使用,其原因 大概就在于此。但是,如果要想在Internet上更廣泛地使用和采納安全協(xié)議,就 必須有相應(yīng)的DOS或Windows版本。而在這些系統(tǒng)上實現(xiàn)Internet層安全協(xié)議所直 接面臨的一個問題就是,PC上相應(yīng)的實現(xiàn)TCP/IP的公共源碼資源什么也沒有。為 克服這一困難,Wagner和Bellovin實現(xiàn)了一個IPSEC模塊,它象一個設(shè)備驅(qū)動程序 一樣工作,完全處于IP層以下。
Internet層安全性的主要優(yōu)點是它的透明性,也就是說,安全服務(wù)的提供不需要 應(yīng)用程序、其他通信層次和網(wǎng)絡(luò)部件做任何改動。它的最主要的缺點是: Intern et層一般對屬于不同進程和相應(yīng)條例的包不作區(qū)別。對所有去往同一地址的包, 它將按照同樣的加密密鑰和訪問控制策略來處理。這可能導(dǎo)致提供不了所需的功 能,也會導(dǎo)致性能下降。針對面向主機的密鑰分配的這些問題,RFC 1825允許(甚 至可以說是推薦) 使用面向用戶的密鑰分配,其中,不同的連接會得到不同的加 密密鑰。但是,面向用戶的密鑰分配需要對相應(yīng)的操作系統(tǒng)內(nèi)核作比較大的改動。
雖然IPSP的規(guī)范已經(jīng)基本制訂完畢,但密鑰管理的情況千變?nèi)f化,要做的工作還 很多。尚未引起足夠重視的一個重要的問題是在多播 (multicast)環(huán)境下的密鑰 分配問題,例如,在Internet多播骨干網(wǎng)(MBone)或IPv6網(wǎng)中的密鑰分配問題。
簡而言之,Internet層是非常適合提供基于主機對主機的安全服務(wù)的。相應(yīng)的安 全協(xié)議可以用來在Internet上建立安全的IP通道和虛擬私有網(wǎng)。例如,利用它對 IP包的加密和解密功能,可以簡捷地強化防火墻系統(tǒng)的防衛(wèi)能力。事實上,許多廠商已經(jīng)這樣做了。RSA數(shù)據(jù)安全公司已經(jīng)發(fā)起了一個倡議,來推進多家防火墻和 TCP/IP軟件廠商聯(lián)合開發(fā)虛擬私有網(wǎng)。該倡議被稱為S-WAN(安全廣域網(wǎng))倡議。其 目標是制訂和推薦Internet層的安全協(xié)議標準。
二、傳輸層的安全性
在Internet應(yīng)用編程序中,通常使用廣義的進程間通信(IPC)機制來與不同層次的 安全協(xié)議打交道。比較流行的兩個IPC編程界面是BSD Sockets和傳輸層界面(TLI), 在Unix系統(tǒng)V命令里可以找到。
在Internet中提供安全服務(wù)的首先一個想法便是強化它的IPC界面,如BSD Socke ts等,具體做法包括雙端實體的認證,數(shù)據(jù)加密密鑰的交換等。Netscape通信公 司遵循了這個思路,制定了建立在可靠的傳輸服務(wù)(如TCP/IP所提供)基礎(chǔ)上的安 全套接層協(xié)議(SSL)。SSL版本3(SSL v3)于1995年12月制定。它主要包含以下兩個 協(xié)議:
SSL記錄協(xié)議 它涉及應(yīng)用程序提供的信息的分段、壓縮、數(shù)據(jù)認證和加密。SSL v3提供對數(shù)據(jù)認證用的MD5和SHA以及數(shù)據(jù)加密用的R4和DES等的支持,用來對數(shù)據(jù) 進行認證和加密的密鑰可以通過SSL的握手協(xié)議來協(xié)商。
SSL握手協(xié)議 用來交換版本號、加密算法、(相互)身份認證并交換密鑰。SSL v3 提供對Deffie-Hellman密鑰交換算法、基于RSA的密鑰交換機制和另一種實現(xiàn)在 Fortezza chip上的密鑰交換機制的支持。
Netscape通信公司已經(jīng)向公眾推出了SSL的參考實現(xiàn)(稱為SSLref)。另一免費的S SL實現(xiàn)叫做SSLeay。SSLref和SSLeay均可給任何TCP/IP應(yīng)用提供SSL功能。Inter net號碼分配當(dāng)局(IANA)已經(jīng)為具備SSL功能的應(yīng)用分配了固定端口號,例如,帶 SSL的 HTTP(https)被分配的端口號為443,帶SSL的SMTP(ssmtp)被分配的端口號 為465,帶SSL的NNTP(snntp)被分配的端口號為563。
微軟推出了SSL2的改進版本稱為PCT(私人通信技術(shù))。至少從它使用的記錄格式來 看,SSL和PCT是十分相似的。它們的主要差別是它們在版本號字段的最顯著位(T he Most Significant Bit)上的取值有所不同: SSL該位取0,PCT該位取1。這樣 區(qū)分之后,就可以對這兩個協(xié)議都給以支持。
1996年4月,IETF授權(quán)一個傳輸層安全(TLS)工作組著手制定一個傳輸層安全協(xié)議 (TLSP),以便作為標準提案向IESG正式提交。TLSP將會在許多地方酷似SSL。 前面已介紹Internet層安全機制的主要優(yōu)點是它的透明性,即安全服務(wù)的提供不 要求應(yīng)用層做任何改變。這對傳輸層來說是做不到的。原則上,任何TCP/IP應(yīng)用, 只要應(yīng)用傳輸層安全協(xié)議,比如說SSL或PCT,就必定要進行若干修改以增加相應(yīng) 的功能,并使用(稍微)不同的IPC界面。于是,傳輸層安全機制的主要缺點就是要 對傳輸層IPC界面和應(yīng)用程序兩端都進行修改?墒,比起Internet層和應(yīng)用層的 安全機制來,這里的修改還是相當(dāng)小的。另一個缺點是,基于UDP的通信很難在傳 輸層建立起安全機制來。同網(wǎng)絡(luò)層安全機制相比,傳輸層安全機制的主要優(yōu)點是 它提供基于進程對進程的(而不是主機對主機的)安全服務(wù)。這一成就如果再加上 應(yīng)用級的安全服務(wù),就可以再向前跨越一大步了。
三、應(yīng)用層的安全性
必須牢記(且須仔細品味): 網(wǎng)絡(luò)層(傳輸層)的安全協(xié)議允許為主機(進程)之間的 數(shù)據(jù)通道增加安全屬性。本質(zhì)上,這意味著真正的(或許再加上機密的)數(shù)據(jù)通道 還是建立在主機(或進程)之間,但卻不可能區(qū)分在同一通道上傳輸?shù)囊粋具體文 件的安全性要求。比如說,如果一個主機與另一個主機之間建立起一條安全的IP 通道,那么所有在這條通道上傳輸?shù)腎P包就都要自動地被加密。同樣,如果一個 進程和另一個進程之間通過傳輸層安全協(xié)議建立起了一條安全的數(shù)據(jù)通道,那么 兩個進程間傳輸?shù)乃邢⒕投家詣拥乇患用堋?
如果確實想要區(qū)分一個具體文件的不同的安全性要求,那就必須借助于應(yīng)用層的 安全性。提供應(yīng)用層的安全服務(wù)實際上是最靈活的處理單個文件安全性的手段。 例如一個電子郵件系統(tǒng)可能需要對要發(fā)出的信件的個別段落實施數(shù)據(jù)簽名。較低 層的協(xié)議提供的安全功能一般不會知道任何要發(fā)出的信件的段落結(jié)構(gòu),從而不可 能知道該對哪一部分進行簽名。只有應(yīng)用層是唯一能夠提供這種安全服務(wù)的層次。
一般來說,在應(yīng)用層提供安全服務(wù)有幾種可能的做法,第一個想到的做法大概就 是對每個應(yīng)用(及應(yīng)用協(xié)議)分別進行修改。一些重要的TCP/IP應(yīng)用已經(jīng)這樣做了。 在RFC 1421至1424中,IETF規(guī)定了私用強化郵件(PEM)來為基于SMTP的電子郵件系 統(tǒng)提供安全服務(wù)。由于種種理由,Internet業(yè)界采納PEM的步子還是太慢,一個主 要的原因是PEM依賴于一個既存的、完全可操作的PKI(公鑰基礎(chǔ)結(jié)構(gòu))。PEM PKI是 按層次組織的,由下述三個層次構(gòu)成:
頂層為Internet安全政策登記機構(gòu)(IPRA)
次層為安全政策證書頒發(fā)機構(gòu)(PCA)
底層為證書頒發(fā)機構(gòu)(CA)
建立一個符合PEM規(guī)范的PKI也是一個政治性的過程,因為它需要多方在一個共同 點上達成信任。不幸的是,歷史表明,政治性的過程總是需要時間的,作為一個 中間步驟,Phil Zimmermann開發(fā)了一個軟件包,叫做PGP(pretty Good Privacy)。 PGP符合PEM的絕大多數(shù)規(guī)范,但不必要求PKI的存在。相反,它采用了分布式的信 任模型,即由每個用戶自己決定該信任哪些其他用戶。因此,PGP不是去推廣一個 全局的PKI,而是讓用戶自己建立自己的信任之網(wǎng)。這就立刻產(chǎn)生一個問題,就是 分布式的信任模型下,密鑰廢除了怎么辦。
S-HTTP是Web上使用的超文本傳輸協(xié)議(HTTP)的安全增強版本,由企業(yè)集成技術(shù)公 司設(shè)計。S-HTTP提供了文件級的安全機制,因此每個文件都可以被設(shè)成私人/簽字 狀態(tài)。用作加密及簽名的算法可以由參與通信的收發(fā)雙方協(xié)商。S-HTTP提供了對 多種單向散列(Hash)函數(shù)的支持,如: MD2,MD5及SHA; 對多種單鑰體制的支持, 如:DES,三元DES,RC2,RC4,以及CDMF; 對數(shù)字簽名體制的支持,如: RSA和D SS。
目前還沒有Web安全性的公認標準。這樣的標準只能由WWW Consortium,IETF或其 他有關(guān)的標準化組織來制定。而正式的標準化過程是漫長的,可能要拖上好幾年, 直到所有的標準化組織都充分認識到Web安全的重要性。S-HTTP和SSL是從不同角 度提供Web的安全性的。S-HTTP對單個文件作“私人/簽字”之區(qū)分,而SSL則把參 與通信的相應(yīng)進程之間的數(shù)據(jù)通道按“私用”和“已認證”進行監(jiān)管。Terisa公 司的SecureWeb工具軟件包可以用來為任何Web應(yīng)用提供安全功能。該工具軟件包 提供有 RSA數(shù)據(jù)安全公司的加密算法庫,并提供對SSL和S-HTTP的全面支持。
另一個重要的應(yīng)用是電子商務(wù),尤其是信用卡交易。為使Internet上的信用卡交 易安全起見,MasterCard公司(同IBM,Netscape,GTE和Cybercash一道) 制定了 安全電子付費協(xié)議(SEPP),Visa國際公司和微軟(和其他一些公司一道)制定了安 全交易技術(shù)(STT)協(xié)議。同時,MasterCard,Visa國際和微軟已經(jīng)同意聯(lián)手推出I nternet上的安全信用卡交易服務(wù)。他們發(fā)布了相應(yīng)的安全電子交易(SET)協(xié)議, 其中規(guī)定了信用卡持卡人用其信用卡通過Internet進行付費的方法。這套機制的 后臺有一個證書頒發(fā)的基礎(chǔ)結(jié)構(gòu),提供對X.509證書的支持。
上面提到的所有這些加安全功能的應(yīng)用都會面臨一個主要的問題,就是每個這樣 的應(yīng)用都要單獨進行相應(yīng)的修改。因此,如果能有一個統(tǒng)一的修改手段,那就好 多了。通往這個方向的一個步驟就是赫爾辛基大學(xué)的Tatu Yloenen開發(fā)的安全sh ell(SSH)。SSH允許其用戶安全地登錄到遠程主機上,執(zhí)行命令,傳輸文件。它實 現(xiàn)了一個密鑰交換協(xié)議,以及主機及客戶端認證協(xié)議。SSH有當(dāng)今流行的多種Uni x系統(tǒng)平臺上的免費版本,也有由Data Fellows公司包裝上市的商品化版本。
把SSH的思路再往前推進一步,就到了認證和密鑰分配系統(tǒng)。本質(zhì)上,認證和密鑰 分配系統(tǒng)提供的是一個應(yīng)用編程界面(API),它可以用來為任何網(wǎng)絡(luò)應(yīng)用程序提供 安全服務(wù),例如: 認證、數(shù)據(jù)機密性和完整性、訪問控制以及非否認服務(wù)。目前 已經(jīng)有一些實用的認證和密鑰分配系統(tǒng),如: MIT的Kerberos(V4與V5),IBM的Cr yptoKnight和Netwrok Security Program,DEC的SPX,Karlsruhe大學(xué)的指數(shù)安全 系統(tǒng)(TESS)等,都是得到廣泛采用的實例。甚至可以見到對有些認證和密鑰分配 系統(tǒng)的修改和擴充。例如,SESAME和OSF DCE對Kerberos V5作了增加訪問控制服 務(wù)的擴充,Yaksha對Kerberos V5作了增加非否認服務(wù)的擴充。
關(guān)于認證和密鑰分配系統(tǒng)的一個經(jīng)常遇到的問題是關(guān)于它們在Internet上所受到 的冷遇。一個原因是它仍要求對應(yīng)用本身做出改動。考慮到這一點,對一個認證 和密鑰分配系統(tǒng)來說,提供一個標準化的安全API就顯得格外重要。能做到這一點, 開發(fā)人員就不必再為增加很少的安全功能而對整個應(yīng)用程序大動手術(shù)了。因此, 認證系統(tǒng)設(shè)計領(lǐng)域內(nèi)最主要的進展之一就是制定了標準化的安全API,即通用安全 服務(wù)API(GSS-API)。GSS-API(v1及v2)對于一個非安全專家的編程人員來說可能仍 顯得過于技術(shù)化了些,但德州Austin大學(xué)的研究者們開發(fā)的安全網(wǎng)絡(luò)編程(SNP), 把界面做到了比GSS-API更高的層次,使同網(wǎng)絡(luò)安全性有關(guān)的編程更加方便了。
|
|