查看完整版本: [轉]TCP-IP基礎

danny 2007-9-23 21:54

[轉]TCP-IP基礎

TCP/IP協議體系結構簡介

1、TCP/IP協議棧

四層模型
TCP/IP這個協議遵守一個四層的模型概念﹕應用層、傳輸層、互聯層和網絡、接口層。

網絡接口層
模型的基層是網絡接口層。

負責數據幀的發送和接收,幀是獨立的網絡信息傳輸單元 。
網絡接口層將幀放在網上,或從網上把幀取下來。

互聯層
互聯協議將數據包封裝成internet數據報,並運行必要的路由算法。
這裡有四個互聯協議﹕
網際協議IP﹕負責在主機和網絡之間尋址和路由數據包。
地址解析協議ARP﹕獲得同一物理網絡中的硬件主機地址。
網際控製消息協議ICMP﹕發送消息,並報告有關數據包的傳送錯誤。
互聯組管理協議IGMP﹕被IP主機拿來向本地多路廣播路由器報告主機組成員。

傳輸層
傳輸協議在計算機之間提供通信會話 。
傳輸協議的選擇根據數據傳輸方式而定。
兩個傳輸協議﹕
傳輸控製協議TCP﹕為應用程序提供可靠的通信連接。 適合於一次傳輸大批數據的情況。並適用於要求得到響應的應用程序。
用戶數據報協議UDP﹕提供了無連接通信,且不對傳送包進行可靠的保證。適合於一次傳輸小量數據,可靠性則由應用層來負責。

應用層
應用程序通過這一層訪問網絡。

網絡接口技術
IP使用網絡設備接口規範NDIS向網絡接口層提交幀。IP支持廣域網和本地網接口技術。

串行線路協議
TCP/IPG一般通過internet串行線路協議SLIP或點對點協議PPP在串行線上進行數據傳送。(是不是我們平時把它稱之為異步通信,對於要拿LINUX提供建立遠程連接的朋友應該多研究一下這方面的知識)?
2、ARP

  要在網絡上通信,主機就必須知道對方主機的硬件地址(我們不是老遇到網卡 的物理地址嘛)。地址解析就是將主機IP地址映射為硬件地址的過程。地址解 析協議ARP用於獲得在同一物理網絡中的主機的硬件地址。

解釋本地IP地址(要了解地址解析工作過程的朋友看好了)

主機IP地址解析為硬件地址﹕
(1)當一台主機要與別的主機通信時,初始化ARP請求。當該IP斷定IP地址是 本地時,源主機在ARP緩存中查找目標主機的硬件地址。
(2)要是找不到映射的話,ARP建立一個請求,源主機IP地址和硬件地址會被 包括在請求中,該請求通過廣播,使所有本地主機均能接收並處理。
(3)本地網上的每個主機都收到廣播並尋找相符的IP地址。
(4)當目標主機斷定請求中的IP地址與自己的相符時,直接發送一個ARP答複, 將自己的硬件地址傳給源主機。以源主機的IP地址和硬件地址更新它的ARP 緩存。源主機收到回答後便建立起了通信。

解析遠程IP地址

不同網絡中的主機互相通信,ARP廣播的是源主機的缺省網關。
目標IP地址是一個遠程網絡主機的話,ARP將廣播一個路由器的地址。

(1)通信請求初始化時,得知目標IP地址為遠程地址。源主機在本地路由表中 查找,若無,源主機認為是缺省網關的IP地址。在ARP緩存中查找符合該網關 記錄的IP地址(硬件地址)。
(2)若沒找到該網關的記錄,ARP將廣播請求網關地址而不是目標主機的地址。 路由器用自己的硬件地址響應源主機的ARP請求。源主機則將數據包送到路由 器以傳送到目標主機的網絡,最終達到目標主機。
(3)在路由器上,由IP決定目標IP地址是本地還是遠程。如果是本地,路由器 用ARP(緩存或廣播)獲得硬件地址。如果是遠程,路由器在其路由表中查找該 網關,然後運用ARP獲得此網關的硬件地址。數據包被直接發送到下一個目標 主機。
(4)目標主機收到請求後,形成ICMP響應。因源主機在遠程網上,將在本地路 由表中查找源主機網的網關。找到網關後,ARP即獲取它的硬件地址。
(5)如果此網關的硬件地址不在ARP緩存中,通過ARP廣播獲得。一旦它獲得 硬件地址,ICMP響應就送到路由器上,然後傳到源主機。

