1. 程式人生 > >網路層(含伺服器外網訪問)

網路層(含伺服器外網訪問)

         學習和了解ip層之前首先要分清什麼是內網ip和外網ip是不同的:

         內網ip實際上是區域網內成員使用的ip地址,比如學校內部即是一個區域網,我們私人用的電腦中ipconfig查到的ip即是內網ip, 在同一區域網中內網ip不能重複,所有內網ip最終通過某閘道器與網際網路(外網)通訊。

         外網ip是指上述閘道器的ip地址,在整個網際網路中是獨一無二的。之所以有內網ip的存在,即是因為外網ip不夠用而產生的。

         內網和外網轉換採用NAT技術,抄襲走一波....:網路地址轉NAT對映

         我們想做一個伺服器,讓任意客戶端能夠訪問到,該怎麼辦?我最近也做了簡單的外網可訪問的伺服器,走的彎路不少,這裡貼出讓大家少走彎路吧:NAT對映,就是將內網ip:port對映到閘道器的ip:port上,使得外網能夠通過閘道器訪問到我們的主機。而網上能查到的,通過設定路由器實現NAT對映,這是不靠譜的,因為我們所對映的閘道器也不過在區域網內,它也沒法直接和外網通訊,它甚至都還要經過多個閘道器才能連線上外網呢。現在本人使用的方法即是使用

花生殼,需要身份證實名認證,私人一百多一年就夠了,能夠使用限量的固定外網ip:port。

        電信網是面向連線的通訊方式,在資料傳輸之前建立好一條虛擬電路,相當於固定好一條路由方式,主機之間所有的資料傳輸都是通過這條虛擬電路來傳輸,並且資料的準確性由網路來保證。

         因特網是面向無連線的,資料以IP資料報的形式傳輸,每個IP資料報不是相同的路由方式傳輸,資料傳輸的準確性由主機的TCP層來保證

  1. IP地址的編址方式按時間經歷過以下3種:分類IP地址(基本編址方式)、劃分子網 (前一種的改進)、構成超網(較新無分類編址)。每個主機都有自己獨特的IP地址
  2. 分類IP地址:(二級IP地址)

        其中net-id是網路號,host-id是主機號。

                              

         有以下幾點需要注意:(1)IP地址管理機構分配網路號,得到網路號的單位自行分配主機號; (2)主機同時連線到N個網路上時主機就會有N個IP地址,所以路由器就會有兩個以上IP地址; (3)通過轉發器(物理層)或網橋(資料鏈路層)連線到一起的區域網仍是一個網路。

 

        IP地址與硬體地址間的轉化是通過地址解析協議ARP,從這裡可以知道有多少個IP地址就會有多少個硬體地址。MAC幀中的硬體地址即IP通過ARP轉換而來,也就是區域網的硬體地址匹配。 

                              

       網路層資料在傳輸過程中IP資料報中源地址和目的地址一直未改變,但資料鏈路層資料在傳輸中MAC幀中源地址和目的地址是變化的。

 

       IP地址與硬體地址的轉換是通過ARP協議:每個主機都有ARP快取記憶體這個快取裡放著本區域網內的主機IP地址和硬體地址對映表。這個表與資料鏈路層的轉發表都是有學習能力的。當表裡沒有IP資料報裡的IP地址時,主機[1]就會在本局域網裡廣播請求分組:”我的IPxxx;我的硬體地址xxx;我需要的IPxxx,這個IP的主機請回復硬體地址給我“,如果區域網有這個IP的主機[2]就會先在ARP快取記憶體建立主機[1]IP地址到硬體地址的對映,然後回覆響應分組:”我是IPxxx,我的硬體地址是xxx“,主機[1]收到回覆後會在ARP快取記憶體中寫入主機[2]的IP到硬體地址的對映。在ARP快取記憶體中的每一個對映關係都是設有生存時間的,以防某介面卡被換掉等情況,保持最新網路拓撲。注意:ARP只能解決同一區域網內的地址對映問題,所以當主機[2]不在這個區域網內的話,就沒有主機回覆請求分組,主機先通過轉發表找到併發送給本地的路由器,本地路由器將路由表中得出的下一跳地址交給資料鏈路層的網路介面軟體,然後通過APR將下一跳IP地址轉換為硬體地址,以MAC幀形式傳送給下一跳路由器。

 

         IP資料報的格式如下表:其中版本指的就是IP協議版本(IPV4、IPV6);生存時間指每經過一個路由器就將其值減1,直到為0。片偏移指每個IP資料報片在原IP資料報中的相對位置。

                                                                

           以前的知識瞭解:網橋的轉發表(資料鏈路)、每個主機的ARP快取裡的IP->硬體地址的對映表(同一區域網內),路由器裡的路由表(網路間)現在來了解一下:路由表中內容:<目的網路地址下一跳地址>。下一跳地址應該怎麼選擇見下文“劃分子網”。

 

            路由表的動態更新應該和轉發表的動態更新方法是一致的。

 

  1. 劃分子網:(三級IP地址)

        IP ::= {<網路號>,<子網號>,<主機號>}。網路號如同以前一樣未改變,子網號是從主機號裡佔用了幾位而得到的,主機號相應的也就少了幾位。個人覺得這個子網應該就是網橋所管理的一個區域,資料報傳送到某個路由後,路由會發送給相應的子網進一步轉發到目的機。

        網路地址:一個網路的網路號和子網號保留,主機號置0,即是這個網路的網路地址。

        子網掩碼:一個網路網路號和描述子網的那幾位為1,主機號為0即是這個網路的子網掩碼。當收到IP資料報後將IP資料報目的地址與子網掩碼進行“與”運算,即是對應子網的網路地址,比如IP:145.13.3.10,子網掩碼:255.255.255.0,它的網路地址就為:145.13.3.0。子網掩碼 >= 網路地址。

 

        路由表中內容:<目的網路地址;子網掩碼;下一跳地址>,到達目的地址可能要通過下一跳地址進行多次的間接互動。這個下一跳地址對應的是網路號而不是網路地址。從網路號還可以分別A、B、C三類網。

 

        路由過程:這和上文“分類IP地址的路由過程是一致的”。

