TCP/IP協定是一組包括TCP協定和IP協定,UDP(UserDatagramProtocol)協定、ICMP(InternetControlMessageProtocol)協定和其他一些協定的協定組。
整體構架概述
TCP/IP協定並不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協定的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬體在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和套用層。而TCP/IP通訊協定採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。這4層分別為:
套用層:應用程式間溝通的層,如簡單電子郵件傳輸(SMTP)、檔案傳輸協定(FTP)、網路遠程訪問協定(Telnet)等。
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協定(TCP)、用戶數據報協定(UDP)等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,並且確定數據已被送達並接收。
互連網路層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協定(IP)。
網路接口層:對實際的網路媒體的管理,定義如何使用實際網路(如Ethernet、SerialLine等)來傳送數據。
IP
網際協定IP是TCP/IP的心臟,也是網路層中最重要的協定。
IP層接收由更低層(網路接口層例如乙太網設備驅動程式)發來的數據包,並把該數據包傳送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP並沒有做任何事情來確認數據包是按順序傳送的或者沒有被破壞。IP數據包中含有傳送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP位址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機傳送來的。IP確認包含一個選項,叫作IPsourcerouting,可以用來指定一條源地址和目的地址之間的直接路徑。對於一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最後一個系統傳遞過來的,而不是來自於它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連線。那么,許多依靠IP源地址做確認的服務將產生問題並且會被非法入侵。
TCP
如果IP數據包中有已經封好的TCP數據包,那么IP將把它們向'上'傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連線。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程式,例如Telnet的服務程式和客戶程式。應用程式輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程式和物理介質,最後到接收方。
面向連線的服務(例如Telnet、FTP、rlogin、XWindows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(傳送和接收域名資料庫),但使用UDP傳送有關單個主機的信息。
UDP
UDP與TCP位於同一層,但對於數據包的順序錯誤或重發。因此,UDP不被套用於那些使用虛電路的面向連線的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協定)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連線(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨著更大的危險。
ICMP
ICMP與IP位於同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其他系統的更準確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連線‘體面地’終止。PING是最常用的基於ICMP的服務。
TCP和UDP的連線埠結構
TCP和UDP服務通常有一個客戶/伺服器的關係,例如,一個Telnet服務進程開始在系統上處於空閒狀態,等待著連線。用戶使用Telnet客戶程式與服務進程建立一個連線。客戶程式向服務進程寫入信息,服務進程讀出信息並發出回響,客戶程式讀出回響並向用戶報告。因而,這個連線是雙工的,可以用來進行讀寫。
兩個系統間的多重Telnet連線是如何相互確認並協調一致呢?TCP或UDP連線唯一地使用每個信息中的如下四項進行確認:
連線埠是一個軟體結構,被客戶程式或服務進程用來傳送和接收信息。一個連線埠對應一個16比特的數。服務進程通常使用一個固定的連線埠,例如,SMTP使用25、Xwindows使用6000。這些連線埠號是‘廣為人知’的,因為在建立與特定的主機或服務的連線時,需要這些地址和目的地址進行通訊。