這是關於網絡系列的第一篇文章,接下來會有更多精彩內容.敬請期待! 讓咱們一塊兒乘風破浪!bash
網絡是咱們工程師的基礎技能之一, 畢竟沒有網絡咱們什麼也幹不了! 從各大公司的招聘要求上看,網絡也是重點的考覈部分. 今天就和你們一塊兒複習下(還)大學裏的課程(欠下的債)! TCP/IP協議簇的IP協議.網絡
網絡的設計大佬們想出了分層的設計,將各個功能分開,交付給不一樣的層,這樣的好處是便於更新和維護(IPv6的到來並無使整個網絡從新設計),也便於咱們的學習和理解.下面是各個版本的網絡體系的結構圖: ide
讓咱們明確下各層的工做職責(以五層協議爲例):每一層將數據封裝成本身能理解的數據格式,交付給下一層,下一層將收到的做爲本身的數據再次添加本層的必要數據,向下交付,直到鏈路層,傳遞到目的地後,每層再將該層的必要數據去掉,交付給上層.以下圖:學習
在理解了網絡模型和各層直接的配合以後,下面進入今天的正題,網際協議(IP).測試
該節主要理解IP協議給咱們提供的功能有哪些,說白了就是它能幹嗎.spa
任何一個協議均可以由語法,語義和同步三部分組成.設計
也就是定義了使用IP協議進行交流的法則.3d
IPv4是IP協議的第4個版本,就是咱們如今使用的.下面從多個方面瞭解下該版本.code
網絡上的主機都須要一個IP地址,這樣才能知道彼此的位置.IPv4地址由32bit構成,常使用點分十進制表示(192.168.1.1)
.cdn
IP地址的分類就是把全部IP劃分爲若干類別, 每一類都由固定長度的字段組成.分別爲網絡號
和主機號
.下面是各種地址組成示意圖:
A類地址,8位網絡號,第一位固定爲0
,可用的網絡號只有126個(2^7-2),網絡號從0到127. 減去2是由於:IP地址全爲0表示"本網絡",保留; 網絡號爲127
做爲軟件迴環測試
使用, 若主機發出目的地爲127.0.0.1
的數據時,該數據不會向任何網絡上的主機發送.也就是說127
開頭的地址不能使用.
對於A類地址中的每個網絡號,對應的主機號有(2^24-2)個: 主機號全0表示,其網絡號對應的網絡地址, 全1表示全部主機
的意思.
B類地址網絡號爲16位,但前面2位以固定爲1 0
.不管怎麼取值,沒法出現全0或全1的狀況.128.0.0.0
的網絡是不使用的,實際使用的最小B類網絡地址爲128.1.0.0
.因此B類的網絡地址有(2^14-1)個.
C類的地址有24位的網絡號,最前面的3位固定爲1 1 0
.192.0.0.0
的網絡地址也是不使用的,最小的C類地址爲192.0.1.0
總結以下:
網絡類別 | 網絡數量 | 第一個可使用的網絡號 | 最後一個可使用的網絡號 |
---|---|---|---|
A | 126(2^7-2) | 1 | 126 |
B | 16383(2^14-1) | 128.1 | 191.255 |
C | 2097151(2^21-1) | 192.0.1 | 223.255.255 |
分類的好處:
先看下IP數據報的基本格式:
能夠看到IP數據報包含了首部和數據部分. 其中首部包含固定的20字節和可變的部分. 下面是各部分的解釋:版本,佔4位,IP協議的版本號,通訊雙方須要相同.
首部長度,佔4位, 單位4字節
.最大能表示(2^4-1) * 4 = 60
字節.當IP分組的首部長度不是4的整數倍時,須要使用填充字段填充.
區分服務,佔8位, 表示服務類型,未使用.
總長度, 佔16位,表示首部和數據部分的總長度(單位字節).所以數據報的最大總長度爲(2^16-1 = 65535)字節.
標識(identification), 佔16位.當數據報長度超過下層的MTU時,須要分片, 被分片的數據報的標識同樣,這樣能夠進行重組.
標誌(Flag), 佔3位, 目前只有2位有意義
後面還有分片
. MF = 0 表示分片中的最後一個.片偏移, 佔13位.較長的分組在分片後, 某片在原分組的相對位置.必須是8字節的整數倍.
生存時間, 佔8位, Time To Live(TTL),開始指生存的秒數,後來變爲通過路由的跳數,每通過一個路由,TTL減少1,當爲0時,丟棄該數據.顯然,最大跳數爲255, 爲1時就只能在局域網中傳播了.
協議, 佔8位.支出該數據報的數據是使用何種協議, 以便目的主機IP層知道將數據交付給哪一個協議處理.
經常使用的協議及對應數值:
議名稱 | ICMP | IGMP | IP | TCP | EGP | IGP | UDP | IPv6 | ESP | OSPF |
---|---|---|---|---|---|---|---|---|---|---|
議字段值 | 1 | 2 | 4 | 6 | 8 | 9 | 17 | 41 | 50 | 89 |
首部校驗和, 佔16位.數據報的首部校驗和,不包括數據部分.
源地址, 目的地址, 各佔32位
IPv6的出現是解決IPv4資源枯竭的問題.其仍然支持無鏈接的傳送, 但傳送的是PDU分組,而不是IPv4的數據報.
IPv6的地址是128bit,在可預見的將來是夠用的.但和IPv4版本並不兼容, 若使用IPv4版本的主機A和使用IPv6版本的主機B之間通訊是須要特殊處理的,在後面會介紹方法.
IPv6的地址採用冒號十六進制記法
, 8組4個16進制數字,中間使用冒號隔開.例如:
6845:8C64:FFFF:FFFF:0:1180:9000:FFFF
複製代碼
若一組中全是0,能夠省略三個.
若存在連續多組0,可使用冒號取代,但只能壓縮一次
FF05:0:0:0:0:0:0:B3 能夠壓縮爲 FF05::B3
1090:0:0:0:8:800:200C:417A 能夠壓縮爲 1090::8:800:200C:417A
全零可記爲 ::
複製代碼
最後的2組可使用IPv4的點分十進制表示
0:0:0:0:0:0:128.10.2.1 可表示爲 ::128.10.2.1
複製代碼
IPv6數據報由兩大部分組成, 基本首部
和 有效載荷
.有效載荷運行有0個或多個擴展首部.
網絡如此龐大,從IPv4向IPv6的變換不可能一蹴而就.若要在兩個版本的協議下通訊,有下面的2個方法
簡單的說就是一個主機可以理解兩個版本的內容,這樣主機也要有2個版本對應的IP地址.具備雙協議棧的主機, 能夠經過DNS系統知道目的主機使用的協議版本.
下面是兩臺使用IPv6的主機通訊示意圖,它們之間須要經過IPv4網絡, 在必要的時候通過雙協議棧的主機進行協議的轉換,固然轉換的時候有些信息可能丟失,這也是不可避免的.
隧道技術的原理是,在IPv6的數據須要進入IPv4網絡時,將IPv6的數據報(準確的說是PDU)當成IPv4數據報的數據部分,使用IPv4版本傳輸,在離開IPv4網絡時在此組裝成IPv6的數據,發往目的地.下面是一個示意圖:
關於IP協議,還有不少能夠談的地方, 這裏就再也不深刻了.讀完但願你能有一個"明鏡同樣"的感受.咱們下篇再見.