第四章 網路層

一杯涼茶發表於2016-11-28

      序言

        沒儲存,電腦沒動放著去吃飯,結果win7就休眠了,啟動雖然網頁度還在,可以我的博文沒儲存啊,心痛,只能在重頭來了,只能說博文應該改進改進,如果直接關了,應該幫使用者自動儲存草稿的。重新寫的。反正今天下午的任務在這裡擺著。加油

                                      ----WH

 

一、回顧

      TCP/IP協議棧:物理層、鏈路層、網路層、傳輸層、應用層(會話層+表示層+應用層)

      物理層:通過位元流線上路中傳輸來完成我們傳輸資料的目的,傳輸的方式很多種,傳輸的介質也很多中,光纖等

      鏈路層:資料幀,在資料包(報)上加mac地址形成資料幀,其中的CRC檢測原理用來檢測資料的完整性,這一層用到的協議有PPP(點到點協議)、例如家中的撥號上網, CSMA/CD協議(廣播協議),在區域網中用的很多。其中會發生一系列的問題,和解決問題的辦法。

      網路層:資料包(報),加上源ip地址和目標ip地址了。這一層的協議有四種,ARP(地址解析協議)、RARP(逆地址解析協議)、ICMP(網際控制報文協議)、IGMP(網際組管理協議)。這四種協議只是和IP協議配套使用,。在一章還能學到的是資料包的結構是怎麼樣的。什麼是ip地址,為什麼需要ip地址,怎麼分配和區分ip地址的,這這一節我們度會講解到。

      傳輸層:這裡會講解到埠。常見的80埠,我們學習javaWeb時,使用Tomcat中,看到的是8080埠,瀏覽器使用的是80埠,這一節就會講到埠是幹嘛用的。

      應用層:待續。

 

 

