路由請求過程
『壹』 請求路由詳解
家用路由器不過才100多而已!
路由的作用基本上就是一個虛擬的主機,他帶防火牆功能,可以對網路進行各種控制及共享上網,基本上就是一個網路管理器,好處是方便管理網路並提升網路的安全性和速度!同時可以設定幾個不同的網段並進行管理!
軟和硬的區別就是一個是實物,一個是軟體,軟體占系統資源,而且目前也沒發現有什麼好的軟體,若是功能要求不高,家用的就可以,要是專業的,少5000都買不到好的!
『貳』 路由信息處理過程是怎樣的
要解釋路由器的概念,首先要介紹什麼是路由。所謂「路由」,是指把數據從一個地方傳送到另一個地方的行為和動作,而路由器,正是執行這種行為動作的機器,它的英文名稱為Router。 路由器的基本功能如下:
第一,網路互連:路由器支持各種區域網和廣域網介面,主要用於互連區域網和廣域網,實現不同網路互相通信;
第二,數據處理:提供包括分組過濾、分組轉發、優先順序、復用、加密、壓縮和防火牆等功能;
第三,網路管理:路由器提供包括路由器配置管理、性能管理、容錯管理和流量控制等功能。
簡單的講,路由器主要有以下幾種功能:
第一,網路互連,路由器支持各種區域網和廣域網介面,主要用於互連區域網和廣域網,實現不同網路互相通信;
第二,數據處理,提供包括分組過濾、分組轉發、優先順序、復用、加密、壓縮和防火牆等功能;
第三,網路管理,路由器提供包括配置管理、性能管理、容錯管理和流量控制等功能。
為了完成「路由」的工作,在路由器中保存著各種傳輸路徑的相關數據--路由表(Routing Table),供路由選擇時使用。路由表中保存著子網的標志信息、網上路由器的個數和下一個路由器的名字等內容。路由表可以是由系統管理員固定設置好的,也可以由系統動態修改,可以由路由器自動調整,也可以由主機控制。在路由器中涉及到兩個有關地址的名字概念,那就是:靜態路由表和動態路由表。由系統管理員事先設置好固定的路由表稱之為靜態(static)路由表,一般是在系統安裝時就根據網路的配置情況預先設定的,它不會隨未來網路結構的改變而改變。動態(Dynamic)路由表是路由器根據網路系統的運行情況而自動調整的路由表。路由器根據路由選擇協議(Routing Protocol)提供的功能,自動學習和記憶網路運行情況,在需要時自動計算數據傳輸的最佳路徑。
為了簡單地說明路由器的工作原理,現在我們假設有這樣一個簡單的網路。如圖所示,A、B、C、D四個網路通過路由器連接在一起。
現在我們來看一下在如圖所示網路環境下路由器又是如何發揮其路由、數據轉發作用的。現假設網路A中一個用戶A1要向C網路中的C3用戶發送一個請求信號時,信號傳遞的步驟如下:
第1步:用戶A1將目的用戶C3的地址C3,連同數據信息以數據幀的形式通過集線器或交換機以廣播的形式發送給同一網路中的所有節點,當路由器A5埠偵聽到這個地址後,分析得知所發目的節點不是本網段的,需要路由轉發,就把數據幀接收下來。
第2步:路由器A5埠接收到用戶A1的數據幀後,先從報頭中取出目的用戶C3的IP地址,並根據路由表計算出發往用戶C3的最佳路徑。因為從分析得知到C3的網路ID號與路由器的C5網路ID號相同,所以由路由器的A5埠直接發向路由器的C5埠應是信號傳遞的最佳途經。
第3步:路由器的C5埠再次取出目的用戶C3的IP地址,找出C3的IP地址中的主機ID號,如果在網路中有交換機則可先發給交換機,由交換機根據MAC地址表找出具體的網路節點位置;如果沒有交換機設備則根據其IP地址中的主機ID直接把數據幀發送給用戶C3,這樣一個完整的數據通信轉發過程也完成了。
從上面可以看出,不管網路有多麼復雜,路由器其實所作的工作就是這么幾步,所以整個路由器的工作原理基本都差不多。當然在實際的網路中還遠比上圖所示的要復雜許多,實際的步驟也不會像上述那麼簡單,但總的過程是這樣的。
增加路由器涉及的基本協議
路由器英文名稱為Router,是一種用於連接多個網路或網段的網路設備。這些網路可以是幾個使用不同協議和體系結構的網路(比如互聯網與區域網),可以是幾個不同網段的網路(比如大型互聯網中不同部門的網路),當數據信息從一個部門網路傳輸到另外一個部門網路時,可以用路由器完成。現在,家庭區域網也越來越多地採用路由器寬頻共享的方式上網。
路由器在連接不同網路或網段時,可以對這些網路之間的數據信息進行「翻譯」,然後「翻譯」成雙方都能「讀」懂的數據,這樣就可以實現不同網路或網段間的互聯互通。同時,它還具有判斷網路地址和選擇路徑的功能以及過濾和分隔網路信息流的功能。目前,路由器已成為各種骨幹網路內部之間、骨幹網之間以及骨幹網和互聯網之間連接的樞紐。
NAT:全稱Network Address Translation(網路地址轉換),路由器通過NAT功能可以將區域網內部的IP地址轉換為合法的IP地址並進行Internet的訪問。比如,區域網內部有個IP地址為192.168.0.1的計算機,當然通過該IP地址可以和內網其他的計算機通信;但是如果該計算機要訪問外部Internet網路,那麼就需要通過NAT功能將192.168.0.1轉換為合法的廣域網IP地址,比如210.113.25.100。
DHCP:全稱Dynamic Host Configuration Protocol(動態主機配置協議),通過DHCP功能,路由器可以為網路內的主機動態指定IP地址,而不需要每個用戶去設置靜態IP地址,並將TCP/IP配置參數分發給區域網內合法的網路客戶端。
DDNS:全稱Dynamic Domain Name Server(動態域名解析系統),通常稱為「動態DNS」,因為對於普通的寬頻上網使用的都是ISP(網路服務商)提供的動態IP地址。如果在區域網內建立了某個伺服器需要Internet用戶進行訪問,那麼,可以通過路由器的DDNS功能將動態IP地址解析為一個固定的域名,比如www.cpcw.com,這樣Internet用戶就可以通過該固定域名對內網伺服器進行訪問。
PPPoE:全稱PPP over Ethernet(乙太網上的點對點協議),通過PPPoE技術,可以讓寬頻數據機(比如ADSL Modem)用戶獲得寬頻網的個人身份驗證訪問,能為每個用戶創建虛擬撥號連接,這樣就可以高速連接到Internet。路由器具備該功能,可以實現PPPoE的自動撥號連接,這樣與路由器連接的用戶可以自動連接到Internet。
ICMP:全稱Internet Control Message Protocol(Internet控制消息協議),該協議是TCP/IP協議集中的一個子協議,主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。
總的來說,路由器與交換機的主要區別體現在以下幾個方面:
(1)工作層次不同
最初的的交換機是工作在OSI/RM開放體系結構的數據鏈路層,也就是第二層,而路由器一開始就設計工作在OSI模型的網路層。由於交換機工作在OSI的第二層(數據鏈路層),所以它的工作原理比較簡單,而路由器工作在OSI的第三層(網路層),可以得到更多的協議信息,路由器可以做出更加智能的轉發決策。
(2)數據轉發所依據的對象不同
交換機是利用物理地址或者說MAC地址來確定轉發數據的目的地址。而路由器則是利用不同網路的ID號(即IP地址)來確定數據轉發的地址。IP地址是在軟體中實現的,描述的是設備所在的網路,有時這些第三層的地址也稱為協議地址或者網路地址。MAC地址通常是硬體自帶的,由網卡生產商來分配的,而且已經固化到了網卡中去,一般來說是不可更改的。而IP地址則通常由網路管理員或系統自動分配。
(3)傳統的交換機只能分割沖突域,不能分割廣播域;而路由器可以分割廣播域
由交換機連接的網段仍屬於同一個廣播域,廣播數據包會在交換機連接的所有網段上傳播,在某些情況下會導致通信擁擠和安全漏洞。連接到路由器上的網段會被分配成不同的廣播域,廣播數據不會穿過路由器。雖然第三層以上交換機具有VLAN功能,也可以分割廣播域,但是各子廣播域之間是不能通信交流的,它們之間的交流仍然需要路由器。
(4)路由器提供了防火牆的服務
路由器僅僅轉發特定地址的數據包,不傳送不支持路由協議的數據包傳送和未知目標網路數據包的傳送,從而可以防止廣播風暴。
交換機一般用於LAN-WAN的連接,交換機歸於網橋,是數據鏈路層的設備,有些交換機也可實現第三層的交換。 路由器用於WAN-WAN之間的連接,可以解決異性網路之間轉發分組,作用於網路層。他們只是從一條線路上接受輸入分組,然後向另一條線路轉發。這兩條線路可能分屬於不同的網路,並採用不同協議。相比較而言,路由器的功能較交換機要強大,但速度相對也慢,價格昂貴,第三層交換機既有交換機線速轉發報文能力,又有路由器良好的控制功能,因此得以廣泛應用。
目前個人比較多寬頻接入方式就是ADSL,因此筆者就ADSL的接入來簡單的說明一下。現在購買的ADSL貓大多具有路由功能(很多的時候廠家在出廠時將路由功能屏蔽了,因為電信安裝時大多是不啟用路由功能的,啟用DHCP。打開ADSL的路由功能),如果個人上網或少數幾台通過ADSL本身就可以了,如果電腦比較多你只需要再購買一個或多個集線器或者交換機。考慮到如今集線器與交換機的 價格相差十分小,不是特殊的原因,請購買一個交換機。不必去追求高價,因為如今產品同質化十分嚴重,我最便宜的交換機現在沒有任 何問題。給你一個參考報價,建議你購買一個8口的,以滿足擴充需求,一般的價格100元左右。接上交換機,所有電腦再接到交換機上就行了。餘下所要做的事情就只有把各個機器的網線插入交換機的介面,將貓的網線插入uplink介面。然後設置路由功能,DHCP等, 就可以共享上網了。
看完以上的解說讀者應該對交換機、集線器、路由器有了一些了解,目前的使用主要還是以交換機、路由器的組合使用為主,具體的組合方式可根據具體的網路情況和需求來確定。
路由器是互聯網路中必不可少的網路設備之一,路由器是一種連接多個網路或網段的網路設備,它能將不同網路或網段之間的數據信息進行「翻譯」,以使它們能夠相互「讀」懂對方的數據,從而構成一個更大的網路。 路由器有兩大典型功能,即數據通道功能和控制功能。數據通道功能包括轉發決定、背板轉發以及輸出鏈路調度等,一般由特定的硬體來完成;控制功能一般用軟體來實現,包括與相鄰路由器之間的信息交換、系統配置、系統管理等。
路由發現:學習路由的過程,動態路由通常由路由器自己完成,靜態路由需要手工配置
路由轉發:路由學習之後會照學習更新的路由表進行數據轉發
路由維護:路由器通過定期與網路中其他路由器進行通信來了解網路拓撲變化以便更新路由表
路由器記錄了介面所直連的網路 ID,稱為直連路由,路由器可以自動學習到直連路由而不需要配置
路由器所識別的邏輯地址的協議必須被路由器所支持
『叄』 請說一下http請求的基本過程
首先http是一個應用層的協議,在這個層的協議,只是一種通訊規范,也就是因為雙方要進行通訊,大家要事先約定一個規范。
1.連接 當我們輸入這樣一個請求時,首先要建立一個socket連接,因為socket是通過ip和埠建立的,所以之前還有一個DNS解析過程,把www.mycompany.com變成ip,如果url里不包含埠號,則會使用該協議的默認埠號。
DNS的過程是這樣的:首先我們知道我們本地的機器上在配置網路時都會填寫DNS,這樣本機就會把這個url發給這個配置的DNS伺服器,如果能夠
找到相應的url則返回其ip,否則該DNS將繼續將該解析請求發送給上級DNS,整個DNS可以看做是一個樹狀結構,該請求將一直發送到根直到得到結
果。現在已經擁有了目標ip和埠號,這樣我們就可以打開socket連接了。
2.請求 連接成功建立後,開始向web伺服器發送請求,這個請求一般是GET或POST命令(POST用於FORM參數的傳遞)。GET命令的格式為:GET 路徑/文件名 HTTP/1.0
文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。現在可以發送GET命令:
GET /mydir/index.html HTTP/1.0,
3.應答 web伺服器收到這個請求,進行處理。從它的文檔空間中搜索子目錄mydir的文件index.html。如果找到該文件,Web伺服器把該文件內容傳送給相應的Web瀏覽器。
為了告知瀏覽器,,Web伺服器首先傳送一些HTTP頭信息,然後傳送具體內容(即HTTP體信息),HTTP頭信息和HTTP體信息之間用一個空行分開。
常用的HTTP頭信息有:
① HTTP 1.0 200 OK 這是Web伺服器應答的第一行,列出伺服器正在運行的HTTP版本號和應答代碼。代碼"200 OK"表示請求完成。
② MIME_Version:1.0它指示MIME類型的版本。
③ content_type:類型這個頭信息非常重要,它指示HTTP體信息的MIME類型。如:content_type:text/html指示傳送的數據是HTML文檔。
④ content_length:長度值它指示HTTP體信息的長度(位元組)。
4.關閉連接:當應答結束後,Web瀏覽器與Web伺服器必須斷開,以保證其它Web瀏覽器能夠與Web伺服器建立連接。
下面我們具體分析其中的數據包在網路中漫遊的經歷
在網路分層結構中,各層之間是嚴格單向依賴的。「服務」是描述各層之間關系的抽象概念,即網路中各層向緊鄰上層提供的一組操作。下層是服務提供者,
上層是請求服務的用戶。服務的表現形式是原語(primitive),如系統調用或庫函數。系統調用是操作系統內核向網路應用程序或高層協議提供的服務原
語。網路中的n層總要向n+1層提供比n-1層更完備的服務,否則n層就沒有存在的價值。
傳輸層實現的是「端到端」通信,引進網間進程通信概念,同時也要解決差錯控制,流量控制,數據排序(報文排序),連接管理等問題,為此提供不同的服
務方式。通常傳輸層的服務通過系統調用的方式提供,以socket的方式。對於客戶端,要想建立一個socket連接,需要調用這樣一些函數socket
() bind() connect(),然後就可以通過send()進行數據發送。
現在看數據包在網路中的穿行過程:
應用層
首先我們可以看到在應用層,根據當前的需求和動作,結合應用層的協議,有我們確定發送的數據內容,我們把這些數據放到一個緩沖區內,然後形成了應用層的報文data。
傳輸層
這些數據通過傳輸層發送,比如tcp協議。所以它們會被送到傳輸層處理,在這里報文打上了傳輸頭的包頭,主要包含埠號,以及tcp的各種制信息,這些信息是直接得到的,因為介面中需要指定埠。這樣就組成了tcp的數據傳送單位segment。tcp
是一種端到端的協議,利用這些信息,比如tcp首部中的序號確認序號,根據這些數字,發送的一方不斷的進行發送等待確認,發送一個數據段後,會開啟一個計
數器,只有當收到確認後才會發送下一個,如果超過計數時間仍未收到確認則進行重發,在接受端如果收到錯誤數據,則將其丟棄,這將導致發送端超時重發。通過
tcp協議,控制了數據包的發送序列的產生,不斷的調整發送序列,實現流控和數據完整。
網路層
然後待發送的數據段送到網路層,在網路層被打包,這樣封裝上了網路層的包頭,包頭內部含有源及目的的ip地址,該層數據發送單位被稱為packet。網路層開始負責將這樣的數據包在網路上傳輸,如何穿過路由器,最終到達目的地址。在這里,根據目的ip地址,就需要查找下一跳路由的地址。首先在本機,要查找本機的路由表,在windows上運行route print就可以看到當前路由表內容,有如下幾項:
Active Routes Default Route Persistent Route.
整個查找過程是這樣的:
(1)根據目的地址,得到目的網路號,如果處在同一個內網,則可以直接發送。
(2)如果不是,則查詢路由表,找到一個路由。
(3)如果找不到明確的路由,此時在路由表中還會有默認網關,也可稱為預設網關,IP用預設的網關地址將一個數據傳送給下一個指定的路由器,所以網關也可能是路由器,也可能只是內網向特定路由器傳輸數據的網關。
(4)
路由器收到數據後,它再次為遠程主機或網路查詢路由,若還未找到路由,該數據包將發送到該路由器的預設網關地址。而數據包中包含一個最大路由跳數,如果超
過這個跳數,就會丟棄數據包,這樣可以防止無限傳遞。路由器收到數據包後,只會查看網路層的包裹數據,目的ip。所以說它是工作在網路層,傳輸層的數據對
它來說則是透明的。
如果上面這些步驟都沒有成功,那麼該數據報就不能被傳送。如果不能傳送的數據報來自本機,那麼一般會向生成數據報的應用程序返回一個「主機不可達」或 「網路不可達」的錯誤。
以windows下主機的路由表為例,看路由的查找過程
======================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.2 192.168.1.101 10
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.0 255.255.255.0 192.168.1.101 192.168.1.101 10
192.168.1.101 255.255.255.255 127.0.0.1 127.0.0.1 10
192.168.1.255 255.255.255.255 192.168.1.101 192.168.1.101 10
224.0.0.0 240.0.0.0 192.168.1.101 192.168.1.101 10
255.255.255.255 255.255.255.255 192.168.1.101 192.168.1.101 1
Default Gateway: 192.168.1.2
Network Destination 目的網段
Netmask 子網掩碼
Gateway 下一跳路由器入口的ip,路由器通過interface和gateway定義一調到下一個路由器的鏈路,通常情況下,interface和gateway是同一網段的。
Interface 到達該目的地的本路由器的出口ip(對於我們的個人pc來說,通常由機算機A的網卡,用該網卡的IP地址標識,當然一個pc也可以有多個網卡)。
網關這個概念,主要用於不同子網間的交互,當兩個子網內主機A,B要進行通訊時,首先A要將數據發送到它的本地網關,然後網關再將數據發送給B所在的網關,然後網關再發送給B。
默認網關,當一個數據包的目的網段不在你的路由記錄中,那麼,你的路由器該把那個數據包發送到哪裡!預設路由的網關是由你的連接上的default gateway決定的,也就是我們通常在網路連接里配置的那個值。
通常interface和gateway處在一個子網內,對於路由器來說,因為可能具有不同的interface,當數據包到達時,根據
Network
Destination尋找匹配的條目,如果找到,interface則指明了應當從該路由器的那個介面出去,gateway則代表了那個子網的網關地
址。
第一條 0.0.0.0 0.0.0.0 192.168.1.2 192.168.1.101 10
0.0.0.0
代表了預設路由。該路由記錄的意思是:當我接收到一個數據包的目的網段不在我的路由記錄中,我會將該數據包通過192.168.1.101這個介面發送到
192.168.1.2這個地址,這個地址是下一個路由器的一個介面,這樣這個數據包就可以交付給下一個路由器處理,與我無關。該路由記錄的線路質量
10。當有多個條目匹配時,會選擇具有較小Metric值的那個。
第三條 192.168.1.0 255.255.255.0 192.168.1.101 192.168.1.101 10
直
聯網段的路由記錄:當路由器收到發往直聯網段的數據包時該如何處理,這種情況,路由記錄的interface和gateway是同一個。當我接收到一個數
據包的目的網段是192.168.1.0時,我會將該數據包通過192.168.1.101這個介面直接發送出去,因為這個埠直接連接著
192.168.1.0這個網段,該路由記錄的線路質量
10 (因interface和gateway是同一個,表示數據包直接傳送給目的地址,不需要再轉給路由器)。
一般就分這兩種情況,目的地址與當前路由器介面是否在同一子網。如果是則直接發送,不需再轉給路由器,否則還需要轉發給下一個路由器繼續進行處理。
查找到下一跳ip地址後,還需要知道它的mac地址,這個地址要作為鏈路層數據裝進鏈路層頭部。這時需要arp協議,具體過程是這樣的,查找arp
緩沖,windows下運行arp
-a可以查看當前arp緩沖內容。如果裡面含有對應ip的mac地址,則直接返回。否則需要發生arp請求,該請求包含源的ip和mac地址,還有目的地
的ip地址,在網內進行廣播,所有的主機會檢查自己的ip與該請求中的目的ip是否一樣,如果剛好對應則返回自己的mac地址,同時將請求者的ip
mac保存。這樣就得到了目標ip的mac地址。
鏈路層
將mac地址及鏈路層控制信息加到數據包里,形成Frame,Frame在鏈路層協議下,完成了相鄰的節點間的數據傳輸,完成連接建立,控制傳輸速度,數據完整。
物理層
物理線路則只負責該數據以bit為單位從主機傳輸到下一個目的地。
下一個目的地接受到數據後,從物理層得到數據然後經過逐層的解包 到 鏈路層 到 網路層,然後開始上述的處理,在經網路層 鏈路層 物理層將數據封裝好繼續傳往下一個地址。
在上面的過程中,可以看到有一個路由表查詢過程,而這個路由表的建立則依賴於路由演算法。也就是說路由演算法實際上只是用來路由器之間更新維護路由表,
真正的數據傳輸過程並不執行這個演算法,只查看路由表。這個概念也很重要,需要理解常用的路由演算法。而整個tcp協議比較復雜,跟鏈路層的協議有些相似,其
中有很重要的一些機制或者概念需要認真理解,比如編號與確認,流量控制,重發機制,發送接受窗口。
tcp/ip基本模型及概念
物理層
設備,中繼器(repeater),集線器(hub)。對於這一層來說,從一個埠收到數據,會轉發到所有埠。
鏈路層
協議:SDLC(Synchronous Data Link Control)HDLC(High-level Data Link
Control)
ppp協議獨立的鏈路設備中最常見的當屬網卡,網橋也是鏈路產品。集線器MODEM的某些功能有人認為屬於鏈路層,對此還有些爭議認為屬於物理層設備。除
此之外,所有的交換機都需要工作在數據鏈路層,但僅工作在數據鏈路層的僅是二層交換機。其他像三層交換機、四層交換機和七層交換機雖然可對應工作在OSI
的三層、四層和七層,但二層功能仍是它們基本的功能。
因為有了MAC地址表,所以才充分避免了沖突,因為交換機通過目的MAC地址知道應該把這個數據轉發到哪個埠。而不會像HUB一樣,會轉發到所有滴埠。所以,交換機是可以劃分沖突域滴。
網路層
四個主要的協議:
網際協議IP:負責在主機和網路之間定址和路由數據包。
地址解析協議ARP:獲得同一物理網路中的硬體主機地址。
網際控制消息協議ICMP:發送消息,並報告有關數據包的傳送錯誤。
互聯組管理協議IGMP:被IP主機拿來向本地多路廣播路由器報告主機組成員。
該層設備有三層交換機,路由器。
傳輸層
兩個重要協議 TCP 和 UDP 。
埠概念:TCP/UDP 使用 IP 地址標識網上主機,使用埠號來標識應用進程,即 TCP/UDP 用主機 IP
地址和為應用進程分配的埠號來標識應用進程。埠號是 16 位的無符號整數, TCP 的埠號和 UDP
的埠號是兩個獨立的序列。盡管相互獨立,如果 TCP 和 UDP
同時提供某種知名服務,兩個協議通常選擇相同的埠號。這純粹是為了使用方便,而不是協議本身的要求。利用埠號,一台主機上多個進程可以同時使用
TCP/UDP 提供的傳輸服務,並且這種通信是端到端的,它的數據由 IP 傳遞,但與 IP
數據報的傳遞路徑無關。網路通信中用一個三元組可以在全局唯一標志一個應用進程:(協議,本地地址,本地埠號)。
也就是說tcp和udp可以使用相同的埠。
可以看到通過(協議,源埠,源ip,目的埠,目的ip)就可以用來完全標識一組網路連接。
應用層
基於tcp:Telnet FTP SMTP DNS HTTP
基於udp:RIP NTP(網落時間協議)和DNS (DNS也使用TCP)SNMP TFTP
『肆』 dsr路由流程
nexthop_list_init(); 初始化下一跳列表,主要用來保存下一跳的信息,確定ack的請求機會
gw_list_init(); 初始化網關列表
routecache_init(); 初始化路由緩存
reqtable_init(); 初始化路由請求表,記錄收到的路由請求的信息
rtsmbuffer_init(); 初始化重發緩沖區,保存發出數據中,需要ack回復的數據報的信息
sendbuffer_init(); 初始化發送緩沖區 ,臨時存儲 發送路由請求之後,受到路由應答請求之前,發送的數據報
dsr_stat_init(); 初始化統計信息
init_packet_queue(); 初始化用戶空間隊列
對全局變數 ipq_queue_t q 進行初始化,
注冊一個處理netfilter隊列的函數 netfilter_receive,一旦有數據進入隊列就調用,做兩件事情:
1.調用ipq_enqueue函數(收到的包和發出的包都由他加入到q隊列中,進入的包有dsr頭,而發出的包沒有dsr頭,所以在程序中使用了兩次switch來吧接受的發送的udp包添加的q中)
發出的hello包,info設置為空,根據不同的協議頭,把元素加入到不同的list中
接受到的數據包,info欄位是由netfileter自己填寫的
2.喚醒dsr進程。
startup_dsr(); 創建DSR進程,負責處理用戶空間隊列的數據報
注冊pre_route local_out gw_post_route3個鉤子 ,gw_post_route為最後一個被調用的鉤子
pre_route 鉤子
1如果發現數據包中dsrhdr的頭部需要ack標志為1,則直接發送一個ack回復,不進入用戶空間排隊。
2如果是ack數據包,也就是下游節點返回的ack應答,然後進入dsr_in_ack_op_handler中進行處理,之前的判斷已經沒有必要了,不過還是按照從前的習慣保留了。其中在dsr_in_ack_op_handler中調用rtsmbuffer_ack_del函數,這個函數用來根據ack回復時間動態調整ack超時,這是和從前dsr最大的區別:
如果是數據包,則直接去掉dsr頭,返回netfilter
其他類型的數據包,則加入用戶隊列 (返回NF_QUEUE)
加入隊列的數據包,有netfitlerreceive調用packet_enqueue來完成,並觸發dsr進程,然後再由packet_in和packet_out進行處理
dsr_local_out流程
如果是自己給自己的,則直接返回
如果是發往外網段的直接返回
其他的數據報全部返回到用戶空間隊列排隊。加入隊列的數據包,有netfitlerreceive調用packet_enqueue來完成,並觸發dsr進程,然後再由packet_in和packet_out進行處理
dsr進程流程
循環從用戶空間隊列中取出元素 (iqp_dequeue)
{
進入的數據報 ,調用packet_in
發出的數據報,調用packet_out
}
packet_in 的流程
循環處理dsr頭部欄位
如果是DSR_SRC_OPT :調用dsr_src_opt_handler ,
如果DSR_IN_OPT,調用dsr_in_src_opt_handler處理:
如果dsrhdr標志位中需要ack為1,則發送一個ack
如果DSR_FORWARD_OPT,調用dsr_forward_src_opt_handler
1重新設置接受地址為下一跳地址,源地質為本節點地址;
2重新設置nexthop_info_entry中下一跳的ack請求時間,即:
if_in_nexthop_list判斷轉發的包的目的地址是否在下一跳得列表中。
Get_nexthop_natime來獲得請求下一個跳節點ack的時間。從nexthop_info_entry中得到最近一次從下一收到的ack時間。改變Nexthop_info_entry中的標志位,需要ack ,計算下一次需要ack的時間;
3 修改ip頭目的地址為本節點地址,源地址為本節點地址
如果是DSR_REQ_OPT ,調用dsr_req_opt_handler
如果是DSR_IN_OPT ,則調用dsr_in_req_opt_handler,
1首先處理路由信息,添加從本節點到路由請求發起源的路由信息。
2再次判斷是否為網關請求,然後make_and_send_dsr_reply回復一個網關應答,否則回復一般的請求 同樣是使用make_and_send_dsr_reply
3 修改ip頭目的地址為本節點地址
如果是DSR_FORWARD_OPT dsr_forward_req_opt_handler
1判斷是否收到過這個請求,如果收到過,則返回,否則繼續
2處理路由信息,添加從本節點到路由請求發起源的路由信息
3然後針對網關修改,首先查找本的路由網關列表,沒有則轉發網關請求:iph->daddr= BCAST;
4如果本節點網關列表不為空,則還是make_and_send_dsr_reply來發送回復,將本地有的網關路由發送給請求節。
如果是DSR_REP_OPT ,調用dsr_rep_opt_handler
如果是DSR_IN_OPT, 則dsr_in_rep_opt_handler
首先先把添加本地路由信息,然後添加網關列表,然後處理發送緩沖區的數據,這個緩沖區的數據,是在make_dsr_source_route_option中調用sendbuffer_insert添加的。
如果是DSR_FORWARD_OPT, 則調用dsr_forward_rep_opt_handler ,
首先將reply信息中自己需要的路由信息提取,添加本地路由信息,如果是網關發現應答,然後則提取網關路由,並添加網關列表
如果是DSR_ERR_OPT ,則dsr_err_opt_handler
如果DSR_IN_OP 則dsr_in_err_opt_handler
如果DSR_FORWARD_OPT dsr_forward_err_opt_handler
循環結束
如果數據包是給自己的,則從dsr頭部恢復真正的源地址和目的地址(針對網關設計的),而後去掉dsr頭部,然後返回nf_accept
否則,則直接由自己轉發,返回nf_stolen
重新注入netfilter架構:nf_reinject()
paket_out 流程:
調用了make_and_send_dsr_data_packet進行處理具體過程:
1如果hoplist是空 則調用make_dsr_source_route_option ,在這個函數中,首先比較目的地址是否為本網段,如果不是本網段則需要查找本地網關列表
如果沒有網關信息,則發起網關發現:gateway_discovery()
否則檢查到網關/內網地址由,如果沒有路由,則發起路由請求,將發送的數據暫時保存在發送緩沖區中,【在收到路由請求應答之後來發送】
總結一下make_dsr_sour_route_option 的功能,就是檢查網關信息和路由信息,沒有相關信息則發起路由請求,把要發送的數據存到發送緩沖區中
2如果hoplist不為空 則 調用make_dsr_source_route_opt 直接將hoplist復制給scropt的hoplist.
3 ,填寫dsrhdr的頭部信息
4.獲取下一跳的地址 填寫ip頭的目的地址
5.對nexthop_info_entry中的ack請求時間進行修改,並根據條件修改dsr需要dsr頭部的需要ack標志位。
6.dsr_merge_opt_two合並dsr頭和源路由選項,並發送insert_dsr_stuff_and_send
在insert_dsr_stuff_and_send中 又調用dsr_send_packet,而後在dsr_send_packet中
調用了rtsmbuffer_insert來插入發送緩沖區一個記錄
回到packet_out,然後返回一個NF_STOLEN
網關節點的鉤子調用處理過程
說明幾個鉤子
dsr的 nat
dsr_pre_route 優先順序最高 pre_route 優先順序低於dsr_pre_route
pre_route ,本在發出之前的 localout 優先順序高於gw_local_out
gw_local_out 上線之前
第一部分 ,從網關受到發往外網段的數據報:
首先調用dsr_pre_route,進行各種頭部處理,然後恢復ip頭,交付給netfilter.
這時候nat的pre_route 被調用,nat負責轉換原地質為網關地址,記錄內外對應的ip信息和段口號,返回netfilter,然後在發出是掉用localout 轉換目標地址,返回給netfilter,
此時gw_local_out由於也是掛在local_out處,優先順序低,所以在nat的localout結束後會被調用,察看是不是由內網發給內網的,不是則直接返回nf_accept,由此一個外發的數據報處理完畢。
第二部分 ,從外網發給內網的
首先由dsr_pre_route處里,由於外網進入的是原始的數據報,所以直接返回 ,再次有nat的preroute捕獲,進行原地址的變換,轉為網關地質,經過內外對應的iptable,再local-out出 轉換目標地址為內網結點地址,然後gw_local_out 再次截獲,發現是由外網發到內網段的,則進行處理調用make_and_send_dsr_data_packet,轉為dsr協議可以識別的包,發送出去
『伍』 請求知道路由器的工作原理
路由器工作於OSI七層協議中的第三層,其主要任務是接收來自一個網路介面的數據包,根據其中所含的目的地址,決定轉發到下一個目的地址。因此,路由器首先得在轉發路由表中查找它的目的地址,若找到了目的地址,就在數據包的幀格前添加下一個MAC地址,同時IP數據包頭的TTL(Time To Live)域也開始減數,並重新計算校驗和。當數據包被送到輸出埠時,它需要按順序等待,以便被傳送到輸出鏈路上。
路由器在工作時能夠按照某種路由通信協議查找設備中的路由表。如果到某一特定節點有一條以上的路徑,則基本預先確定的路由准則是選擇最優(或最經濟)的傳輸路徑。由於各種網路段和其相互連接情況可能會因環境變化而變化,因此路由情況的信息一般也按所使用的路由信息協議的規定而定時更新。
網路中,每個路由器的基本功能都是按照一定的規則來動態地更新它所保持的路由表,以便保持路由信息的有效性。為了便於在網路間傳送報文,路由器總是先按照預定的規則把較大的數據分解成適當大小的數據包,再將這些數據包分別通過相同或不同路徑發送出去。當這些數據包按先後秩序到達目的地後,再把分解的數據包按照一定順序包裝成原有的報文形式。路由器的分層定址功能是路由器的重要功能之一,該功能可以幫助具有很多節點站的網路來存儲定址信息,同時還能在網路間截獲發送到遠地網段的報文,起轉發作用;選擇最合理的路由,引導通信也是路由器基本功能;多協議路由器還可以連接使用不同通信協議的網路段,成為不同通信協議網路段之間的通信平台。
一般來說,路由器的主要工作是對數據包進行存儲轉發,具體過程如下:
第一步:當數據包到達路由器,根據網路物理介面的類型,路由器調用相應的鏈路層功能模塊,以解釋處理此數據包的鏈路層協議報頭。這一步處理比較簡單,主要是對數據的完整性進行驗證,如CRC校驗、幀長度檢查等。
第二步:在鏈路層完成對數據幀的完整性驗證後,路由器開始處理此數據幀的IP層。這一過程是路由器功能的核心。根據數據幀中IP包頭的目的IP地址,路由器在路由表中查找下一跳的IP地址;同時,IP數據包頭的TTL(Time To Live)域開始減數,並重新計算校驗和(Checksum)。
第三步:根據路由表中所查到的下一跳IP地址,將IP數據包送往相應的輸出鏈路層,被封裝上相應的鏈路層包頭,最後經輸出網路物理介面發送出去。
簡單地說,路由器的主要工作就是為經過路由器的每個數據包尋找一條最佳傳輸路徑,並將該數據包有效地傳送到目的站點。由此可見,選擇最佳路徑策略或叫選擇最佳路由演算法是路由器的關鍵所在。為了完成這項工作,在路由器中保存著各種傳輸路徑的相關數據——路由表(Routing Table),供路由選擇時使用。上述過程描述了路由器的主要而且關鍵的工作過程,但沒有說明其它附加性能,例如訪問控制、網路地址轉換、排隊優先順序等。
『陸』 數據在網路的ip路由器通信的過程
IP數據報需從主機A上傳送到主機B上,主機A首先查找路由表;
if(目的主機是與自己在同一個網段內回)
{
主機A查詢答自己的ARP表;
if(有該目的IP地址對應的MAC地址的記錄)
{
將該MAC地址作為目的MAC地址,封裝數據幀,傳送給主機B;
}
else
{
發送一個ARP請求廣播給網段內的所有主機,來查詢該目的IP地址的MAC地址;
收到ARP請求報文的各個主機如果發現該IP地址是自己的IP地址,則返回一個ARP應答報文告訴主機A自己的MAC地址;
如果發現不是自己的IP地址,則丟棄該報文。
『柒』 請描述一下IP分組的路由轉發過程
2 路由原理
——當IP子網中的一台主機發送IP分組給同一IP子網的另一台主機時,它將直接把IP分組送到網路上,對方就能收到。而要送給不同IP於網上的主機時,它要選擇一個能到達目的子網上的路由器,把IP分組送給該路由器,由路由器負責把IP分組送到目的地。如果沒有找到這樣的路由器,主機就把IP分組送給一個稱為「預設網關(default gateway)」的路由器上。「預設網關」是每台主機上的一個配置參數,它是接在同一個網路上的某個路由器埠的IP地址。
——路由器轉發IP分組時,只根據IP分組目的IP地址的網路號部分,選擇合適的埠,把IP分組送出去。同主機一樣,路由器也要判定埠所接的是否是目的子網,如果是,就直接把分組通過埠送到網路上,否則,也要選擇下一個路由器來傳送分組。路由器也有它的預設網關,用來傳送不知道往哪兒送的IP分組。這樣,通過路由器把知道如何傳送的IP分組正確轉發出去,不知道的IP分組送給「預設網關」路由器,這樣一級級地傳送,IP分組最終將送到目的地,送不到目的地的IP分組則被網路丟棄了。
——目前TCP/IP網路,全部是通過路由器互連起來的,Internet就是成千上萬個IP子網通過路由器互連起來的國際性網路。這種網路稱為以路由器為基礎的網路(router based network),形成了以路由器為節點的「網間網」。在「網間網」中,路由器不僅負責對IP分組的轉發,還要負責與別的路由器進行聯絡,共同確定「網間網」的路由選擇和維護路由表。
——路由動作包括兩項基本內容:尋徑和轉發。尋徑即判定到達目的地的最佳路徑,由路由選擇演算法來實現。由於涉及到不同的路由選擇協議和路由選擇演算法,要相對復雜一些。為了判定最佳路徑,路由選擇演算法必須啟動並維護包含路由信息的路由表,其中路由信息依賴於所用的路由選擇演算法而不盡相同。路由選擇演算法將收集到的不同信息填入路由表中,根據路由表可將目的網路與下一站(nexthop)的關系告訴路由器。路由器間互通信息進行路由更新,更新維護路由表使之正確反映網路的拓撲變化,並由路由器根據量度來決定最佳路徑。這就是路由選擇協議(routing protocol),例如路由信息協議(RIP)、開放式最短路徑優先協議(OSPF)和邊界網關協議(BGP)等。
——轉發即沿尋徑好的最佳路徑傳送信息分組。路由器首先在路由表中查找,判明是否知道如何將分組發送到下一個站點(路由器或主機),如果路由器不知道如何發送分組,通常將該分組丟棄;否則就根據路由表的相應表項將分組發送到下一個站點,如果目的網路直接與路由器相連,路由器就把分組直接送到相應的埠上。這就是路由轉發協議(routed protocol)。
——路由轉發協議和路由選擇協議是相互配合又相互獨立的概念,前者使用後者維護的路由表,同時後者要利用前者提供的功能來發布路由協議數據分組。下文中提到的路由協議,除非特別說明,都是指路由選擇協議,這也是普遍的習慣。
3。 路由協議
——典型的路由選擇方式有兩種:靜態路由和動態路由。
——靜態路由是在路由器中設置的固定的路由表。除非網路管理員干預,否則靜態路由不會發生變化。由於靜態路由不能對網路的改變作出反映,一般用於網路規模不大、拓撲結構固定的網路中。靜態路由的優點是簡單、高效、可靠。在所有的路由中,靜態路由優先順序最高。當動態路由與靜態路由發生沖突時,以靜態路由為准。
——動態路由是網路中的路由器之間相互通信,傳遞路由信息,利用收到的路由信息更新路由器表的過程。它能實時地適應網路結構的變化。如果路由更新信息表明發生了網路變化,路由選擇軟體就會重新計算路由,並發出新的路由更新信息。這些信息通過各個網路,引起各路由器重新啟動其路由演算法,並更新各自的路由表以動態地反映網路拓撲變化。動態路由適用於網路規模大、網路拓撲復雜的網路。當然,各種動態路由協議會不同程度地佔用網路帶寬和CPU資源。
——靜態路由和動態路由有各自的特點和適用范圍,因此在網路中動態路由通常作為靜態路由的補充。當一個分組在路由器中進行尋徑時,路由器首先查找靜態路由,如果查到則根據相應的靜態路由轉發分組;否則再查找動態路由。
——根據是否在一個自治域內部使用,動態路由協議分為內部網關協議(IGP)和外部網關協議(EGP)。這里的自治域指一個具有統一管理機構、統一路由策略的網路。自治域內部採用的路由選擇協議稱為內部網關協議,常用的有RIP、OSPF;外部網關協議主要用於多個自治域之間的路由選擇,常用的是BGP和BGP-4。下面分別進行簡要介紹。
『捌』 什麼是路由請求啊如何實現一個網路隊列服務並且能夠支持Push, Pop, IsEmpty等常用的隊列操作。
路由請求就是向下個節點發送請求信息,獲得最短途徑
『玖』 路由器數據包轉發過程,簡單回答下就行了,坐等!!
對,A路由器會作為一個代理ARP,欺騙主機A1就是B1,做出響應,然後再通過路由查找的方式找到路由器B,然後到主機B1