ARP緩存
  為減少廣播量,ARP在緩存中保存地址映射以備用。ARP緩存保存有動態項 和靜態項。動態項是自動添加和刪除的,靜態項則保留在CACHE中直到計算機重新啟動。
ARP緩存總是為本地子網保留硬件廣播地址(0xffffffffffffh)作為一個永久項。 此項使主機能夠接受ARP廣播。當查看緩存時,該項不會顯示。 每條ARP緩存記錄的生命周期為10分鐘,2分鐘內未用則刪除。緩存容量滿時, 刪除最老的記錄。
  加入靜態(永久)記錄
  通過添加靜態ARP項可減少ARP請求訪問主機的次數。

ARP包的結構
ARP結構的字段如下﹕
硬件類型--使用的硬件(網絡訪問層)類型。
協議類型--解析過程中的協議使用以太類型的值。
硬件地址長度--硬件地址的字節長度,對於以太網和令牌環來說,其長度為6字節。
協議地址長度--協議地址字節的長度,IP的長度是4字節。
操作號--指定當前執行操作的字段。
發送者的硬件地址--發送者的硬件地址。
發送者的協議地址--發送者的協議地址。
目的站硬件地址--目標者的硬件地址。
目的站協議地址--目標者的協議地址。
3、ICMP和IGMP

  internet控製消息協議ICMP是用於報告錯誤並代表IP對消息進行控製。 IP運用互聯組管理協議IGMP來告訴路由器,某一網絡上指導組中的可用主機。

ICMP

  ICMP源抑製消息﹕當TCP/IP主機發送數據到另一主機時,如果速度達到路由器或者鏈路 的飽和狀態,路由器發出一個ICMP源抑製消息。

ICMP數據包結構

類型﹕一個8位類型字段,表示ICMP數據包類型。

代碼﹕一個8位代碼域,表示指定類型中的一個功能。如果一個類型中只有一種功能,代碼域置為0。

檢驗和﹕數據包中ICMP部分上的一個16位檢驗和。 指定類型的數據隨每個ICMP類型變化的一個附加數據。

IGMP

  IGMP信息傳給別的路由器以使每個支持多路廣播的路由器獲知哪個主機組和哪個網絡 中。

IGMP包結構

版本﹕IGMP的版本,值一般為0x1h。

類型﹕IGMP消息的類型。

0x1h類型稱為主機成員請求,在多路廣播路由器上用於指定多級組中的任何成員輪詢一個網絡。

0x2h類型稱為主機成員報告,在主機上用於發布指定組 中的成員情況或對一個路由器的主機成員請求進行回答。 未用﹕未用的域名被發送者置零且被接收者忽略。

檢驗和﹕IGMP頭的一個16位檢驗和。

組地址﹕主機用該組地址在一個主機成員請求中存儲IP多路廣播地址。在主機成員請求中, 組地址被全置零,而且硬件級的多路廣播地址被用來標示主機組。

4、IP

   IP是一個無連接的協議,主要就是負責在主機間尋址並為數據包設定路由,在交換數據前它並不建立會話。因為它不保證正確傳遞,另一方面,數據在被收到時,IP不需要收到確認,所以它是不可靠的。

有一些字段,在當數據從傳輸層傳下來時,會被附加在數據包中,我們來看一下這些字段﹕

源IP地址﹕用IP地址確定數據報發送者。

目標IP地址﹕用IP地址確定數據報目標。

協議﹕告知目的機的IP是否將包傳給TCP或UDP。

檢查和﹕一個簡單的數學計算,用來證實收到的包的完整性。

TTL生存有效時間﹕指定一個數據報被丟棄之前,在網絡上能停留多少時間(以秒計)。它避免了包在網絡中無休止循環。路由器會根據數據在路由器中駐留的時間來遞減TTL。其中數據報通過一次路由器,TTL至少減少一秒。

  根據我們前面提到關於ARP的知識,如果IP地址目標為本地地址時,IP將數據包直接傳 給那個主機;如果目標地址為遠程地址的話,IP在本地的路由表中查找遠程主機的路由(看來好象我們平時撥114一樣)。如果找到一個路由,IP用它傳送數據包。如果沒找到呢,就 會將數據包發送到源主機的缺省網關,也稱之為路由器。(很多時候一直在搞網關和路由器 的定義,其實我覺得在學的時候不一定死摳概念,現在硬件和軟件結合的產品越來越多了, 一時很分清的,只要我們運用的時候可以解決實際問題嘛。)

  這樣當路由器收到一個包後,該包向上傳給IP﹕

