Linux(二十八)淺析網絡層協議(IP)

基本概念

主機:配有IP地址,但是不進行路由控制的設備;
路由器:既配有IP地址,又能進行路由控制;
節點:主機和路由器的統稱;

協議頭格式

這裏寫圖片描述

*四位版本號:指定IP協議的版本,對於IPv4來說,就是4。
*四位首部長度:IP頭部的長度是多少個32bit,也就是length*4的字節數,4bit表示最大的數字是15,因此IP頭部最大長度是六十字節。
*八位服務類型:三位有限權字段(已經棄用)四位TOS字段,和一位保留字段(必須置爲0)。四位TOS分別表示:最小延時,最大吞吐量,最高可靠性,最小成本。這四者相互衝突,只能選擇一個,對於ssh/telnet這樣的應用程序,最小延時比較重要;對於ftp這樣的程序,最大吞吐量比較重要。
*十六位總長度:IP數據包整體佔多少個字節。
*十六位表示:唯一的表示主機發送的報文。如果IP報文在數據鏈路層被分片了,那麼每一個片裏面的這個id都是相同的。
*三位標誌字段:第一位保留(保留的意思是現在不用,但是還沒想好說不定以後要用到)。第二位置爲1表示禁止分片,這個時候如果報文長度超過MTU,IP模塊就會弄丟報文,第三位表示“更多分片”,如果分片了的話,最後一個分片置爲1,其他事0。類似於一個結束標誌。
*十三位分片偏移:是分片相對於原始IP報文開始處的偏移,其實就是在表示當前分片在原報文中的那個位置,實際偏移的字節數是這個值*8得到的,因此除了最後一個報文之外,其他報文的長度必須是8的整數倍(否則報文就不連續了)。
*八位生存時間(TTL):數據報到達目的地的最大報文跳數,一般是64。每次經過一個路由,TTL -= 1。一直減到0還沒到達,那麼就丟棄了,這個字段主要是用來防止出現路由循環。
*8位協議:表示上層協議的類型。
*十六位頭部校驗和:使用CRC進行校驗,來鑑別頭部是否損壞。
*三十二位源地址和三十二位目的地址:表示發送端和接收端。
選項字段(不定長,最多四十字節)

網段劃分

IP地址分爲兩部分,網絡號和主機號

*網絡號:保證互相連接的兩個網段具有不同的表示;
*主機號:同一個網段內,主機之間具有相同的網絡號,但是必須具有不同的主機號;

*不同的子網其實就是把網絡號相同的主機放到一起;
*如果在子網中新增一臺主機,則這臺主機的網絡號和這個子網的網絡號一直,但是主機號不能重複。

通過合理的配置主機號和網絡號,就可以保證在相互連接的網絡中,每臺主機的IP地址都不相同。

手動管理子網內的IP是一個相當麻煩的事情,有一種技術叫做DHCP,能夠自動的給子網內新增主機節點分配IP地址,避免了手動管理的不變,一般的路由器都帶有DHCP功能,因此路由器也可以看做一個DHCP服務器。

曾經有一種劃分網絡號和主機號的方案,把所有的IP地址分爲五類:
*A類 0.0.0.0.-127.255.255.255
*B類128.0.0.0-191.255.255.255
*C類192.0.0.0-223.255.255.255
*D類224.0.0.0-239.255.255.255
隨着INERTNET的發展,這種劃分的侷限很快顯現出來,大多數組織都申請B類網絡地址,導致B類地址很快就分配完了,而A類卻浪費了大量的地址;

針對這種情況提出了新的劃分方案,稱爲CIDR
*引入了一個額外的子網掩碼來區分網絡號和主機號;
*子網掩碼也是一個三十二位的正整數,通過一串“0”來結尾;
*將IP地址和子網掩碼進行按位與操作,得到的結果就是網絡號;
*網絡號和主機號的劃分與這個IP地址是A類,B類,C類無關;

特殊的IP地址

*將IP地址中的主機地址全部設爲零,就成了網絡號,代表這個局域網;
*將IP地址中的主機地址全部設爲1,就成爲了廣播地址,用於給同一個鏈路中相互連接的所有主機發送數據包;
127。的IP地址用於本機環回測試,通常是127.0.0.1

IP地址的數量限制

我們知道,IP地址IPv4是一個四字節三十二位的正整數,那麼一共只有2的32次方個IP地址,大概是43億左右。而TCP/IP協議規定,每個主機都需要有一個IP地址。
但是實際上,由於一些特殊的IP地址存在,數量遠不足43億;另外IP地址並非是按照主機臺數來配置的,而是每一個網卡都要配置一個或多個IP地址。

CIDR在一定程度上環節了IP地址不夠用的問題(提高了利用率,減少了浪費,但是IP地址的絕對上限沒有增加),仍然不是很夠用,這個時候有三種方法來解決:

  • 動態分配IP地址:只給接入網絡的設備分配IP地址,因此同一個MAC地址的設備,每次接入互聯網中,得到的IP地址不一定是相同的;
  • NAT技術
  • IPv6:IPv6並不是IPv4的簡單升級版,這是互不相干的兩個協議,彼此並不兼容;IPv6用十六字節128位,來表示一個IP地址,但是目前還沒普及

私有IP和公網IP地址

如果一個組織內部組件局域網,IP地址只用於局域網內的通信,而不直接連到Internet上,理論上使用任意的IP地址都可以,但是RFC1918規定了用於組件局域網的私有IP地址
·10.*,前八位是網絡號,共16777216個地址
·172.16到172.31,前十二位是網絡號,共1048576個地址
·192.168.*,前十六位是網絡號,共65536個地址包含在這個範圍中,都成爲私有IP,其餘的則成爲公網IP

*一個路由器可以配置兩個IP地址,一個是WAN口IP,一個是LAN口IP;
*路由器LAN口連接的主機,都從屬於當前這個路由器的子網中,
*不同的路由器子網IP其實都是一樣的(通常都是192.168.1.1),自網內的主機IP地址是不能重複的,但是子網之間的IP地址就可以重複了
*每一個家用路由器,其實又作爲運營商路由器的子網中的一個節點,這樣的運營商路由器可能會有很多級,最外層的運營商路由器,WAN口IP就是一個公網IP了。
*自網內的主機需要和外網進行通信時,路由器將IP首部中的IP地址進行替換(替換成WAN口IP),這樣主機替換,最終數據包中的IP地址成爲一個公網IP,這種技術成爲NAT(網絡地址轉換)。

路由

路由的過程就是一跳一跳的過程,所謂“一跳”就是數據鏈路層中的一個區間,具體在以太網中指從源MAC地址到目的MAC地址之間的幀傳輸區間

IP數據包的傳輸過程和問路一樣。
*當IP數據包,到達路由器時,路由器會先查看目的IP;
*路由器決定這個數據包是能直接發送給目標主機,還是需要發送給下一個路由器;
*依次反覆,一直到達目標IP地址;
那麼如何判定當前這個數據包該發送到哪裏呢?這個就依靠每個節點內部維護一個路由表;

路由表可以使用route命令查看
如果目的IP命中了路由表,就直接轉發就可以了
路由表中的最後一行,主要由下一條地址和發送接口兩部分組成,當目的地址與路由表中其他行都不匹配是,就按缺省路由條目規定的接口發送下一條地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章