二、網路層

   1、基礎知識

      什麼是ip地址?

        不就是一連串陣列加.組成的嗎,比如我們常常設定路由器時登入192.168.1.1。這個就是ip地址。那到底是什麼樣的呢?

          ip地址就是32位,也就是4個位元組組成,因為32位太長了,我們不好識別,所以每次將其分為8位一組,分成4組,然後在根據每組換算成10進位制陣列,組與組之間用.分隔開來,舉個例子,11111111,11111111,11111111,11111111就可以用255,255,255,255來表示了,所以每一組都是從0到255之間。現在在來看192.168.1.1這個ip地址,也能將其換成2進位制來表示,只不過那樣太麻煩,讓人不易於看懂,所以就將其用10進位制來表示。

        ip地址的意義在哪裡呢?要上網就需要一個ip地址,這個ip地址不能和別人一樣,獨一無二,因為在網路上通訊就是通過ip地址來找到你這臺主機的,但是這個ip地址不是固定的,比如你在家撥號上網,是A這個ip地址,下一次撥號,可能就不是A,變成B了,這要看你所在的網路給你分配了什麼ip地址。如何通過ip查詢到你,這個問題後面來討論。

      ip地址的分類?

         既然每個人的ip地址度不一樣,那一臺主機怎麼通過ip地址找到另一臺主機的呢,茫茫人海,不可能一個個查詢把,所以就有專門的人來管理和分配這個ip地址,

      看看以前怎麼分的地址(瞭解)

      分類編址  = <網路號>+<主機號>

    

        網路號由你所連的網決定,學校的區域網,公司的區域網,城市的廣域網等,就是相當於先市、在區、在到村這樣的。跟快遞一樣,你ip地址肯定也得這樣分,先找到大的,然後慢慢一層層找下去。

      A類地址:網路號有8位,第一位固定為0,127種,主機號有24位,那麼就能給該類地址劃分16777215個ip地址把,也就1千多萬個地址,意思就是比如你需要組建一個有1千多萬臺主機的網路,那麼你就要去分配一個A類地址,要求給你一個網路號,然後其中1千多萬的ip地址就由你自己分配了,最多也就只能分配127個這樣的網路

      B類:網路號、主機號16位,就能有65535個網路號和65535個主機號了。

      C類:網路號有24位,也就能夠分配1000多萬個網路,但是主機號只有8位,也就是隻能夠自己分配254臺主機最多

      D類:用於多播,多播後面講

      E類:留著以後用

      這就是我們老早以前所使用的ip地址,就是這樣分的,這樣看起來很合理啊,你看B類中,有那麼多種,肯定夠分了把,但是會暴露出一個問題就是,C類地址只能分配254臺主機,現在中小型網路那麼多,度超過了254臺電腦,如果A公司有1000臺電腦,那他肯定要去分配B類地址,就造成了幾萬個的ip地址浪費了。這顯然不是很合理。

 

      劃分子網 = <網路號>+<子網號>+<主機號>

      這是ip地址分類的第二大步,中間加了一個子網號,這樣就加大了對上面的A類和B類地址的使用率。也就減少了A類和B類地址的浪費,但是也有問題就是C類地址不管怎麼劃分,他所容納的主機太小了,隨著網路的擴增,人人度使用電腦,那麼A類和B類遲早度會用光,所以就用到了我們現在的IP地址

 

      無分類編址 = <網路字首>+<主機號>   這個就是我們現在用的ip地址的演算法。

      這個一看,跟第一種分類編址一樣呀,其實很大的不同就在於分類編址的網路號不能變,是固定長度,而無分類編址通過網路字首可變化,就能根據你需要多少個主機號來自由給你分配網路字首了。

      網路字首:也就是用不定長的一連串1來表示ip地址的網路號。什麼意思呢?

          網路字首:255.0.0.0  ip地址:192.168.1.1  那麼該ip地址的前8位就屬於網路號。

          網路字首:255.224.0.0 ip地址:192.255.1.1 因為255是8個1,224是111 00000 ,所以前11位表示網路號,也就是這個ip地址是處於192.224.0.0這個網路中,在這個網路中,能包含21個1轉換為10進位制這麼多的主機。

        這個網路字首我們也稱子網掩碼,所以現在知道ip地址和我們的子網掩碼什麼意思了嗎。

      例如:已知ip地址141.14.72.24,所在網路的子網掩碼是255.255.192.0,試求其網路地址?

        子網掩碼:255.255.192.0      11111111,11111111,11000000,00000000

        ip地址:141.14.72.24           10001101,00001110,01001000,00011000

        所以根據子網掩碼知道ip地址的前18位為網路號,網路地址就為:10001101.00001110.01000000.00000000 轉換為10進位制就是141.14.64.0, 能夠存納14位1也就是16383臺主機。(別問我怎麼算的,肯定拿二進位制轉換器啊,不可能自己手算把,哈哈,二進位制轉10進位制這麼多怎麼手算呢,記住特殊的,8個1就是255)

 

      ip地址和MAC地址的區別?

        mac地址:實體地址

        ip地址:網路中的地址

          這兩者的關係是什麼呢?在網路中我們通過主機的ip地址,先找到他的網路地址,到達了網路地址後,然後通過該網路中的老大(路由器)來分析一下這個ip地址是你網路中的哪個主機,這時,老大(路由器)就通過該目標ip地址改到對應主機的mac地址,既然知道了mac地址,就能找到該計算機了。就好比什麼呢。路由器是每次分配給你的ip地址不一樣,但是你的mac地址肯定不會變,所以就根據ip地址找到你的mac地址。但是怎麼找到的呢?就要通過網路層中的ARP(地址解析協議)協議了。

        

      知道了基礎的知識後,現在來講解網路層的幾個協議

           

      RARP:逆地址解析協議(現在度不單獨講這個了,所以我在圖中畫在紅色圓圈內部,因為RARP已經被DHCP協議給包含了,DHCP協議在後面會講解到),所以我們下面講的就4個協議。

 

