❶ 數據是如何在路由器中通過的
對於一般人而言只要能使用路由器上網就可以了,但對於一個合格的網管來說,是必須要知道路由器的工作過程的,尤其是要知道數據是如何在路由器中通過的。
一、當數據經過路由器時,在原始套介面上可調用connect函數, connect函數僅設置目的地址。再重申一遍:埠號對原始套介面而言沒有意義。對於輸出而言,調用connect之後,由於目的地址已經指定,我們可以調用write或send,而不是sendto了。
二、普通輸出通常通過sendto或sendmsg並指定目的IP地址來完成,如果套介面已經連接,也可以調用write、writev或send,如果IP_HDRINCL選項未設置,則內核寫的數據起始地址是IP頭部之後的第一個位元組。
因為這種情況下,內核將構造IP頭部,並將它安在來自進程數據之前。內核將IPv4頭部的協議欄位設置成用戶在調用socket函數時所給的第三個參數。
三、如果IP_HDRINCL選項已設置,則內核寫的數據其實地址是IP頭部的第一個位元組。用戶所提供的數據必須包括IP頭部。此時進程構造除了以下兩項以外的整個IP頭部,IPv4標示欄位可以設為0,要求內核設置該值。而且僅當該欄位為0時,內核才為其設置和IPv4頭部校驗和由內核來計算和存儲。
四、如果創建原始套介面時指定了協議類型,即第三個參數protocol,那也並不是說只能發該類型的數據包。如,即使將protocol指定為IPPROTO_TCP,也可以發送用戶自己組裝的UDP報文,不過此時如果IP_HDRINCL選項未設置,那麼內核將會在IP頭的協議欄位指明後面的報文為TCP報文(不過此時卻為UDP報文)。
等數據包發送到對方TCP層,一般說來會因為找不到合適的TCP套介面接收該數據包而被丟棄。不過該包可以在目標主機的原始套介面上接收到。
五、如果IP_HDRINCL選項已設置,按照常規,應該組建自己的IP頭,但是即使我們沒有組建IP頭,用sendto或sendmsg並指定目的IP地址來發送數據是照樣可以完成的。但是這樣的數據包在目標機上用原始套介面是接收不到的,因為在ip_rcv()中要對IP頭進行驗證,並且要分析校驗和,所以該包會被丟棄,不過在鏈路層應該能夠接收到該數據包。
六、如果設置了IP_HDRINCL選項,並且數據包超長,那麼數據會被丟棄,並會返回出錯碼EMSGSIZE。如果未設置IP_HDRINCL選項,並且數據包超長,那麼數據包會被分片,要想接收到原始套介面,首先要接收的數據包必須有一個完整的、正確的IP頭,否則不能通過ip_rcv()中的包頭檢查和檢驗和驗證。
七、在原始套介面接收的數據包過程中,內核會對接收的IP包進行校驗和驗證,但不會對IP包以後的任何欄位進行檢測和驗證。如,我們創建原始套介面時,所指定的protocol參數為IPPROTO_TCP,內核也不會進行TCP校驗和驗證,而是直接把IP頭中協議欄位為TCP的所有數據包都復制一份,提交給該原始套介面。
八、用原始套介面接收到的TCP包都是進行了IP重組以後,TCP排序以前的報文。如果在創建原始套介面時,所指定的protocol參數不為零,(socket的第三個參數),則接收到的數據報的協議欄位應該與之匹配。
否則該數據報不傳遞給該套介面。如果此原始套介面上綁定了一個本地IP地址,那麼接收到的數據報的目的IP地址應該與該綁定的IP地址相匹配,否則該數據包將不傳遞到該套介面。
如果此原始套介面通過connect指定了一個對方IP地址,那麼接收到的數據包的源IP地址應與該以連接地址相匹配,否則該數據包不傳遞給該套介面。
原始套介面接收不到任何的ARP或RARP協議類型的套介面,因為net_rx_action()會把ARP或RARP協議類型的數據包傳遞給ARP的接收函數類處理,不會傳遞給IP層的接收函數ip_rcv(),因為有些ICMP類型的數據包在傳遞給原始套介面之前已經被系統所響應,並不再向上層傳遞。
❷ 路由器如何進行數據包轉發
路由器的作用與使用詳解
路由器是網路通信中的關鍵設備,它扮演著連接多個網路的橋梁角色,通過數據翻譯功能,使得不同網路間的通信成為可能。其主要任務是接收並轉發數據包,根據目的地地址進行智能路由,確保信息的准確傳遞。
路由器種類繁多,包括本地路由器連接固定線路(如光纖、同軸電纜)和遠程路由器連接動態介質(如電話線、無線網路)。例如,當使用電話線時,需要配以數據機;無線連接則需要無線接收機和發射機的支持。
在技術層面上,路由器工作於網路協議的第三層,執行數據包的轉發過程。這個過程主要包括:
接收數據包,根據數據包的物理網路介面類型(如10Base-T乙太網介面或V.35介面),進行鏈路層解析並驗證數據完整性。
處理IP層信息,查找路由表中的下一跳IP地址,可能對數據包進行分段或重組以適應不同網路介面的幀長度限制。
根據找到的IP地址,將處理後的數據包發送到相應的輸出鏈路層,最後通過物理輸出介面發送到目標網路。
總之,路由器的使用是確保網路間信息流暢的關鍵,無論是連接家庭網路還是企業網路,它都是不可或缺的通信橋梁。