一:鍊路層有時也叫資料鍊路層或網絡接口層。通常包括作業系統中的裝置驅動程式和計算機中對應的網絡接口卡。它們一起處理與電纜(或其他傳輸媒介)的實體接口細節。 鍊路層主要有三個目的: (1)為I P子產品發送和接收I P資料報; (2)為A R P子產品發送A R P請求和接收A R P應答; (3)為R A R P發送R A R P請求和接收R A R P應答。 T C P / I P支援多種不同的鍊路層協定,這取決于網絡所使用的硬體,如以太網、令牌環網、F D D I(光纖分布式資料接口)及R S-2 3 2串行線路等。 下面主要講解: 兩個串行接口鍊路層協定( S L I P和P P P) ,以及大多數實作都包含的環回( l o o p b a c k)驅動程式。 二:以太網和IEEE802封裝 三:SLIP串行線路IP S L I P的全稱是Serial Line IP。它是一種在串行線路上對I P資料報進行封裝的簡單形式,在RFC 1055[Romkey 1988]中有較長的描述。S L I P适用于家庭中每台計算機幾乎都有的 R S - 2 3 2串行端口和高速數據機接入I n t e r n e t。 下面的規則描述了S L I P協定定義的幀格式: 1) IP資料報以一個稱作E N D(0 x c 0)的特殊字元結束。同時,為了防止資料報到來之前的線路噪聲被當成資料報内容,大多數實作在資料報的開始處也傳一個 E N D字元(如果有線路噪聲,那麼E N D字元将結束這份錯誤的封包。這樣目前的封包得以正确地傳輸,而前一個錯誤封包交給上層後,會發現其内容毫無意義而被丢棄)。 2) 如果I P封包中某個字元為 E N D,那麼就要連續傳輸兩個位元組 0 x d b和0 x d c來取代它。0 x d b這個特殊字元被稱作S L I P的E S C字元,但是它的值與A S C I I碼的E S C字元(0 x 1 b)不同。 3) 如果I P封包中某個字元為S L I P的E S C字元,那麼就要連續傳輸兩個位元組 0 x d b和0 x d d來取代它。 SLIP的缺點: 1每一段必須知道堆放的IP位址。沒有辦法把本端的IP位址通知給另一端 2資料幀中沒有類型字段 3SLIP沒有在資料幀中加上校驗和(類似于以太網中的CRC字段) 盡管存在這些缺點,SLIP仍然是一種廣泛使用的協定。 四:壓縮的SLIP 由于串行線路的速率通常較低( 19200 b/s或更低) ,而且通信經常是互動式的(如 Te l n e t和R l o g i n,二者都使用T C P) ,是以在S L I P線路上有許多小的T C P分組進行交換。為了傳送1個位元組的資料需要2 0個位元組的I P首部和2 0個位元組的T C P首部,總數超過4 0個位元組(1 9 . 2節描述了R l o g i n會話過程中,當敲入一個簡單指令時這些小封包傳輸的詳細情況) 。 既然承認這些性能上的缺陷,于是人們提出一個被稱作 C S L I P(即壓縮S L I P)的新協定,它在RFC 1144[Jacobson 1990a]中被較長的描述。C S L I P一般能把上面的4 0個位元組壓縮到3或5個位元組。它能在C S L I P的每一端維持多達1 6個T C P連接配接,并且知道其中每個連接配接的首部中的某些字段一般不會發生變化。對于那些發生變化的字段,大多數隻是一些小的數字和的改變。這些被壓縮的首部大大地縮短了互動響應時間。 現在大多數的S L I P産品都支援C S L I P。作者所在的子網(參見封面内頁)中有兩條 SLIP鍊路,它們均是CSLIP鍊路。 五:PPP點對點協定 總的來說,P P P比S L I P具有下面這些優點: (1) PPP支援在單根串行線路上運作多種協定,不隻是I P協定; (2) 每一幀都有循環備援檢驗; (3) 通信雙方可以進行I P位址的動态協商(使用I P網絡控制協定); (4) 與C S L I P類似,對T C P和I P封包首部進行壓縮; (5) 鍊路控制協定可以對多個資料鍊路選項進行設定。為這些優點付出的代價是在每一幀的首部增加 3個位元組,當建立鍊路時要發送幾幀協商資料,以及更為複雜的實作。 盡管P P P比S L I P有更多的優點,但是現在的S L I P使用者仍然比P P P使用者多。随着産品 越來越多,産家也開始逐漸支援PPP,是以最終PPP應該取代SLIP。 六:環路接口 平時我們用127.0.0.1來嘗試自己的機器伺服器好使不好使。走的就是這個loopback接口。對于環回接口,有如下三點值得注意: 1傳給環回位址(一般是127.0.0.1)的任何資料均作為I P輸入。 2傳給廣播位址或多點傳播位址的資料報複制一份傳給環回接口,然後送到以太網上。這是 因為廣播傳送和多點傳播傳送的定義包含主機本身。 3任何傳給該主機IP位址的資料均送到環回接口。 七:最大傳輸單元MTU 如果I P層有一個資料報要傳,而且資料的長度比鍊路層的 M T U還大,那麼I P層就需要進行分片(f r a g m e n t a t i o n) ,把資料報分成若幹片,這樣每一片都小于 M T U 在Windows下的系統資料庫可以找到相關的MTU大小。 MTU對SLIP和CSLIP鍊路的傳輸延的計算,這裡就不講了。 PPP(Point to Point Protocol)點對點協定 它是用于串行接口的兩台計算機的通信協定,是為通過電話線連接配接計算機和伺服器而彼此通信而制定的協定。網絡服務提供商可以提供您點對點連接配接,這樣提供商的伺服器就可以響應您的請求,将您的請求接收并發送到網絡上,然後将網絡上的響應送回。PPP是使用IP協定,有時它被認為是TCP/IP協定族的一員。PPP協定可用于不同媒體上包括雙絞線,光纖和衛星傳輸的全雙工協定,它使用HDLC進行包的裝入。PPP協定既可以處理同步通信也可以處理異步通信,可以允許多個使用者共享一個線路,又可發進行SLIP協定所沒有的差錯控制。 TCP/IP(Transmission Control Protocol/Internet Protocol)傳輸控制協定/Internet協定 TCP/IP協定起源于美國國防進階研究計劃局。提供可靠資料傳輸的協定稱為傳輸控制協定TCP,好比貨物裝箱單,保證資料在傳輸過程中不會丢失;提供無連接配接資料報服務的協定稱為網絡協定IP,好比收發貨人的位址和姓名,保證資料到達指定的地點。TCP/IP協定是網際網路上廣泛使用的一種協定,使用TCP/IP協定的網際網路等網絡提供的主要服務有:電子郵件、檔案傳送、遠端登入、網絡檔案系統、電視會議系統和網際網路。它是Interent的基礎,它提供了在廣域網内的路由功能,而且使Internet上的不同主機可以互聯。從概念上,它可以映射到四層:網絡接口層,這一層負責線上路上傳輸幀并從線路上接收幀;Internet層,這一層中包括了IP協定,IP協定生成Internet資料報,進行必要的路由算法,IP協定實際上可以分為四部分:ARP,ICMP,IGMP和IP;再上向就是傳輸層,這一層負責管理計算機間的會話,這一層包括兩個協定TCP和UDP,由應用程式的要求不同可以使用不同的協定進行通信;最後一層是應用層,就是我們熟悉的FTP,DNS,TELNET等。熟悉TCP/IP是熟悉Internet的必由之路。 UDP(User Datagram Protocol)使用者資料報協定 它是定義用來在互連網絡環境中提供包交換的計算機通信的協定,此協定預設認為網路協定(IP)是其下層協定。UDP是TCP的另外一種方法,象TCP一樣,UDP使用IP協定來獲得資料單元(叫做資料報),不象TCP的是,它不提供包(資料報)的分組群組裝服務。而且,它還不提供對包的排序,這意味着,程式程式必須自己确定資訊是否完全地正确地到達目的地。如果網絡程式要加快處理速度,那使用UPD就比TCP要好。UDP提供兩種不由IP層提供的服務,它提供端口号來差別不同使用者的請求,而且可以提供奇偶校驗。在OSI模式中,UDP和TCP一樣處于第四層,傳輸層。 可以說PPP是一種連接配接方式,TCP、UDP是傳送資料的方式 TCP/IP成功的原因之一是它幾乎能在任何資料鍊路計數上運作。 *********************************************************************************************************************************************************************************************************************************** [置頂] TCP/IP詳解(3)IP:網際協定,第三章筆記整理一.引言: IP是TCP/IP協定族中最為核心的協定,所有的TCP,UDP,ICMP和IGMP資料都以IP資料報格式傳輸。要注意的是,IP不是可靠的協定,這是說,IP協定沒有提供一種資料未傳達以後的處理機制--這被認為是上層協定--TCP或UDP要做的事情。是以這也就出現了TCP是一個可靠的協定,而UDP就沒有那麼可靠的差別。 二.IP首部: IP資料報格式如下,普通的IP首部長為20個位元組,除非含有選項字段 四個位元組的32bit,首先是0-7bit,8-15,16-23,24-31 服務類型TOS,其中3位是優先權字段(已經忽略),4bit的TOS分别代表最小延時,最大吞吐量,最高可靠性和最小費用。 Te l n e t和R l o g i n這兩個互動應用要求最小的傳輸時延,因為人們主要用它們來傳輸少量的互動資料。另一方面, F T P檔案傳輸則要求有最大的吞吐量。最高可靠性被指明給網絡管理(S N M P)和路由選擇協定。使用者網絡新聞( Usenet news, NNTP)是唯一要求最小費用的應用。 ICMP,IGMP,UDP,TCP在它們格子的首部中均含有同時覆寫首部和資料檢驗和碼。 I C M P、I G M P、U D P和T C P都采用相同的檢驗和算法,盡管T C P和U D P除了本身的首部和資料外,在I P首部中還包含不同的字段。在RFC中有關于如何計算I n t e r n e t檢驗和的實作技術。由于路由器經常隻修改 T T L字段(減1) ,是以當路由器轉發一份封包時可以增加它的檢驗和,而不需要對 I P整個首部進行重新計算。 R F C為此給出了一個很有效的方法。 三IP路由選擇: 當一個IP資料包準備好了的時候,IP資料包(或者說是路由器)是如何将資料包送到目的地的呢?它是怎麼選擇一個合适的路徑來"送貨"的呢? 最特殊的情況是目的主機和主機直連,那麼主機根本不用尋找路由,直接把資料傳遞過去就可以了。至于是怎麼直接傳遞的,這就要靠ARP協定了,後面會講到。 稍微一般一點的情況是,主機通過若幹個路由器(router)和目的主機連接配接。那麼路由器就要通過ip包的資訊來為ip包尋找到一個合适的目标來進行傳遞,比如合适的主機,或者合适的路由。路由器或者主機将會用如下的方式來處理某一個IP資料包
這再一次證明了,ip包是不可靠的。因為它不保證送達。 路由表中的每一項都包含下面這些資訊。 1目的IP位址 2下一站路由器 3标志是網絡位址還是主機位址,标志下一站路由器是否為真正的下一站路由器 4為資料報的傳輸指定一個網絡接口 四.子網尋址: IP位址的定義是網絡号+主機号。但是現在所有的主機都要求子網編址,也就是說,把主機号在細分成子網号+主機号。最終一個IP位址就成為 網絡号碼+子網号+主機号 五.子網路遮罩: C類位址的子網路遮罩是255.255.255.0 B類位址的子網路遮罩是255.255.0.0 ...以此類推 子網路遮罩轉化為二進制,為一的代表網絡位,以零的代表主機位 IP AND 子網路遮罩=網絡号 IP AND 子網路遮罩取非=主機号 2的主機号位(0的部分)=主機數 下面是兩個具體的例子: a.欲将B類IP位址168.195.0.0劃分成27個子網 解1)27化成二進制=11011 2)該二進制為5位數,是以N=5 3)将B類位址的子網路遮罩的255.255.0.0的主機位址前5位置1,得到255.255.248.0.即為劃分27個子網的B類IP位址168.195.0.0的子網路遮罩 b.欲将IP位址168.195.0.0劃分為若幹子網,每個子網有700台主機 解1)700化為二進制=1010111100 2)該二進制位數=10,即N=10 3)将B類位址的子網路遮罩255.255.0.0的後面10位變成0,得255.255.252.0,即為劃分成主機700台的B類IP位址168.195.0.0的子網路遮罩 六.兩個命名 1ipconfig/all(windows),ifconfig(linux) 2netstat 小結: 如果目的主機在直接相連的網絡上,那麼就把資料報直接傳給目的主機,否則傳給預設路由器。在進行路由選擇決策時,主機和路由器都使用路由表。在表中有三種類型的路由:特定主機型、特定網絡型和預設路由型。路由表中的表目具有一定的優先級。在選擇路由時,主機路由優先于網絡路由,最後在沒有其他可選路由存在時才選擇預設路由。 I P路由選擇是通過逐跳來實作的。資料報在各站的傳輸過程中目的 I P位址始終不變,但是封裝和目的鍊路層位址在每一站都可以改變。大多數的主機和許多路由器對于非本地網絡的資料報都使用預設的下一站路由器。 兩個小題: 202.105.192.0/24沒有劃分子網,C類IP位址,子網路遮罩為255.255.255.0,/24為掩碼位數 問題:配置設定給某校園網的位址塊是202.105.192.0/18,該校園網包含多少個C類網絡? 解,因為次IP是C類IP位址,且掩碼位數不為24,則劃分了子網。 1.IP位址=網絡号+子網号+主機号 2.網絡号和子網号全是1,主機号全是0 3.因為子網路遮罩位數代表的全是1 4.是以子網位數=子網路遮罩位數(24)-子網路遮罩位數(18)=6 5.是以包含了2的6次方-2個網絡,除去一個全0和全1的情況。 補充: 屬于同一個網段的兩台主機進行通信是不需要通過路由器的,除了一種情況,使用了VLAN,虛拟區域網路。 以C類IP位址為例:C類IP位址的子網路遮罩為255.255.255.0 IP位址=網絡号+主機号------》IP位址=網絡号+網絡ID+主機ID這個時候就是劃分了子網,使用VLAN,這個時候的,兩台主機通信的時候,是要通過路由器的。 當掩碼為24的時候,沒有劃分子網。 當掩碼為26的時候,劃分了2的2次方,劃分了4個子網,此時主機數為2的6次方-2台 當掩碼為22的時候,劃分了C類網絡,劃分了2的2次方,即4個C類網絡(這個并不是虛拟的)。 ************************************************************************************************************************* ************************************************************************************************************* [置頂] TCP/IP詳解(4,5)ARP和RARP,第四,五章筆記整理1 ARP協定概述 IP資料包常通過以太網發送,但是以太網裝置并不識别32位IP位址,它們是以48位以太網位址傳輸以太網資料包的。是以,IP驅動器必須把IP目的位址轉換成以太網網目的位址。在這兩種位址之間存在着某種靜态的或算法的映射,常常需要檢視一張表。位址解析協定(Address Resolution Protocol,ARP)就是用來确定這些映射關系的協定,位于TCP/IP協定棧中的低層,是 TCP/IP設計者利用以太網的廣播性質設計出來的,主要特性和優點是它的位址對應關系是動态的﹐以查詢的方式來獲得 IP位址和MAC位址的對應。 2 ARP工作原理 2.1 ARP工作過程 1) 首先﹐每一台主機都會在 ARP Cache中建立一個 ARP表格﹐用來記錄 IP位址和MAC位址的對應關系。這個 Table的每一條資訊會根據自身的存活時間遞減而最終消失﹐以確定資訊的真實性。 2) 當發送主機有一個封包要傳送給目的主機并且獲得目的主機的 IP 位址的時候﹐發送主機會先檢查自己的 ARP表格中有沒有與該 IP位址對應的MAC位址。如果有﹐就直接使用此位址來傳送封包﹔如果沒有﹐則向網絡發出一個 ARP Request廣播封包﹐查詢目的主機的MAC位址。這個封包會包含發送端的 IP位址和MAC位址資訊。 3) 這時﹐網絡上所有的主機都會收到這個廣播封包﹐會檢查封包的 IP 欄位是否和自己的 IP 位址一緻。如果不是則忽略﹔如果是則會先将發送端的MAC位址和 IP資料更新到自己的 ARP表格去﹐如果已經有該 IP的對應﹐則用新的資訊覆寫原來的﹔然後再回應一個 ARP Reply封包給對方﹐告知發送主機關于自己的MAC位址﹔ 4)當發送端接到 ARP Reply之後﹐也會更新自己的 ARP表格﹔然後就可以用此記錄進行傳送了。 5) 如果發送端沒有得到 ARP Reply ﹐則宣告查詢失敗。 如圖1所示,描述了ARP廣播過程。 2.2 ARP 的查詢過程 前面說的 ARP表格﹐隻有在 TCP/IP協定被載入核心之後才會建立﹐如果 TCP/IP協定被解除安裝或關閉機器﹐那麼表格就會被清空﹔到下次協定載入或開機的時候再重建立立﹐而同時會向網絡發出一個 ARP廣播﹐告訴其它機器它的目前位址﹐以便所有機器都能保持最正确的資料。 然而﹐ARP cache 的大小是有所限制的﹐如果超過了界限﹐那麼越長時間沒被使用過渡資料就必須清理掉﹐以騰出空間來儲存更新的資料。是以﹐當機器收到 ARP equest 封包時﹐如果查詢對象不是自己﹐則不會根據發送端位址資料來更新自己的 ARP 表格﹐而是完全忽略該封包。同時﹐每筆存在 cache 中的資料﹐都不是永久儲存的﹕每筆資料再更新的時候﹐都會被賦予一個存活倒數計時值﹐如果在倒數時間到達的時候﹐該資料就會被清掉。然而﹐如果該資料在倒數時間到達之前被使用過﹐則計時值會被重新賦予。 當然了﹐ARP尚有一套機制來處理當 ARP表格資料不符合實際位址資料的狀況(例如﹐在目前連接配接尚未結束前﹐收到目的端的位址資料更新消息)﹔或是目的主機太忙碌而未能回答 ARP請求等狀況。 2.3 ARP封包格式 ARP封包被封裝在以太網幀頭部中傳輸,如圖2所示,是ARP協定封包頭部格式。 2.4 ARP高速緩存 ARP高效運作的關鍵是由于每個主機上都有一個ARP高速緩存,這個高速緩存放了最近Internet位址到硬體位址之間的映射記錄,高速緩存中每一項的生存時間一般為20分鐘,起始時間從被建立時開始算起。我們可以通過arp -a或show arp來顯示高速緩存中所有的内容 注意:ARP不能通過IP路由器發送廣播,是以不能用來确定遠端網絡裝置的MAC位址。對于目标主機位于遠端網絡的情況,IP利用ARP确定預設網關(路由器)的MAC位址,并将資料包發到預設網關,由路由器按它自己的方式轉發資料包。 3 反向ARP 反向ARP(Reverse ARP,RARP)用于把實體位址(MAC位址)轉換到對應的 IP 位址。例如,在無盤工作站啟動的時候,因為無法從自身的作業系統獲得自己的IP位址配置資訊。這時,無盤工作站可發送廣播請求獲得自己的IP位址資訊,而RARP伺服器則響應IP請求消息-為無盤工作站配置設定1個未用的IP位址(通過發送RARP應答包)。 RARP在很大程度上已被BOOTP、DHCP所替代,後面這兩種協定對RARP的改進是可以提供除了IP位址外的其它更多的資訊,如預設網關、DNS伺服器的IP位址等資訊。 RARP的查詢過程 首先是查詢主機向網絡送出一個 RARP Request廣播封包﹐向别的主機查詢自己的 IP。在時候﹐網絡上的 RARP伺服器就會将發送端的 IP 位址用 RARP Reply封包回應給查詢者。這樣查詢主機就獲得自己的 IP位址了。 不過與ARP不同的是﹐查詢主機将 RARP Request封包發送之後﹐可能得到的 RARP Reply會不止一個。因為網絡上可能存在不止一台 RARP伺服器(基于備份和分擔考量﹐極有可能如此設計)﹐那麼﹐所有收到 RARP請求的伺服器都會嘗試向查詢主機作出 RARP Reply 回應。如果這樣的話﹐網絡上将充斥這種 RARP回應﹐做成額外的負荷。這時候﹐我們有兩種方法來解決RARP的回應問題。 第一種方法﹐為每一個做 RARP 請求的主機配置設定一主伺服器﹐正常來說﹐隻有主伺服器才回做出 RARP 回應﹐其它主機隻是記錄下接收到 RARP 請求的時間而已。假如主伺服器不能順利作出回應﹐那麼查詢主機在等待逾時再次用廣播方式發送 RARP 請求﹐其它非主伺服器假如在接到第一個請求後很短時間内再收到相同請求的話﹐才會作出回應動作。 第二種方法也很類似﹕正常來說﹐主伺服器當收到 RARP 請求之後﹐會直接作出回應﹔為避免所有非主伺服器同時傳回 RARP 響應﹐每台非主伺服器都會随機等待一段時間再作出回應。如果主伺服器未能作出回應的話﹐查詢主機會延遲一段時間才會進行第二次請求﹐以確定這段時間内獲得非主伺服器的回應。當然﹐設計者可以精心的設計延遲時間至一個合理的間隔。 4 代理ARP 代理ARP(PROXY ARP)也被稱作混雜ARP(Promiscuous ARP)(RFC 925、1027)一般被像路由器這樣的裝置使用--用來代替處于另一個網段的主機回答本網段主機的ARP請求。 下面是代理ARP的應用之一,如圖5所示,主機PC1(192.168.20.66/24)需要向主機PC2(192.168.20.20/24)發送封包,因為主機PC1不知道子網的存在且和目标主機PC2在同一主網絡網段,是以主機PC1将發送ARP請求廣播封包請求192.168.20.20的MAC位址。這時,路由器将識别出封包的目标位址屬于另一個子網(注意,路由器的接口IP位址配置的是28位的掩碼),是以向請求主機回複自己的硬體位址(0004.dd9e.cca0)。之後,PC1将發往PC2的資料包都發往MAC位址0004.dd9e.cca0(路由器的接口E0/0),由路由器将資料包轉發到目标主機PC2。(接下來路由器将為PC2做同樣的代理發送資料包的工作)。這種ARP使得子網化網絡拓撲對于主機來說時透明的(或者可以說是路由器以一個不真實的PC2的MAC位址欺騙了源主機PC1)。 5 無故ARP(免費ARP) 無故(Gratuitous ARP,GARP)ARP也稱為無為ARP。主機有時會使用自己的IP位址作為目标位址發送ARP請求。這種ARP請求稱為無故ARP,GARP,主要有兩個用途: (1)檢查重複位址(如果收到ARP響應表明存在重複位址)。 (2)用于通告一個新的資料鍊路辨別。當一個裝置收到一個arp請求時,發現arp緩沖區中已有發送者的IP位址,則更新此IP位址的MAC位址條目。 6. 應用舉例這裡進行的操作是在linux系統下進行的,Windows環境基本相同,可以在指令視窗下輸入arp直接進行查詢. 基本指令 arp -a [ ip-address ]:表示顯示ARP映射表。如果在arp -a指令中沒有指定IP位址,則預設顯示全部ARP映射表。 arp -d ip-address : 表示删除ARP映射項。 arp -s ip-address ether-address [ temp ] :表示增加ARP映射項。ip-address為ARP映射項的IP位址,為點分十進制格式。 ether-address為ARP映射項的以太網MAC位址,格式為XX-XX-XX-XX-XX-XX,其中XX為十六進制數。temp表示增加的映射項為臨時,有效時間為20ms,否則将在路由器工作時間内永遠有效(可選)。如果配置靜态映射項時沒有指定temp選項,則預設為永遠有效。 需要注意arp靜态條目與動态條目的差別。在不同的系統中,手工設定的arp靜态條目是有差別的。在linux和win2000中,靜态條目不會因為僞造的arp響應包而改變,而動态條目會改變。而在win98中,手工設定的靜态條目會因為收到僞造的arp響應包而改變. 一般情況下,ARP映射表由動态ARP協定維護,在特殊情況下,才需要手工配置。另外ARP映射表隻用于區域網路内,對于廣域網的位址解析,有其它的配置或擷取方法(如幀中繼的逆向位址解析)。 clear arp-cache:清空ARP映射表。在某些情況下,需要清空并更新ARP映射表,這時可以用arp -d逐條删除,也可以用clear arp-cache指令一次清空。 show arp :顯示ARP映射表。 7. ARP欺騙 在實作TCP/IP協定的網絡環境下,一個ip包走到哪裡,要怎麼走是靠路由表定義,但是,當ip包到達該網絡後,哪台機器響應這個ip包卻是靠該ip包中所包含的硬體mac位址來識别。也就是說,隻有機器的硬體mac位址和該ip包中的硬體mac位址相同的機器才會應答這個ip包,因為在網絡中,每一台主機都會有發送ip包的時候,是以,在每台主機的記憶體中,都有一個 arp--> 硬體mac 的轉換表。通常主機在發送一個ip包之前,它要到該轉換表中尋找和ip包對應的硬體mac位址,如果沒有找到,該主機就發送一個ARP廣播包,于是,主機重新整理自己的ARP緩存。然後發出該ip包。 了解這些常識後,現在就可以談在以太網絡中如何實作ARP欺騙了. 7.1同一網段的ARP欺騙 如圖所示,三台主機 A: ip位址 192.168.0.1硬體位址 AA:AA:AA:AA:AA:AA B: ip位址 192.168.0.2 硬體位址 BB:BB:BB:BB:BB:BB C: ip位址 192.168.0.3 硬體位址 CC:CC:CC:CC:CC:CC 一個位于主機B的入侵者想非法進入主機A,可是這台主機上安裝有防火牆。通過收集資料他知道這台主機A的防火牆隻對主機C有信任關系(開放23端口(telnet))。而他必須要使用telnet來進入主機A,這個時候他應該如何處理呢? 我們這樣考慮,入侵者必須讓主機A相信主機B就是主機C,如果主機A和主機C之間的信任關系是建立在ip位址之上的。如果單單把主機B的ip位址改的和主機C的一樣,那是不能工作的,至少不能可靠地工作。如果你告訴以太網卡裝置驅動程式,自己IP是192.168.0.3,那麼這隻是一種純粹的競争關系,并不能達到目标。我們可以先研究C這台機器,如果我們能讓這台機器暫時當掉,競争關系就可以解除,這個還是有可能實作的。在機器C當掉的同時,将機器B的ip位址改為192.168.0.3,這樣就可以成功的通過23端口telnet到機器A上面,而成功的繞過防火牆的限制. 上面的這種想法在這種情況下是無效的,如果主機A和主機C之間的信任關系是建立在硬體位址的基礎上。這個時候還需要用ARP欺騙的手段讓主機A把自己的ARP緩存中的關于192.168.0.3映射的硬體位址改為主機B的硬體位址. 我們可以人為的制造一個arp_reply的響應包,發送給想要欺騙的主機,這是可以實作的,因為協定并沒有規定必須在接收到arp_echo後才可以發送響應包.這樣的工具很多,我們也可以直接用snifferpro抓一個arp響應包,然後進行修改.也人為地制造這個包。可以指定ARP包中的源IP、目标IP、源MAC位址、目标MAC位址. 這樣你就可以通過虛假的ARP響應包來修改主機A上的動态ARP緩存達到欺騙的目的 下面是具體的步驟: 他先研究192.0.0.3這台主機,發現這台主機的漏洞。 1) 根據發現的漏洞使主機C當掉,暫時停止工作。 2) 這段時間裡,入侵者把自己的ip改成192.0.0.3 3) 他用工具發一個源ip位址為192.168.0.3源MAC位址為BB:BB:BB:BB:BB:BB的包給主機A,要求主機A更新自己的arp轉換表 4) 主機更新了arp表中關于主機C的ip-->mac對應關系 5) 防火牆失效了,入侵的ip變成合法的mac位址,可以telnet了 上面就是一個ARP的欺騙過程,這是在同網段發生的情況,但是,提醒注意的是,在B和C處于不同網段的時候,上面的方法是不起作用的. 7.2 不同網段的ARP欺騙 圖所示A、C位于同一網段而主機B位于另一網段,三台機器的ip位址和硬體位址如下: A: ip位址 192.168.0.1硬體位址 AA:AA:AA:AA:AA:AA B: ip位址 192.168.1.2硬體位址 BB:BB:BB:BB:BB:BB C: ip位址 192.168.0.3硬體位址 CC:CC:CC:CC:CC:CC 在這種下,位于192.168.1網段的主機B如何冒充主機C欺騙主機A呢?顯然用上面的辦法的話,即使欺騙成功,那麼由主機B和主機A之間也無法建立telnet會話,因為路由器不會把主機A發給主機B的包向外轉發,路由器會發現位址在192.168.0.這個網段之内. 現在就涉及到另外一種欺騙方式―ICMP重定向。把ARP欺騙和ICMP重定向結合在一起就可以基本實作跨網段欺騙的目的. ICMP重定向封包是ICMP控制封包中的一種。在特定的情況下,當路由器檢測到一台機器使用非優化路由的時候,它會向該主機發送一個ICMP重定向封包,請求主機改變路由。路由器也會把初始資料報向它的目的地轉發. 我們可以利用ICMP重定向封包達到欺騙的目的. 下面是結合ARP欺騙和ICMP重定向進行攻擊的步驟: 1) 為了使自己發出的非法ip包能在網絡上能夠存活長久一點,開始修改ip包的生存時間ttl為下面的過程中可能帶來的問題做準備。把ttl改成255. (ttl定義一個ip包如果在網絡上到不了主機後,在網絡上能存活的時間,改長一點在本例中有利于做充足的廣播) 2) 下載下傳一個可以自由制作各種包的工具(例如hping2) 3) 然後和上面一樣,尋找主機C的漏洞按照這個漏洞當掉主機C。 4) 在該網絡的主機找不到原來的192.0.0.3後,将更新自己的ARP對應表。于是他發送一個原ip位址為192.168.0.3硬體位址為BB:BB:BB:BB:BB:BB的ARP響應包。 5) 現在每台主機都知道了,一個新的MAC位址對應192.0.0.3,一個ARP欺騙完成了,但是,每台主機都隻會在區域網路中找這個位址而根本就不會把發送給192.0.0.3的ip包丢給路由。于是他還得構造一個ICMP的重定向廣播。 6) 自己定制一個ICMP重定向包告訴網絡中的主機:到192.0.0.3的路由最短路徑不是區域網路,而是路由,請主機重定向你們的路由路徑,把所有到192.0.0.3的ip包丢給路由。 7) 主機A接受這個合理的ICMP重定向,于是修改自己的路由路徑,把對192.0.0.3的通訊都丢給路由器. 8) 入侵者終于可以.在路由外收到來自路由内的主機的ip包了,他可以開始telnet到主機的23口 其實上面的想法隻是一種理想化的情況,主機許可接收的ICMP重定向包其實有很多的限制條件,這些條件使ICMP重定向變的非常困難. TCP/IP協定實作中關于主機接收ICMP重定向封包主要有下面幾條限制: 1) 新路由必須直達 2) 重定向包必須來自屈枉目标的目前路由 3) 重定向包不能通知主機用自己作路由 4) 被改變的路由必須是一條間接路由 由于有這些限制,是以ICMP欺騙實際上很難實作。 7.3 ARP欺騙的防禦 知道了ARP欺騙的方法和危害,我們給出一些初步的防禦方法: 1) 不要把安全信任關心建立在ip位址或者mac位址的基礎上(RARP同樣存在欺騙問題),理想的關系應該是ip+mac; 2) 設定靜态的mac->ip映射,不要讓主機重新整理設定好的arp轉換表. 3) 停止使用arp,将arp作為永久條目儲存在對應表中.linux下可以用ifconfig –arp使得網卡驅動停用arp. 4) 使用代理網關發送上行資料. 5) 修改系統配置拒收ICMP重定向封包. 在linux下可以通過在防火牆上拒絕ICMP重定向封包或者是修改核心選項重新編譯核心來拒絕接收ICMP重定向封包. 在win2000下可以通過防火牆和IP政策拒絕接收ICMP封包. ******************************************************* ******************************************************* ******************************************************* ******************************************************* [置頂] TCP/IP詳解(6,7,8)ICMP,Ping,Traceroute,第六七八章筆記整理一.ICMP的由來 IP提供的盡力資料報通信服務無連接配接服務,而并不能解決網絡低層的資料報丢失、重複、延遲或亂序等問題,TCP在IP基礎建立有連接配接服務解決以上問題,不能解決網絡故障或其它網絡原因無法傳輸的包的問題。 是以,ICMP設計的本意就是希望對IP包無法傳輸時提供報告,這些差錯報告幫助了發送方了解為什麼無法傳遞,網絡發生了什麼問題,确定應用程式後續操作。 注意:IP中有關于差錯檢測的機制——用于檢測傳輸錯誤的頭部檢驗和 二.ICMP的作用 四.不産生ICMP封包的情況 盡管在大多數情況下,錯誤的包傳送應該給出ICMP封包,但是在特殊情況下,是不産生ICMP錯誤封包的。如下
雖然裡面的一些規定現在還不是很明白,但是所有的這一切規定,都是為了防止産生ICMP封包的無限傳播而定義的。 ICMP協定大緻分為兩類,一種是查詢封包,一種是差錯封包。其中查詢封包有以下幾種用途:
五.ICMP的兩級封裝 每個ICMP封包都放在IP資料報的資料部分中通過網際網路傳遞,而IP資料報本身放在幀的資料部分中通過物聯網傳遞 六.ICMP封包類型 ICMP定義了五種常用差錯封包和六種查詢封包類型,以及使用代碼表達某種類型下面不同情況的細分 七.ICMP的應用 a.ping ping可以說是ICMP的最著名的應用,當我們某一個網站上不去的時候。通常會ping一下這個網站。ping會回顯出一些有用的資訊。一般的資訊如下: ping這個單詞源自聲納定位,而這個程式的作用也确實如此,它利用ICMP協定包來偵測另一個主機是否可達。原理是用類型碼為0的ICMP發請 求,受到請求的主機則用類型碼為8的ICMP回應。ping程式來計算間隔時間,并計算有多少個包被送達。使用者就可以判斷網絡大緻的情況。我們可以看到, ping給出來了傳送的時間和TTL的資料。我給的例子不太好,因為走的路由少,有興趣地可以ping一下國外的網站比如sf.net,就可以觀察到一些 丢包的現象,而程式運作的時間也會更加的長。 ping還給我們一個看主機到目的主機的路由的機會。這是因為,ICMP的ping請求資料報在每經過一個路由器的時候,路由器都會把自己的ip放到該數 據報中。而目的主機則會把這個ip清單複制到回應icmp資料包中發回給主機。但是,無論如何,ip頭所能紀錄的路由清單是非常的有限。如果要觀察路由, 我們還是需要使用更好的工具,就是要講到的Traceroute(windows下面的名字叫做tracert)。 b.Traceroute Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。前面說到,盡管ping工具也可以進行偵測,但是,因為ip頭的限制,ping不能完全的記錄下所經過的路由器。是以Traceroute正好就填補了這個缺憾。 Traceroute的原理是非常非常的有意思,它受到目的主機的IP後,首先給目的主機發送一個TTL=1(還記得TTL是什麼嗎?)的UDP(後面就 知道UDP是什麼了)資料包,而經過的第一個路由器收到這個資料包以後,就自動把TTL減1,而TTL變為0以後,路由器就把這個包給抛棄了,并同時産生 一個主機不可達的ICMP資料報給主機。主機收到這個資料報以後再發一個TTL=2的UDP資料報給目的主機,然後刺激第二個路由器給主機發ICMP資料 報。如此往複直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。進而避開了ip頭隻能記錄有限路由IP的問題。 有人要問,我怎麼知道UDP到沒到達目的主機呢?這就涉及一個技巧的問題,TCP和UDP協定有一個端口号定義,而普通的網絡程式隻監控少數的幾個号碼較 小的端口,比如說80,比如說23,等等。而traceroute發送的是端口号>30000(真變态)的UDP報,是以到達目的主機的時候,目的 主機隻能發送一個端口不可達的ICMP資料報給主機。主機接到這個報告以後就知道,主機到了,是以,說Traceroute是一個騙子一點也不為過:) Traceroute程式裡面提供了一些很有用的選項,甚至包含了IP選路的選項,請察看man文檔來了解這些,這裡就不贅述了。 Traceroute實作有兩種方法: 一種:發生一個ICMP回應請求封包;目的主機将會産生一個ICMP回應答複封包。Microsoft實作(tracert)中采用該方法。 當回應請求到達目的主機時,ICMP就産生一個答複封包,它的 源位址等于收到的請求封包中的目的IP位址。 另一種:發生一個資料報給一個不存在的應用程序;目的主機将會産生一個ICMP目的不可達封包。大多數UNIX版本的traceroute程式采用該方法。 Traceroute程式發送一份UDP資料報給目的主機,但它選擇一個不可能的值作為UDP端口号(大于30000),使目的主機的任何一個應用程式都不可能使用該端口。因為,當該資料報到達時,将使目的主機的UDP子產品産生一份“端口不可達”錯誤的ICMP封包。這樣,Traceroute程式所要做的就是區分接收到的ICMP封包是逾時還是端口不可達,以判斷什麼時候結束。 |