二、ARP協議

       地址解析協議:通過ip地址來解析主機的mac地址,是怎麼個過程呢,拿區域網來說,一個區域網中有很多主機,主機A想和區域網中的主機B通話,但是隻知道對方的ip地址,所以他就通過發廣播,給區域網中所有的主機,問這個ip地址是誰,主機B收到了這個資訊,通過網路介面卡(網路卡)就發現自己是這個ip地址,然後就把自己的mac地址發給源主機,這樣就知道了mac地址,就能夠通訊了。

      類似的,在跨網路中就不是直接發廣播了,先通過ip地址找到對應的網路地址,如何找到的對應的網路地址呢,通過路由器,每個路由器度有三層。網路層、鏈路層、物理層,也就是說最高能夠識別網路層中的東西來,那麼路由器也就有ARP協議了,每個路由器度能識別出目標ip地址在哪個路由器上,這其中涉及到了很多演算法,我們這裡不做更多的解釋,簡單來說,路由器能根據目標ip地址找到下一跳路由器的mac地址,然後一步一步跳下去,直到找到目標ip地址的網路地址的路由器,然後通過該路由器來找到目標ip地址的mac地址,這樣就能夠找到目標主機了。這就是ARP協議。

      傳送方是主機,要把IP資料包傳送到本網路上的另一個主機。這時用 ARP 找到目的主機的硬體地址。
      傳送方是主機,要把 IP 資料包傳送到另一個網路上的一個主機。這時用 ARP 找到本網路上的一個路由器的硬體地址。剩下的工作由這個路由器來完成。
      傳送方是路由器,要把 IP 資料包轉發到本網路上的一個主機。這時用 ARP 找到目的主機的硬體地址。
      傳送方是路由器,要把 IP 資料包轉發到另一個網路上的一個主機。這時用 ARP 找到本網路上的一個路由器的硬體地址。剩下的工作由這個路由器來完成。   

 

      

三、IP協議

       IP協議通過看一下IP資料包(報)的格式就知道IP協議是幹嘛的了,就是來規定資料包的格式,以及定義的功能

                 

            固定部分:20個位元組,一行是4個位元組,有5行,自己看清楚

          版本:佔4位,IP協議的版本,通訊雙方的IP協議版本要一致,普遍用IPv4,以後可能會用IPv6.

          首部長度:佔4位,可表示的最大十進位制為15,單位是32位字(4個位元組),表示首部最長為60個位元組,也就是說除去固定部分的20個位元組,可選欄位和填充最多能是40個位元組。

          區分服務:佔8位,1個位元組。有些要傳輸的資料要立馬傳達到對面,比如視訊,語音這樣的,不能跟郵件慢慢吞吞的達到對方一樣,需要立馬送達,這就是為什麼需要這個區分服務了

          總長度:佔16位,2個位元組。佔首部+資料部分 的總長度是多少。資料幀最長不能超過1500個位元組,資料包就不能一次性發太大,如果發的太大就要選擇分片處理了。

            標識:佔16位,2個位元組,一個計數器,每產生一個資料包,計數器就加1,當資料包被分片時,下面將會說到分片問題,所有分片後的資料包的標識度一樣。這樣相同的標識的資料包片就能夠重新組合到一起

          標誌:佔3位,第一位暫時沒意義,第二位DF:不能分片的意思,為1時,不能分片,為0就可以分片  第三位MF 還有分片的意思,為0代表這是若干資料包中的最後一片

          片偏移:佔13位,在較長的分組在分片後,某片在原分組中的相對位置,幾個例子,1111,1111,1111,1111 這16位,分成4個資料包分片來發,第一個資料包分片的片偏移為1,第二個為5,第三個為9,第四個為13,就是這個意思,片偏移以8個位元組為偏移單位,也就是說,每個分片的長度一定是8位元組的整數倍,上面是以位來舉例說明問題,實際上單位是8個位元組為單位。

          生存時間:也就是ping命令中顯示的TTL欄位,跳數限制,每經過一個路由器,就減1,當跳到0後,就丟棄該資料包。window系統的起始TTL為32、Linux64、xp:128

          協議:佔8位,資料包中資料部分使用的是什麼協議,方便目的主機的IP層知道講資料部分上交給哪個處理。(也就是下一章要將的TCP還是UDP協議)

          首部檢驗和:佔16位。這個欄位只檢驗資料包的首部,但不包括資料部分。這是因為資料包每經過一個路由器,路由器都要重新計算一下首部檢驗和(一些欄位,如生存時間、標誌、片偏移等都可能發生變化)。不檢驗資料部分可減少計算的工作量。

          源地址:佔32為,也就是源IP地址

          目標地址:佔32位,也是IP地址

          可選部分:為了使整個資料包為整數個位元組而設定的。

        

 

