CP/IP的通訊協(xié)議
這部分簡(jiǎn)要介紹一下TCP/IP的內部結構,為討論與互聯(lián)網(wǎng)有關(guān)的安全問(wèn)題打下基礎。TCP/IP協(xié)議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協(xié)議(例如T1和X.25、以太網(wǎng)以及RS-232串行接口)之上。
確切地說(shuō),TCP/IP協(xié)議是一組包括TCP協(xié)議和IP協(xié)議,UDP(User Datagram Protocol)協(xié)議、ICMP(Internet Control Message Protocol)協(xié)議和其他一些協(xié)議的協(xié)議組。
TCP/IP整體構架概述
TCP/IP協(xié)議并不完全符合OSI的七層參考模型。傳統的開(kāi)放式系統互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網(wǎng)路層、傳輸層、話(huà)路層、表示層和應用層。而TCP/IP通訊協(xié)議采用了4層的層級結構,每一層都呼叫它的下一層所提供的網(wǎng)絡(luò )來(lái)完成自己的需求。這4層分別為:
應用層:應用程序間溝通的層,如簡(jiǎn)單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò )遠程訪(fǎng)問(wèn)協(xié)議(Telnet)等。
傳輸層:在此層中,它提供了節點(diǎn)間的數據傳送服務(wù),如傳輸控制協(xié)議(TCP)、用戶(hù)數據報協(xié)議(UDP)等,TCP和UDP給數據包加入傳輸數據并把它傳輸到下一層中,這一層負責傳送數據,并且確定數據已被送達并接收。
互連網(wǎng)絡(luò )層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。
網(wǎng)絡(luò )接口層:對實(shí)際的網(wǎng)絡(luò )媒體的管理,定義如何使用實(shí)際網(wǎng)絡(luò )(如Ethernet、Serial Line等)來(lái)傳送數據。
TCP/IP中的協(xié)議
以下簡(jiǎn)單介紹TCP/IP中的協(xié)議都具備什么樣的功能,都是如何工作的:
1. IP
網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò )層中最重要的協(xié)議。
IP層接收由更低層(網(wǎng)絡(luò )接口層例如以太網(wǎng)設備驅動(dòng)程序)發(fā)來(lái)的數據包,并把該數據包發(fā)送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來(lái)的數據包傳送到更低層。IP數據包是不可靠的,因為IP并沒(méi)有做任何事情來(lái)確認數據包是按順序發(fā)送的或者沒(méi)有被破壞。IP數據包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務(wù)在接收數據包時(shí),通常假設包中的源地址是有效的。也可以這樣說(shuō),IP地址形成了許多服務(wù)的認證基礎,這些服務(wù)相信數據包是從一個(gè)有效的主機發(fā)送來(lái)的。IP確認包含一個(gè)選項,叫作IP source routing,可以用來(lái)指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務(wù)來(lái)說(shuō),使用了該選項的IP包好象是從路徑上的最后一個(gè)系統傳遞過(guò)來(lái)的,而不是來(lái)自于它的真實(shí)地點(diǎn)。這個(gè)選項是為了測試而存在的,說(shuō)明了它可以被用來(lái)欺騙系統來(lái)進(jìn)行平常是被禁止的連接。那么,許多依靠IP源地址做確認的服務(wù)將產(chǎn)生問(wèn)題并且會(huì )被非法入侵。
2. TCP
如果IP數據包中有已經(jīng)封好的TCP數據包,那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進(jìn)行錯誤檢查,同時(shí)實(shí)現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務(wù)程序和客戶(hù)程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動(dòng)程序和物理介質(zhì),最后到接收方。
面向連接的服務(wù)(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發(fā)送和接收域名數據庫),但使用UDP傳送有關(guān)單個(gè)主機的信息。
3.UDP
UDP與TCP位于同一層,但對于數據包的順序錯誤或重發(fā)。因此,UDP不被應用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢(xún)---應答的服務(wù),例如NFS。相對于FTP或Telnet,這些服務(wù)需要交換的信息量較小。使用UDP的服務(wù)包括NTP(網(wǎng)落時(shí)間協(xié)議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,因為UDP沒(méi)有建立初始化連接(也可以稱(chēng)為握手)(因為在兩個(gè)系統間沒(méi)有虛電路),也就是說(shuō),與UDP相關(guān)的服務(wù)面臨著(zhù)更大的危險。
4.ICMP
ICMP與IP位于同一層,它被用來(lái)傳送IP的的控制信息。它主要是用來(lái)提供有關(guān)通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其他系統的更準確的路徑,而‘Unreachable’信息則指出路徑有問(wèn)題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務(wù)。
5. TCP和UDP的端口結構
TCP和UDP服務(wù)通常有一個(gè)客戶(hù)/服務(wù)器的關(guān)系,例如,一個(gè)Telnet服務(wù)進(jìn)程開(kāi)始在系統上處于空閑狀態(tài),等待著(zhù)連接。用戶(hù)使用Telnet客戶(hù)程序與服務(wù)進(jìn)程建立一個(gè)連接?蛻(hù)程序向服務(wù)進(jìn)程寫(xiě)入信息,服務(wù)進(jìn)程讀出信息并發(fā)出響應,客戶(hù)程序讀出響應并向用戶(hù)報告。因而,這個(gè)連接是雙工的,可以用來(lái)進(jìn)行讀寫(xiě)。
兩個(gè)系統間的多重Telnet連接是如何相互確認并協(xié)調一致呢?TCP或UDP連接唯一地使用每個(gè)信息中的如下四項進(jìn)行確認:
源IP地址---發(fā)送包的IP地址。
目的IP地址---接收包的IP地址。
源端口---源系統上的連接的端口。
目的端口---目的系統上的連接的端口。
端口是一個(gè)軟件結構,被客戶(hù)程序或服務(wù)進(jìn)程用來(lái)發(fā)送和接收信息。一個(gè)端口對應一個(gè)16比特的數。服務(wù)進(jìn)程通常使用一個(gè)固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號是‘廣為人知’的,因為在建立與特定的主機或服務(wù)的連接時(shí),需要這些地址和目的地址進(jìn)行通訊。