1--、IP資料報發出後對比ARP快取記憶體中的地址對映表,如果在同一區域網中就直接交付,否則見2--。   

2--、主機通過鏈路層的轉發表將資料轉發給區域網路由器,將區域網路由器直接相連的網路的子網掩碼與IP資料報中目的地址作”與“運算,若結果與相應網路地址匹配則直接互動,否則見3--。   

3--、將路由表中的每行<目的網路地址;子網掩碼;下一跳地址>,其中子網掩碼與IP資料報中目的地址作”與“運算,若結果與該行目的地址匹配則將資料轉發給下一跳地址的路由器,否則見4--,這裡有要注意下一跳地址應該表示網路號決定的路由器而不是網路地址。    

4--、按照預設路由轉發,預設路由就是轉發給IP位0.0.0.0的路由器,也就是轉發給任意該路由器連線的路由器(相當於交給因特網了),若沒有預設路由則見5--。    

5--、報告轉發組出錯。

        子網號是在IP資料報中的說明了資料傳送給第幾個子網;子網掩碼是在路由表中描述網路的引數的。

 

  1. 構造超網(無分類編址CIDR):

          CIDR消除了傳統A、B、C類地址以及子網劃分的概念。CIDR的諧音讀成sider。CIDR消除了A、B、C類網路和劃分子網的概念,IP地址構成如此:{<網路字首>,<子網號>}。CIDR使用斜線記法:IP地址後加'/',然後寫上網路字首的個數,比如:128.14.231.7/20,就是前20位是網路字首,後12位是主機號。網路字首相同的IP組成一個“CIDR地址塊”。

 

          CIDR比較分類IP要靈活很多,分類IP事實上是存在浪費IP地址的現象的,比如得到了一個A類網路號後後面的主機號很多分配不完。而CIDR就幾乎可以避免這種現象。

 

          路由表內容:<網路字首 ; 下一跳地址>,匹配網路字首可能會有多個匹配成功,選擇其中最長網路字首對應的下一跳地址。

 

          在路由表中匹最長網路字首不可能一一進行比對,這樣很浪費時間而且很天真,匹配時我們採用二叉樹來找到最長字首,簡介如下圖:

                                                        

     這個樹位於路由器中,圖中方框是葉節點代表唯一字首(最長字首),每個葉節點包含它本身的網路字首和子網掩碼,搜尋到某葉節點就將目的地址 && 子網掩碼,若相等就跳到該節點對應的下一跳,否則繼續向下走。

 

  1. 網際控制報文協議ICMP:

          ICMP報文是IP資料報途經某路由器或某主機產生異常,該路由將異常情況返回給源點的。

 

        有兩種ICMP報文:ICMP差錯報告報文、ICMP詢問報文。ICMP格式如下:前4個位元組是固定的,後4個位元組取決前邊的“型別”。差錯報文的型別有5種:

(1)終點不可達(型別值3):路由器或主機不能互動資料報是向源點發送終點不可達報文。 

(2)源點抑制(型別值4):路由器或主機由於擁塞丟棄報文,向源點發送源點抑制報文使其慢點發送。 

(3)時間超過(型別值11):路由器或主機收到生存時間為0的報文會給源點發送時間超過報文,並將收到的報文丟掉。 

(4)引數問題(型別值12):路由器或主機收到IP資料報首部引數有不正確時向源點發送引數問題報文。 

