歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

TCP/IP基礎----為Linux網絡做准備

1、TCP/IP協議棧 四層模型 TCP/IP這個協議遵守一個四層的模型概念:應用層、傳輸層、互聯層和網絡 接口層。 網絡 接口層 模型的基層是網絡 接口層。負責數據幀的發送和接收,幀是獨立的網絡 信息傳輸單元。網絡 接口層將幀放在網上,或從網上把幀取下來。 互
  1、TCP/IP協議棧
  四層模型
  TCP/IP這個協議遵守一個四層的模型概念:應用層、傳輸層、互聯層和網絡接口層。
  
  網絡接口層
  模型的基層是網絡接口層。負責數據幀的發送和接收,幀是獨立的網絡信息傳輸單元。網絡接口層將幀放在網上,或從網上把幀取下來。
  
  互聯層
  互聯協議將數據包封裝成inte.net數據報,並運行必要的路由算法。這裡有四個互聯協議:
  網際協議IP:負責在主機和網絡之間尋址和路由數據包。
  地址解析協議ARP:獲得同一物理網絡中的硬件主機地址。
  網際控制消息協議ICMP:發送消息,並報告有關數據包的傳送錯誤。
  互聯組管理協議IGMP:被IP主機拿來向本地多路廣播路由器報告主機組成員。
  
  傳輸層
  傳輸協議在計算機之間提供通信會話。傳輸協議的選擇根據數據傳輸方式而定。兩個傳輸協議:
  傳輸控制協議TCP:為應用程序提供可靠的通信連接。適合於一次傳輸大批數據的情況。並適用於要求得到響應的應用程序。
  用戶數據報協議UDP:提供了無連接通信,且不對傳送包進行可靠的保證。適合於一次傳輸小量數據,可靠性則由應用層來負責。
  
  應用層
  應用程序通過這一層訪問網絡。
  
  網絡接口技術
  IP使用網絡設備接口規范NDIS向網絡接口層提交幀。IP支持廣域網和本地網接口技術。
  
  串行線路協議
  TCP/IPG一般通過internet串行線路協議SLIP或點對點協議PPP在串行線上進行數據傳送。(是不是我們平時把它稱之為異步通信,對於要拿LINUX提供建立遠程連接的朋友應該多研究一下這方面的知識)?
  
   TCP/IP基礎----為Linux做准備(2)
  ==============================
  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字節。
  操作號--指定當前執行操作的字段。
  發送者的硬件地址--發送者的硬件地址。
  發送者的協議地址--發送者的協議地址。
  目的站硬件地址--目標者的硬件地址。
  目的站協議地址--目標者的協議地址。?
  
  TCP/IP基礎----為Linux做准備(3)
  ==============================
  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將小包組裝成原來的包。
  
  TCP/IP基礎----為Linux做准備(4)
  ==============================
  
  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網絡監視器
  
  TCP/IP基礎----為Linux做准備(5)
  ==============================
  
  IP地址分配
  1、IP地址
  
  IP地址標識著網絡中一個系統的位置。我們知道每個IP地址都是由兩部分組成的:網絡號和主機號。其中網絡號標識一個物理的網絡,同一個網絡上所有主機需要同一個網絡號,該號在互聯網中是唯一的;而主機號確定網絡中的一個工作端、服務器、路由器其它TCP/IP主機。對於同一個網絡號來說,主機號是唯一的。每個TCP/IP主機由一個邏輯IP地址確定。
  
  網絡號和主機號
  IP地址有兩種表示形式:二進制表示(1和0太多了就搞不清)和點分十進制表示。每個IP地址的長度為4字節,由四個8位域組成,我們通常稱之為八位體。八位體由句點.分開,表示為一個0-255之間的十進制數。一個IP地址的4個域分別標明了網絡號和主機號。
  
  2、地址類型
  
  為適應不同大小的網絡,internet定義了5種IP地址類型。
  可以通過IP地址的前八位來確定地址的類型:
  類型IP形式網絡號主機號
  A類w.x.y.zwx.y.z
  B類w.x.y.zw.xy.z
  C類w.x.y.zw.x.yz
  我們來看一下這5類地址:
  A類地址:可以擁有很大數量的主機,最高位為0,緊跟的7位表示網絡號,余24位表示主機號,總共允許有126個網絡。
  B類地址:被分配到中等規模和大規模的網絡中,最高兩位總被置於二進制的10,允許有16384個網絡。
  C類地址:被用於局域網。高三位被置為二進制的110,允許大約200萬個網絡。
  D類地址:被用於多路廣播組用戶,高四位總被置為1110,余下的位用於標明客戶機所屬的組。
  E類地址是一種僅供試驗的地址。
  
  3、地址分配指南
  
  在分配網絡號和主機號時應遵守以下幾條准則:
  (1)網絡號不能為127。大家知道該標識號被保留作回路及診斷功能,還記得平時ping 127.0.0.1?
  (2)不能將網絡號和主機號的各位均置1。如果每一位都是1的話,該地址會被解釋為網內廣播而不是一個主機號。(TCP/IP是一個可廣播的協議嘛)
  (3)相應於上面一條,各位均不能置0,否則該地址被解釋為“就是本網絡”。
  (4)對於本網絡來說,主機號應該是唯一。(否則會出現IP地址已分配或有沖突之類的錯誤)
  
  分配網絡號
  對於每個網絡以及廣域連接,必須有唯一的網絡號,主機號用於區分同一物理網絡中的不同主機。如果網絡由路由器連接,則每個廣域連接都需要唯一的網絡號。
  
  分配主機號
  主機號用於區分同一網絡中不同的主機,並且主機號應該是唯一的。所有的主機包括路由器間的接口,都應該有唯一的網絡號。路由器的主機號,要配置成工作站的缺省網關地址。
  
  有效的主機號
  A類:w.0.0.1--w.255.255.254
  B類:w.x.0.1--w.x.255.254
  C類:w.x.y.1--w.x.y.254
  
  TCP/IP基礎----為Linux做准備(6)
  ==============================
  
  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地址的概念正好相反)
  
  TCP/IP基礎----為Linux做准備(7)
  ==============================
  
  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)在該路由器中,路由表再次為遠程主機或網絡查詢路由,若還未找到路由,該數據包將發送到該路由器的缺省網關地址。
  每發現一條路由,數據包被轉送下一級路由器,稱為一次“跳步”,並最終發送至目的主機。若未發現任何一個路由,源主機將收到一個出錯信息。
  
  TCP/IP基礎----為Linux做准備(8)
  ==============================
  靜態IP和動態IP路由
  路由器采用的路由方式決定它如何獲得路由信息。靜態路由是IP協議的函數實現,它需要創建路由表並進行人工刷新。若路由改變,則靜態方式的路由器並不通知彼此的變化,也不會與動態方式的路由器進行交換。
  
  而動態路由是路由協議的函數實現,相關的協議如:路由信息協議RIP和開放式最短路徑協議OSPF等。這些協議周期性地在采用動態方式的路由器之間進行交換彼此已知的路由信息,包括信息的變化也能自動通知。
  
  2、靜態IP路由
  靜態路由器只能與有已知接口並正常工作的網絡通信。此時可以在每一個網絡上增加一個路由表,或者為另一個路由器的本地接口增加缺省網關地址。
  
  配置靜態IP路由器
  一個主機要與網絡上的其它主機通信,缺省網關地址的配置,就要與路由器在本地接口上的IP地址相匹配。一個不需要手工增加路由的靜態路由配置方法,是把每一個有多接口主機的缺省網關地址,配置成公用網絡上其它多接口主機的本地接口,當然這種方法只在在兩個靜態路由器的情況下才可行。
  
  創建路由表
  我們可以用route命令來增加路由項目。
  比如這條命令:
  # route add default 192.168.1.254
  就在路由表中增加了一條缺省網關的地址。其它的使用方法可以參見man中對route命令的描述。對路由表進行修改後可以用netstat -r命令來查看當前的路由表的內容:
  # netstat -r
  Routing tables
  
  Internet:
  Destination    Gateway      Flags   Refs   Use   Netif Expire
  default      192.168.1.254   UGSc    1   941   ed0 <--剛才手
  工加入的項
  127.0.0.1     127.0.0.1     UH     1   644   lo0
  192.168.1     127.0.0.1     UC     0    0   ed0
  192.168.1.254   0:e0:1e:ce:85:a9  UHLW    2    0   ed0
  
  3、動態IP路由
  路由器使用動態路由協議(RIP或OSPF)在已知網絡間自動交換彼此的路由數據。如果數據變化的話,路由協議會自動更新路由表,同時將更新通知網絡上其它的路由器。
  一個主機與網絡上的其它主機通信時,缺省網關地址必須與本地路由器的接IP地址匹配,也就是說這個主機對外的通信都是通過缺省網關即本地路由器對本地的接口代理的。
  
  RIP
  路由信息傳輸協議RIP幫助網絡交換傳輸信息,所有的RIP信息數據都是用UDP端口520傳輸的。
  使用RIP的路由器會互相交換網絡號和到達這些網絡的路由距離。這個距離用來被路由器選擇到達網絡的最少路由。
  
  混合靜態與動態路由
  我們可能會想到如果使用混合的路由的情況吧。靜態路由器不與動態路由器交換路由信息。如果要使靜態路由器向運行RIP或OSPF的動態路由器傳送信息時,必須在各自的路由表中增加一個靜態路由數據。

Copyright © Linux教程網 All Rights Reserved