四、ICMP協議

      這個比較簡單,就兩部分ICMP差錯報告報文、ICMP詢問報文   這個挺使用的,比如我們經常用來測試網路連線暢通的ping命令等

        ICMP差錯報告報文:檢測在傳送資料的過程中,發生的錯誤,如果發生了錯誤,會通過該協議返回給源主機一個帶有錯誤原因的資料包

            終點不可達:傳送資料後,路由器或主機不能完成交付資料包時,就會往源主機傳送終點不可達報文

            源點抑制:當路由器或主機由於網路擁塞而丟棄資料包時,返回一個源點抑制報文

            超時:

            引數問題,在ip資料包中的首部有的欄位不正確時,丟棄該報,返回引數問題報文

            改變路由(重定向):路由器把改變路由報文傳送給主機,讓主機下次直接經過改變後的路由器。

        ICMP詢問報文:

            回送請求和回答:主機向特定目標發出詢問,收到此報文必須返回一個ICMP回送回答報文。用於測試目的站是否可達。

             

            時間戳請求和回答:請某個路由器或主機回答當前的日期和時間,用於進行時鐘的同步和測量時間。

五、IGMP協議

      用於多播,解釋一下多播是什麼把。

        廣播:老師在臺上講課,你們能隨時看到老師的電腦螢幕,因為採用的廣播,每個人度能接受到老師螢幕上所有的資料包

        多播:在一個區域網中,有三個多播組,A、B、C,A在放java視訊,B在放C++視訊,C在放娛樂視訊,如果你想看Java視訊,那麼你就調到A這個多播組中學習java視訊,學習累了,你就可以換到C這個多播組中看看娛樂節目,這就是多播的意思,相對廣播來說,自己需要什麼就調什麼,而不是跟廣播一樣,被動接受,他播到哪,就只能看到哪,多播能自由控制速度。

        單播:50個人想看視訊,就得傳送50個資料包。多播的話就發一個,然後通過路由器轉發50分給不同的人,

      

 

六、總結

 

          

        注意:每個路由器度有一個路由表,並且主機也有記錄ip地址和對應mac地址的功能。並不是每次通訊度需要發廣播詢問。

     問題一:     分析從主機A找到主機B的過程?

          1、A先在自己的網路中傳送廣播,通過ARP協議。問所有的主機,誰知道10.0.0.3這個ip地址的主機是誰,同時把自己的主機ip地址和mac地址一起傳送,主機B發現自己是10.0.03這個ip地址,就把自己的mac地址發回去

          2、主機A發現有人迴應,就知道在自己本網路中,然後就找到了目標主機,開始通訊

 

     問題二:分析從主機A找到主機E的過程

          1、主機A先發廣播看自己本網路沒有該主機,沒有,然後就給ip地址為10.0.0.1這個路由器F1發訊號獲得路由器的mac地址,然後給他發訊號叫該路由器F1幫我們查詢ip地址為12.0.0.3的主機。這個路由器的ip地址就閘道器,所以每臺計算機上度要有三個東西,ip地址,子網掩碼,閘道器。 

          2、路由器因為知道所有的網路在哪裡,通過子網掩碼和ip地址,就能夠算出該ip地址在哪一個網段中,路由器就一跳一跳的經過路由器,知道找到對應網段的路由器F2

          3、找到F2後,F2就以同樣的方式通過ip地址找到對應的mac地址,就這樣找到了。

        省略了路由器如何找的這一步,這個可以自己看書,其中有很多中方式,很多種演算法,我們就知道我們給ip地址和子網掩碼給路由器,路由器就知道下一跳給誰,知道找到對應網段

 

      問題三:分析從主機A到主機E資料的形式。

          

        傳輸層(還沒講):講各個資料段劃分序號

        網路層:加上ip地址

        資料鏈路層:加上mac地址和CRC檢測的FCS

        物理層:轉化為位元流傳輸

        集線器:只認識物理層,用來轉發位元流

        交換機:能認識資料鏈路層,所以交換機有mac地址表,能夠記錄各種mac地址,下一次就能選擇性的轉發資料了

        路由器,能認識網路層,有路由表,所以能夠通過ip地址找到對應網段。

相關文章