1 基於4層的TCP/IP協議棧基本描述數據庫
基於4層的TCP/IP協議棧最具說服力的是:這一觀點是由TCP/IP原始標準的創立者——美國國防部提出的,它與ISO/OSI參考模型的對應關係以下圖:服務器
圖1 TCP/IP協議棧層次結構與ISO/OSI參考模型的對應關係網絡
如圖1所示,TCP/IP協議棧從低層開始,依次爲網絡存取層、網絡互連層、傳輸層和應用層併發
TCP/IP協議的基本傳輸單位是數據包(datagram),TCP協議負責把數據分紅若干個數據包,並給每一個數據包加上包頭
(就像給一封信加上信封),包頭上有相應的編號,以保證在數據接收端能將數據還原爲原來的格式,IP協議在每一個包頭
上再加上接收端主機地址,這樣數據找到本身要去的地方,若是傳輸過程當中出現數據丟失、數據失真等狀況,
TCP協議會自動要求數據從新傳輸,並從新組包。總之,IP協議保證數據的傳輸,TCP協議保證數據傳輸的質量。
TCP/IP協議數據的傳輸基於TCP/IP協議的四層結構:應用層、傳輸層、網絡層、接口層,數據在傳輸時每經過一層就要在數據上加個包頭,
其中的數據供接收端同一層協議使用,而在接收端,每通過一層要把用過的包頭去掉,這樣來保證傳輸數據的格式徹底一致。
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,而且肯定數據已被送達並接收。
互連網絡層:負責提供基本的數據封包傳送功能,讓每一塊數據包都可以到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。
網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如Ethernet、Serial Line等)來傳送數據。
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層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的鏈接。TCP數據包中包括序號和確認,因此未按照順序收到的包能夠被排序,而損壞的包能夠被重傳。 TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。 面向鏈接的服務(例如Telnet、FTP、rlogin、X Windows和SMTP)須要高度的可靠性,因此它們使用了TCP。DNS在某些狀況下使用TCP(發送和接收域名數據庫),但使用UDP傳送有關單個主機的信息。 3.UDP UDP與TCP位於同一層,但對於數據包的順序錯誤或重發。所以,UDP不被應用於那些使用虛電路的面向鏈接的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTP或Telnet,這些服務須要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。 欺騙UDP包比欺騙TCP包更容易,由於UDP沒有創建初始化鏈接(也能夠稱爲握手)(由於在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨着更大的危險。 4.ICMP ICMP與IP位於同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其餘系統的更準確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,若是路徑不可用了,ICMP可使TCP鏈接‘體面地’終止。PING是最經常使用的基於ICMP的服務。 5. TCP和UDP的端口結構 TCP和UDP服務一般有一個客戶/服務器的關係,例如,一個Telnet服務進程開始在系統上處於空閒狀態,等待着鏈接。用戶使用Telnet客戶程序與服務進程創建一個鏈接。客戶程序向服務進程寫入信息,服務進程讀出信息併發出響應,客戶程序讀出響應並向用戶報告。於是,這個鏈接是雙工的,能夠用來進行讀寫。