(5)改變路由(型別值5):讓主機知道更好路由的地址。 ICMP報文格式如圖下所示:

                                                    

                                                                                                                      ICMP報文圖

          ICMP差錯報文格式與上圖保持一致,其中資料部分是由接收到的IP資料報首部8位元組和之後的8位元組一共16位元組資料組成。

                                                                              

          ICMP詢問報文:(1)回送請求和回答報文:主機或路由向目的主機發出請求,目的主機必須回送回答報文,用來檢測目的站是否可達和相關資訊。     (2)時間戮請求和回答報文:請求某主機和路由回答當前日期和時間,從1900年1月1日算起。

          例項1:電腦中的PING,傳送4個ICMP回送請求報文,可以得到4個回送報文算是ping通了,可以從發出和接收的報文時間戮之差得到往返時間。

          例項2:UNIX中traceroute應用程式 ,跟蹤IP資料報分組從原點到終點的路徑,這是利用ICMP差錯報文。先發TTL設為1,到達第一個路由後TTL-1=0了,就給源點回時間超過差錯報文,從而得到第一個路由IP及時間差,源點在傳送TTL為2的報文,得到第二個路由IP,然後以此類推得到整個路由過程的所有IP。

 

  1. 上文講了IP、IP資料報的組成、簡單的路由方式。下面講解複雜網路的路由方式,因特網的路由方式:因特網的路由選擇協議。

        因特網路由選擇協議是動態和分散式的。由於網路太龐大和隱私性兩個原因,因特網採用分層次的路由選擇協議,這樣一來因特網那個就將網際網路劃分為許多較小的自治系統,稱為AS。

 

        AS:在單一的技術管理下的一組路由器,AS內部使用什麼協議沒有限制,但是每個AS之間使用的路由選擇協議是單一、一致的。AS內部閘道器協議(域內路由選擇協議)IGP,例如RIP、OSPFAS外部閘道器協議(域外

          路由選擇協議)EGP,例如BGP-4。下面介紹IGP中的RIP協議。

        RIP協議是分散式、基於距離向量的選擇協議。距離的定義:路由到直接連線的網路的距離為1,這樣算來,路由到非直接的網路的距離為經過的路由器數加一。

         根據RIP協議選擇的路徑永遠是最短的,且一條路徑最多15個路由,也就是距離最大16,這表明這種協議只適合小型網際網路。一個AS內部若使用RIP協議則兩網路之間只會有一條路由。

         RIP協議的三個要點:(1)只和相鄰路由器交換資訊。(2)交換資訊為自己所知道的全部資訊。(3)每個固定時間交換一次資訊。

         一個AS內的每個路由器經過多次RIP協議規定的資訊交換後就知道整個AS內部任意網路的最短距離和下一跳地址。收到相鄰路由器(其地址為 X)的RIP 報文的處理方式

(1) 先修改此 RIP 報文中的所有專案:把“下一跳”欄位中的地址都改為 X,並把所有的“距離”欄位的值加 1。

(2) 對修改後的 RIP 報文中的每一個專案,重複以下步驟:

     若專案中的目的網路不在路由表中,則把該專案加到路由表中。

     否則

     若下一跳欄位給出的路由器地址是同樣的,則把收到的專案替換原路由表中的專案。

     否則

     若收到專案中的距離小於路由表中的距離,則進行更新

     否則,什麼也不做。

(3) 若 3 分鐘還沒有收到相鄰路由器的更新路由表,則把此相鄰路由器記為不可達路由器,即將距離置為16(距離為16表示不可達)。

(4) 返回。

RIP協議也是有缺點的:正常訊息更新很快,但是一旦網路出現一點故障就要花很長時間才能讓整個網路知道,比如下圖網1有了故障後,R1和R2會經過多次的互動資訊才能使得雙方多知道故障發生

                                               

                  另一種IGP,OSPF協議:

                  鏈路狀態:本路由器都和哪些路由器相鄰,及該鏈路的“度量”。

                  OSPF的三要點:(1)路由器會使用洪泛法向網路中的所有路由器傳送資訊。(2)訊息內容為本路由器的鏈路狀態。(3)只有該鏈路狀態發生改變時傳送資訊。         

                  OSPF協議又將一個AS劃分為多個範圍,成為區域,區域不能太大不超過200個路由器,劃分區域後洪泛法傳送資訊就只會在一個區域內傳送,區域內路由器只知道區域內網路的全部資訊。區域的結構圖如下圖:

              

        OSPF協議不使用UDP直接使用IP資料報傳輸,且構成的資料報很短,這樣就不需分組傳輸。OSPF沒有壞訊息傳的慢的缺點。

                    

  1. AS內部閘道器協議IGP介紹完了,下面介紹AS外部閘道器協議EGP:只知道每個AS有一個“發言人”,AS間通訊就依靠這個發言人,其他我也不曉得。
  2. 之前一直有個疑問是:每臺計算機的IP應該是唯一的,由因特網名字與號碼指派公司ICANN進行分配,但是我們的電腦IP為什可以隨意設定?

          解答:我們電腦中ipconfig或ifconfig得到的IP是內網(區域網)IP,不是外網IP。區域網、外網的IP在各自的範圍內都是唯一的。當我們手動設定電腦IP時,極有可能照成區域網中某個自動獲取IP的的使用者由於IP衝突而掉線。以下是區域網的ip範圍

a類網:10.0.0.0~10.255.255.255 ;  b類網 :172.16.0.0~172.31.255.255 ;  c類網 :192.168.0.0~192.168.255.255

  1. 閘道器即是路由器的意思。
  2. 開戶後都有一個自己的外網ip了,且這個外網ip是動態ip,我們平時ifconfig出現的ip地址在有些情況不一定是內網ip比如:撥號上網時。