(1)如果交通阻塞(聽起來蠻可怕的),包在路由器中停滯,TTL至少減1或更多。要是它降到0的話,包就會被拋棄。

(2)如果對於下一網絡來說包太大的話,IP會將它分割成若干個小包。

(3)如果包被分解,IP為每個新包製造一個新頭,其中包括﹕一個標誌,用來顯示其它小包在其後;一個小包ID,用來確定所有小包是一起的;一個小包偏移,用來告訴接收主機怎麼重新組合它們。

(4)IP計算一個新的檢驗和。

(5)IP獲取一個路由的目標硬件地址。

(6)IP轉發包。 在下一主機,包被發送到TCP或UDP。每個路由器都要重複該過程。直到包到達最終目的地。當包到達最終目的地後,IP將小包組裝成原來的包。
5、TCP

TCP是一種可靠的面向連接的傳送服務。它在傳送數據時是分段進行的,主機交換數據必須建立一個會話。它用比特流通信,即數據被作為無結構的字節流。 通過每個TCP傳輸的字段指定順序號,以獲得可靠性。如果一個分段被分解成幾個小段, 接收主機會知道是否所有小段都已收到。通過發送應答,用以確認別的主機收到了數據。 對於發送的每一個小段,接收主機必須在一個指定的時間返回一個確認。如果發送者未收 到確認,數據會被重新發送;如果收到的數據包損壞,接收主機會舍棄它,因為確認未被發送,發送者會重新發送分段。

端口
SOCKETS實用程序使用一個協議端口號來標明自己應用的唯一性。端口可以使用0到65536 之間的任何數字。在服務請求時,操作系統動態地為客戶端的應用程序分配端口號。

套接字
套接字在要領上與文件句柄類似,因為其功能是作為網絡通信的終結點。一個應用程序通 過定義三部分來產生一個套接字﹕主機IP地址、服務類型(面向連接的服務是TCP,無連 接服務是UDP)、應用程序所用的端口。

TCP端口
TCP端口為信息的傳送提供定地點,端口號小於256的定義為常用端口。

TCP的三次握手
TCP對話通過三次握手來初始化。三次握手的目的是使數據段的發送和接收同步;告訴其它主機其一次可接收的數據量,並建立虛連接。

我們來看看這三次握手的簡單過程﹕
(1)初始化主機通過一個同步標誌置位的數據段發出會話請求。
(2)接收主機通過發回具有以下項目的數據段表示回複﹕同步標誌置位、即將發送的數據段的起始字節的順序號、應答並帶有將收到的下一個數據段的字節順序號。
(3)請求主機再回送一個數據段,並帶有確認順序號和確認號。

TCP滑動窗口

TCP滑動窗口用來暫存兩台主機間要傳送的數據,有點類似CACHE。 每個TCP/IP主機有兩個滑動窗口﹕一個用於接收數據,另一個用於發送數據。

6、UDP

用戶數據報協議UDP提供了無連接的數據報服務。它適用於無須應答並且通常一次只傳送少量數據的應用軟件。

UDP端口

端口作為多路複用的消息隊列使用。
15 NETSTAT 網絡狀態
53 DOMAIN 域名服務器
69 TFTP 平凡文件傳送協議
137 NETBIOS-NS NETBIOS命令服務
138 NETBIOS-DGM NETBIOS數據報服務
161 SNMP SNMP網絡監視器。
4、子網屏蔽和IP地址

  TCP/IP上的每台主機都需要用一個子網屏蔽號。它是一個4字節的地址,用來封裝或“屏 蔽”IP地址的一部分,以區分網絡號和主機號。當網絡還沒有劃分為子網時,可以使用缺 省的子網屏蔽;當網絡被劃分為若干個子網時,就要使用自定義的子網屏蔽了。

缺省值

  我們來看看缺省的子網屏蔽值,它用於一個還沒有劃分子網的網絡。即使是在一個單段網絡上,每台主機也都需要這樣的缺省值。 它的形式依賴於網絡的地址類型。在它的4個字節裡,所有對應網絡號的位都被置為1, 於是每個八位體的十進製值都是255;所有對就主機號的位都置為0。例如﹕C類網地址 192.168.0.1和相應的缺省屏蔽值255.255.255.0。

確定數據包的目的地址

  我們說把屏蔽值和IP地址值做“與”的操作其實是一個內部過程,它用來確定一個數據包 是傳給本地還是遠程網絡上的主機。其相應的操作過程是這樣的﹕當TCP/IP初始化時,主 機的IP地址和子網屏蔽值相“與”。在數據包被發送之前,再把目的地址也和屏蔽值作“與”, 這樣如果發現源IP地址和目的IP地址相匹配,IP協議就知道數據包屬於本地網上的某台 主機;否則數據包將被送到路由器上。

