[摘 要]我們知道,因特網并不是一個單獨的、封閉的網絡,它是建立在全球眾多網絡上的一個網絡集合。在因特網上存在許多不同類型的計算機,有的是PC,有的是MAC,還有的是運行各種系統的服務器。每個網絡的結構也不相同,有的是總線型網絡,有的是環型網絡,有的是星型網絡。那么是什么把這些計算機連接在一起呢?這就是TCP/IP協議。
[關鍵詞]TCP/IP協議(傳輸控制協議/網間協議)
[中圖分類號]TP [文獻標識碼]A [文章編號]1009-5489(2008)05-0164-02
TCP/IP協議集確立了Internet的技術基礎。TCP/IP的發展始于美國國防部DOD的方案。IAB(Internet架構委員會)
的下屬工作組IETF(Internet工程任務組)研發了其中多數協議。IAB最初由美國政府發起,如今轉變為公開而自治的機構。IAB協同研究和開發TCP/IP協議集的底層結構,并引導著Internet的發展。TCP/IP協議集記錄在請求注解(RFC)文件中,RFC文件均由IETF委員會起草、討論、傳閱及核準。所有這些文件都是公開且免費的,且能在IETF網站上列出的參考文獻中找到。
TCP/IP協議覆蓋了OSI網絡結構七層模型中的六層,并支持從交換(第二層)諸如多協議標記交換,到應用程序諸如郵件服務方面的功能。TCP/IP的核心功能是尋址和路由選擇(網絡層的IP/IPV6)以及傳輸控制(傳輸層的TCP、UDP)。
一、TCP/IP協議棧
TCP/IP協議實現是一個協議族,代表者為IP、TCP和UDP,但其他幾個很重要的協議往往被忽略,ARP,RARP,ICMP,IGMP同樣也是本協議族的重要成員,它們可以解釋很多問題,例如:一開機發現本機IP與網絡上一臺機器重復,原因很簡單,是因為“免費ARP”的存在,即機器啟動后,會以本機IP和MAC為內容,請求本機的MAC地址。這種做法真的很巧妙,一方面機器一開啟便來了個自報家門,讓局域網內的其他機器得知了本機的MAC,同樣,本次請求是不應該收到ARP應答的,因為是自己請求自己的MAC。如果不巧得到一個應答,便得知是本局域網內IP重復了。
TCP/IP的一處重要特性是可以加在非以太網的鏈路層上,如點對點的SLIP和PPP,這兩者是點對點的,故不存在CSMA/CD等技術,實際相對簡單,以特殊字符作為前后兩個包的分隔符即可。
為何TCP與IP要分離?很簡單,路由器是以IP報文為單位進行路由的,它不需要知道TCP的細節,因而它實際上只需要實現IP層即可實現路由。
對于TCP/IP為何會取得成功,以及為何如此流行已經有了個大概的認識。希望在之后的學習中會淘到更多的金。作為程序員,沒有什么比了解事物的本質更讓人開心的了。
二、TCP/IP整體構架概述
TCP/IP協議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協議之上。確切地說,TCP/IP協議是一組包括TCP協議、IP協議、UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。而TCP/IP協議并不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議采用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。首先是應用層,應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。其次是傳輸層,在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據并把它傳輸到下一層中,這一層負責傳送數據,并且確定數據已被送達并接收。再次是互連網絡層,它負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。最后是網絡接口層,主要對實際的網絡媒體的管理,定義如何使用實際網絡(如Ethernet、Serial Line等)來傳送數據。
三、TCP/IP中的協議
1.首先介紹下最基本也是最重要的協議——IP
網際協議IP是TCP/IP的心臟,也是網絡層中最重要的協議。
IP層接收由更低層(網絡接口層例如以太網設備驅動程序)發來的數據包,并把該數據包發送到更高層——TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP并沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最后一個系統傳遞過來的,而不是來自于它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那么,許多依靠IP源地址做確認的服務將產生問題并且會被非法入侵。
2.談到TCP/IP當然少不了TCP
如果IP數據包中有已經封好的TCP數據包,那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最后到接收方。面向連接的服務(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名數據庫),但使用UDP傳送有關單個主機的信息。
3.不容忽視起重要性的UDP 與ICMP
UDP與TCP位于同一層,但對于數據包的順序錯誤或重發。因此,UDP不被應用于那些使用虛電路的面向連接的服務,UDP主要用于那些面向查詢——應答的服務,例如NFS。相對于FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨著更大的危險。
ICMP與IP位于同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的'Redirect'信息通知主機通向其他系統的更準確的路徑,而'Unreachable'信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務。
四、TCP和UDP的關系
TCP和UDP服務通常有一個客戶/服務器的關系,例如,一個Telnet服務進程開始在系統上處于空閑狀態,等待著連接。用戶使用Telnet客戶程序與服務進程建立一個連接。客戶程序向服務進程寫入信息,服務進程讀出信息并發出響應,客戶程序讀出響應并向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。
兩個系統間的多重Telnet連接是如何相互確認并協調一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:
源IP地址 發送包的IP地址。
目的IP地址 接收包的IP地址。
源端口 源系統上的連接的端口。
目的端口 目的系統上的連接的端口。
端口是一個軟件結構,被客戶程序或服務進程用來發送和接收信息。一個端口對應一個16比特的數。服務進程通常使用一個固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號是‘廣為人知’的,因為在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。
[參考文獻]
[1]〔美〕Keith A.Powell:《Microsoft Windows 2000 TCP/IP大全》,中國水利水電出版社2002年1月。
[2]謝宇鵬:《新編TCP/IP參考模型與協議詳解手冊》,電子信息技術出版社2006年4月。
[3]〔美〕史蒂文斯,范建華等譯:《TCP/IP詳解》,機械工業出版社2000年4月。