前言java
前面給你們介紹了計算機網絡的基本概述,物理層和數據鏈路層。這一篇給你們介紹面試中常常會被問到的網絡層。在介紹以前咱們回顧一下以前學習的知識!面試
CP/IP協議棧:物理層、鏈路層、網絡層、傳輸層、應用層(會話層+表示層+應用層)算法
物理層:經過比特流在線路中傳輸來完成咱們傳輸數據的目的,傳輸的方式不少種,傳輸的介質也不少中,光纖等數組
鏈路層:數據幀,在數據包(報)上加mac地址造成數據幀,其中的CRC檢測原理用來檢測數據的完整性,這一層用到的協議有PPP(點到點協議)、例如家中的撥號上網,瀏覽器
CSMA/CD協議(廣播協議),在局域網中用的不少。其中會發生一系列的問題,和解決問題的辦法。安全
網絡層:數據包(報),加上源ip地址和目標ip地址了。這一層的協議有四種,ARP(地址解析協議)、RARP(逆地址解析協議)、ICMP(網際控制報文協議)、IGMP(網際組管理協議)。網絡
這四種協議只是和IP協議配套使用,。在一章還能學到的是數據包的結構是怎麼樣的。什麼是ip地址,爲何須要ip地址,怎麼分配和區分ip地址的,這這一節咱們度會講解到。學習
傳輸層:這裏會講解到端口。常見的80端口,咱們學習javaWeb時,使用Tomcat中,看到的是8080端口,瀏覽器使用的是80端口,這一節就會講到端口是幹嗎用的。測試
百度定義:
功能目的:
不就是一連串數組加.組成的嗎,好比咱們經常設置路由器時登陸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地址確定也得這樣分,先找到大的,而後慢慢一層層找下去。
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.01
因此根據子網掩碼知道ip地址的前18位爲網絡號,網絡地址就爲:10001101.00001110.01000000.00000000 轉換爲10進制就是141.14.64.0, 可以存納14位1也就是16383臺主機。
(別問我怎麼算的,確定拿二進制轉換器啊,不可能本身手算把,哈哈,二進制轉10進制這麼多怎麼手算呢,記住特殊的,8個1就是255)
1)mac地址概述
百度中定義:
2)mac地址的做用
IP地址和MAC地址相同點是它們都惟一,不一樣的特色主要有:
一是:對於網絡上的某一設備,如一臺計算機或一臺路由器,其IP地址是基於網絡拓撲設計出的,同一臺設備或計算機上,改動IP地址是很容易的(但必須惟一),而MAC則是生產廠商燒錄好的,
通常不能改動。咱們能夠根據須要給一臺主機指定任意的IP地址,如咱們能夠給局域網上的某臺計算機分配IP地址爲192.168.0.112 ,也能夠將它改爲192.168.0.200。
而任一網絡設備(如網卡,路由器)一旦生產出來之後,其MAC地址不可由本地鏈接內的配置進行修改。若是一個計算機的網卡壞了,在更換網卡以後,該計算機的MAC地址就變了。
二是:長度不一樣。IP地址爲32位,MAC地址爲48位。
三是:分配依據不一樣。IP地址的分配是基於網絡拓撲,MAC地址的分配是基於製造商。
四是:尋址協議層不一樣。IP地址應用於OSI第三層,即網絡層,而MAC地址應用在OSI第二層,即數據鏈路層。 數據鏈路層協議可使數據從一個節點傳遞到相同鏈路的另外一個節點上(經過MAC地址),
而網絡層協議使數據能夠從一個網絡傳遞到另外一個網絡上(ARP根據目的IP地址,找到中間節點的MAC地址,經過中間節點傳送,從而最終到達目的網絡)。
4)二者關係
這二者的關係是什麼呢?在網絡中咱們經過主機的ip地址,先找到他的網絡地址,到達了網絡地址後,而後經過該網絡中的老大(路由器)來分析一下這個ip地址是你網路中的哪一個主機,
這時,老大(路由器)就經過該目標ip地址改到對應主機的mac地址,既然知道了mac地址,就能找到該計算機了。就比如什麼呢。路由器是每次分配給你的ip地址不同,可是你的mac地址確定不會變,
因此就根據ip地址找到你的mac地址。可是怎麼找到的呢?就要經過網絡層中的ARP(地址解析協議)協議了。
知道了基礎的知識後,如今來說解網絡層的幾個協議:
RARP:逆地址解析協議(如今不單獨講這個了,因此我在圖中畫在紅色圓圈內部,由於RARP已經被DHCP協議給包含了,DHCP協議在後面會講解到),因此咱們下面講的就4個協議。
百度介紹:
地址解析協議:經過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協議是幹嗎的了,就是來規定數據報的格式,以及定義的功能
1)固定部分:20個字節,一行是4個字節,有5行,本身看清楚
1.1)第一行
版本:佔4位,IP協議的版本,通訊雙方的IP協議版本要一致,廣泛用IPv4,之後可能會用IPv6.
首部長度:佔4位,可表示的最大十進制爲15,單位是32位字(4個字節),表示首部最長爲60個字節,也就是說除去固定部分的20個字節,可選字段和填充最多能是40個字節。
區分服務:佔8位,1個字節。有些要傳輸的數據要立馬傳達到對面,好比視頻,語音這樣的,不能跟郵件慢慢吞吞的達到對方同樣,須要立馬送達,這就是爲何須要這個區分服務了
總長度:佔16位,2個字節。佔首部+數據部分 的總長度是多少。數據幀最長不能超過1500個字節,數據包就不能一次性發太大,若是發的太大就要選擇分片處理了。
1.2)第二行
標識:佔16位,2個字節,一個計數器,每產生一個數據包,計數器就加1,當數據包被分片時,下面將會說到分片問題,全部分片後的數據包的標識度同樣。這樣相同的標識的數據包片就可以從新組合到一塊兒
標誌:佔3位,第一位暫時沒意義,第二位DF:不能分片的意思,爲1時,不能分片,爲0就能夠分片 第三位MF 還有分片的意思,爲0表明這是若干數據包中的最後一片
片偏移:佔13位,在較長的分組在分片後,某片在原分組中的相對位置,幾個例子,1111,1111,1111,1111 這16位,分紅4個數據包分片來發,第一個數據包分片的片偏移爲1,第二個爲5,第三個爲9,
第四個爲13,就是這個意思,片偏移以8個字節爲偏移單位,也就是說,每一個分片的長度必定是8字節的整數倍,上面是以位來舉例說明問題,實際上單位是8個字節爲單位。
1.3)第三行
生存時間:也就是ping命令中顯示的TTL字段,跳數限制,每通過一個路由器,就減1,當跳到0後,就丟棄該數據包。window系統的起始TTL爲3二、Linux6四、xp:128
協議:佔8位,數據包中數據部分使用的是什麼協議,方便目的主機的IP層知道講數據部分上交給哪一個處理。(也就是下一章要將的TCP仍是UDP協議)
首部檢驗和:佔16位。這個字段只檢驗數據報的首部,但不包括數據部分。這是由於數據報每通過一個路由器,路由器都要從新計算一下首部檢驗和(一些字段,如生存時間、標誌、片偏移等均可能發生變化)。
不檢驗數據部分可減小計算的工做量。
1.4)第四行
源地址:佔32爲,也就是源IP地址
1.5)第五行
目標地址:佔32位,也是IP地址
2)可選部分:爲了使整個數據包爲整數個字節而設置的。
這個協議比較簡單,它有兩部分組成:ICMP差錯報告報文、ICMP詢問報文 。這個挺有用的,好比咱們常常用來測試網絡鏈接暢通的ping命令等
檢測在傳送數據的過程當中,發生的錯誤,若是發生了錯誤,會經過該協議返回給源主機一個帶有錯誤緣由的數據包
終點不可達:發送數據後,路由器或主機不能完成交付數據報時,就會往源主機發送終點不可達報文
源點抑制:當路由器或主機因爲網絡擁塞而丟棄數據報時,返回一個源點抑制報文
超時:
參數問題,在ip數據包中的首部有的字段不正確時,丟棄該報,返回參數問題報文
改變路由(重定向):路由器把改變路由報文發送給主機,讓主機下次直接通過改變後的路由器。
回送請求和回答:主機向特定目標發出詢問,收到此報文必須返回一個ICMP回送回答報文。用於測試目的站是否可達。
時間戳請求和回答:請某個路由器或主機回答當前的日期和時間,用於進行時鐘的同步和測量時間。
IGMP協議用於多播,解釋一下多播是什麼把。
廣播:老師在臺上講課,大家能隨時看到老師的電腦屏幕,由於採用的廣播,每一個人度能接受到老師屏幕上全部的數據包
多播:在一個局域網中,有三個多播組,A、B、C,A在放java視頻,B在放C++視頻,C在放娛樂視頻,若是你想看Java視頻,那麼你就調到A這個多播組中學習java視頻,學習累了,
你就能夠換到C這個多播組中看看娛樂節目,這就是多播的意思,相對廣播來講,本身須要什麼就調什麼,而不是跟廣播同樣,被動接受,他播到哪,就只能看到哪,多播能自由控制速度。
單播:50我的想看視頻,就得發送50個數據包。多播的話就發一個,而後經過路由器轉發50分給不一樣的人。
單播: 多播:
注意:每一個路由器度有一個路由表,而且主機也有記錄ip地址和對應mac地址的功能。並非每次通訊度須要發廣播詢問。
1)A先在本身的網絡中發送廣播,經過ARP協議。問全部的主機,誰知道10.0.0.3這個ip地址的主機是誰,同時把本身的主機ip地址和mac地址一塊兒發送,
主機B發現本身是10.0.03這個ip地址,就把本身的mac地址發回去
2)主機A發現有人迴應,就知道在本身本網絡中,而後就找到了目標主機,開始通信
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地址和子網掩碼給路由器,路由器就知道下一跳給誰,知道找到對應網段
傳輸層(還沒講):講各個數據段劃分序號
網絡層:加上ip地址
數據鏈路層:加上mac地址和CRC檢測的FCS
物理層:轉化爲比特流傳輸
集線器:只認識物理層,用來轉發比特流
交換機:能認識數據鏈路層,因此交換機有mac地址表,可以記錄各類mac地址,下一次就能選擇性的轉發數據了
路由器,能認識網絡層,有路由表,因此可以經過ip地址找到對應網段。