注﹕我們知道“與”操作是將IP地址中的每一位與子網屏蔽中相應的位按邏輯與作比較。

建立子網

1、 子網簡介

  一個網絡實際上可能會有多個物理網段,我們把這些網段稱之為子網,其使用的IP地址是由某個網絡號派生而得到的。

  將一個網絡劃分成若干個子網,需要使用不同的網絡號或子網號。當然了,劃分子網有它的優點,通過劃分子網,每個單位可以將複雜的物理網段連接成一個網絡,並且可以﹕

(1) 混合使用多種技術,比如以太網和令牌環網。(最流行的兩種接口都支持了哦)

(2) 克服當前技術的限製,比如突破每段主機的最大數量限製。

(3) 通過重定向傳輸以及減少廣播等傳輸方式以減輕網絡的擁擠。

實現子網劃分

  在動手劃分子網之前,我們一定要先分析一下自己的需求以及將來的規劃。一般情況下我們遵循這樣的準則﹕

(1) 確定網絡中的物理段數量。(就是子網個數嘛)

(2)確定每個子網需要的主機數。注意一個主機至少一個IP地址。

(3) 基於此需求,定義﹕整個網絡的子網屏蔽、每個子網唯一的子網號和每個子網的主機號範圍。 子網屏蔽位 在定義一個子網屏蔽之前,確定一下將來需要的子網數量及每子網的主機數是必不可少的一步。因為當更多的位用於子網屏蔽時,就有更多的可用子網了,但每個子網中的主機數將減少。(這和定義IP地址的概念正好相反)
2、定義子網屏蔽

  將網絡劃分成若干個子網時,必須要定義好子網屏蔽。我們來看看定義的步驟﹕

(1)確定物理網段也就是子網的個數,並將這個數字轉換成二進製數。比如B類地址,分6 個子網就是110。

(2)計算物理網段數(子網數)的二進製位數,這裡是110,所以需要3位。

(3)以高位順序(從左到右)將這個反碼轉換成相應的十進製值,因為需要3位,就將主機號前3位作為子網號,這裡是11100000,所以屏蔽就是255.255.254.0。

3、定義子網號

  子網號與子網屏蔽的位數相同。

(1)列出子網號按高到低的順序使用的位數。例如子網屏蔽使用了3位,二進製值是 11100000。

(2)將最低的一位1轉換成十進製,用這個值來定義子網的增量。這個例子中是1110,所 以增量是32。

(3)用這個增量迭加從0開始的子網號,直到下一個值為256。這個例子中就是w.x.32.1- w.x.63.254、w.x.64.1-w.x.127.254等。

4、定義子網中的主機號

  從上面的例子看出,一旦定義了子網號,就已經確定了每個子網的主機號了。我們在做每 次增量後得出的值表明了子網中主機號範圍的起始值。

確定每個子網中的主機數目

(1)計算主機號可用的位數。例如在B類網中用3位定義了網絡號,那麼余下的13位定義 了主機號。

(2)將這個余下的位數也就是主機號轉換為十進製,再減去1。例如13位值1111111111111 轉換為十進製的話就是8191,所以這個網絡中每個子網的主機數就是8190了。

實現IP路由

1、IP路由簡介

  路由就是選擇一條數據包傳輸路徑的過程。當TCP/IP主機發送IP數據包時,便出現了路由,且當到達IP路由器還會再次出現。路由器是從一個物理網向另一個物理網發送數據包的裝置,路由器通常被稱為網關。對於發送的主機和路由器而言,必須決定向哪裡轉發數據包。在決定路由時,IP層查詢位於內存中的路由表。

(1)當一個主機試圖與另一個主機通信時,IP首先決定目的主機是一個本地網還是遠程網。

(2)如果目的主機是遠程網,IP將查詢路由表來為遠程主機或遠程網選擇一個路由。

(3)若未找到明確的路由,IP用缺省的網關地址將一個數據傳送給另一個路由器。

(4)在該路由器中,路由表再次為遠程主機或網絡查詢路由,若還未找到路由,該數據包將發送到該路由器的缺省網關地址。 每發現一條路由,數據包被轉送下一級路由器,稱為一次“跳步”,並最終發送至目的主機。 若未發現任何一個路由,源主機將收到一個出錯信息。
頁: [1]
查看完整版本: [轉]TCP-IP基礎