007-IP報文協議 002-IP地址及分類以及子網掩碼

1、概述

  IP協議是將多個包交換網絡鏈接起來,它在源地址和目的地址之間傳送一種稱之爲數據包的東西,它還提供對數據大小的從新組裝功能,以適應不一樣網絡對包大小的要求。
  IP不提供可靠的傳輸服務,它不提供端到端的或(路由)結點到(路由)結點的確認,對數據沒有差錯控制,它只使用報頭的校驗碼,它不提供重發和流量控制。若是出錯能夠經過 ICMP報告,ICMP在IP模塊中實現。

  IP協議是TCP/IP協議的核心,全部的TCP,UDP,IMCP,IGMP的數據都以IP數據格式傳輸。要注意的是,IP不是可靠的協議,這是說,IP協議沒有提供一種數據未傳達之後的處理機制,這被認爲是上層協議:TCP或UDP要作的事情。html

  Internet上鍊接的全部計算機,從大型機到微型計算機都是以獨立的身份出現,咱們稱它爲主機。爲了實現各主機間的通訊,每臺主機都必須有一個惟一的網絡地址。就好像每個住宅都有惟一的門牌同樣,纔不至於在傳輸資料時出現混亂。緩存

  Internet的網絡地址是指連入Internet網絡的計算機的地址編號。因此,在Internet網絡中,網絡地址惟一地標識一臺計算機。網絡

  nternet是由無數臺計算機互相鏈接而成的。而咱們要確認網絡上的每一臺計算機,靠的就是能惟一標識該計算機的網絡地址,這個地址就叫作IP(Internet Protocol的簡寫)地址,即用Internet協議語言表示的地址。併發

1.一、IP協議功能

(1)尋址和路由;(根據對方的IP地址,尋找最佳路徑傳輸信息);post

(2)傳遞服務:① 不可靠(IP協議只是盡本身最大努力去傳輸數據包),可靠性由上層協議提供(TCP協議); ② 無鏈接(事先不創建會話),不維護任何關於後續數據報的信息;大數據

(3)數據包的分片和重組。url

1.二、IP地址分類以及子網掩碼htm

  關於IP的介紹:002-IP地址及分類以及子網掩碼blog

2、IP協議報文

2.一、IP協議頭

  

  

2.二、解釋說明

  版本號:4個bit,用來標識IP版本號。這個4位字段的值設置爲二進制的0100表示IPv4,設置爲0110表示IPv6。目前使用的IP協議版本號是4。接口

  首部長度:4個bit。標識包括選項在內的IP頭部字段的長度。

  服務類型:8個bit。服務類型字段被劃分紅兩個子字段:3bit的優先級字段和4bit TOS字段,最後一位置爲0。4bit的TOS分別表明:最小時延,最大吞吐量,最高可靠性和最小花費。4bit中只能將其中一個bit位置1。若是4個bit均爲0,則表明通常服務。

  總長度:16個bit。接收者用IP數據報總長度減去IP報頭長度就能夠肯定數據包數據有效負荷的大小。IP數據報最長可達65535字節。

  標識:16個bit。惟一的標識主機發送的每一份數據報。接收方根據分片中的標識字段是否相同來判斷這些分片是不是同一個數據報的分片,從而進行分片的重組。一般每發送一份報文它的值就會加1。

  標誌:3個bit。用於標識數據報是否分片。第1位沒有使用,第2位是不分段(DF)位。當DF位被設置爲1時,表示路由器不能對數據包進行分段處理。若是數據包因爲不能分段而未能被轉發,那麼路由器將丟棄該數據包並向源發送ICMP不可達。第3位是分段(MF)位。當路由器對數據包進行分段時,除了最後一個分段的MF位被設置爲0外,其餘的分段的MF位均設置爲1,以便接收者直到收到MF位爲0的分片爲止。

  片偏移:13個bit。在接收方進行數據報重組時用來標識分片的順序。用於指明分段起始點相對於報頭起始點的偏移量。因爲分段到達時可能錯序,因此位偏移字段可使接收者按照正確的順序重組數據包。當數據包的長度超過它所要去的那個數據鏈路的MTU時,路由器要將它分片。數據包中的數據將被分紅小片,每一片被封裝在獨立的數據包中。接收端使用標識符,分段偏移以及標記域的MF位來進行重組。

  生存時間:8個bit。TTL域防止丟失的數據包在無休止的傳播。該域包含一個8位整數,此數由產生數據包的主機設定。TTL值設置了數據報能夠通過的最多的路由器數。TTL的初始值由源主機設置(一般爲32或64),每通過一個處理它的路由器,TTL值減1。若是一臺路由器將TTL減至0,它將丟棄該數據包併發送一個ICMP超時消息給數據包的源地址。

  協議:8個bit。用來標識是哪一個協議向IP傳送數據。ICMP爲1,IGMP爲2,TCP爲6,UDP爲17,GRE爲47,ESP爲50。

  首部檢驗和:根據IP首部計算的校驗和碼。

  源地址:IP報文發送端的IP地址

  目的地址:IP報文接收端的IP地址

  選項:是數據報中的一個可變長的可選信息。選項字段以32bit爲界,不足時插入值爲0的填充字節。保證IP首部始終是32bit的整數倍。

能夠經過IP報文抓包分析

2.三、IP分片偏移重組

  當一個IP數據報被分片後,直到它到達最終目的地纔會被重組。(由於同一個數據報的不一樣分片,可能經由不一樣的路徑到達相同的最終目的地,因此中途有可能沒法重組)

  ip分組後,每個分片都是一個完整的ip數據報。其中首部裏的「總長度」字段,是該分片的總長度。

  分片技術與ip首部中如下三個字段有關:標識、標誌、片偏移

標識符:

  主機將數據報分片後,在發送前,會給每個分片數據報一個ID值,放在16位的標識符字段中。

  這個ID值能夠用來識別哪些分片是屬於同一個數據報的,方便重組。 

標誌:

  標誌字段在IP報頭中佔3位,

  第1位做爲保留,置0;

  第2位,分段,有兩個不一樣的取值:該位置0,表示能夠分段;該位置1,表示不能分段;

  第3位,更多分段,一樣有兩個取值:該位置0,表示這是數據流中的最後一個分段,該位置1,表示數據流未完,後續還有分段,當一個數據報沒有分段時,則該位置0,表示這是惟一的一個分段。

  當目的主機接收到一個IP數據報時,會首先查看該數據報的標識符,而且檢查標誌位的第3位是置0或置1,以肯定是否還有更多的分段,若是還有後續報文,接收主機則將接收到的報文放在緩存直到接收完全部具備相同標識符的數據報,而後再進行重組。

偏移量:

  就像以前說過的,各個IP分片數據報在發送到目的主機時多是無序的,因此就須要「偏移量」字段來指明「該分片在原數據報中的位置順序」。

  發送主機對第一個數據報的偏移量置爲0,然後續的分片數據報的偏移量則以網絡的MTU大小賦值。

  如:

  假設:網絡接口MTU大小爲1400字節,要傳輸的數據報爲3800字節。

  那麼,將要傳輸的數據報分爲3片便可(3800=1400+1400+1000) 

偏移量的計算方法爲:已經「裝載」好的分片字節數/8(偏移量就是某片在原分組的相對位置,因此8個字節做爲偏移單位。)

  分片1偏移量爲:0(0=0/8,由於該偏移量以前沒有裝載過任何分片,天然也就是0除以8了)

  分片2偏移量爲:175(175=1400/8,因爲分片1已經裝載好了1400字節,因此此分片的位置就在1400字節以後,也就用1400除以8了)

  分片3偏移量爲:350(350=2800/8,目前已經裝好了兩個分片也就是2800字節已經裝載完了,那麼分片3天然就跟在2800字節以後了,也就是用2800除以8)

2.3.一、分片重組緣由

  鏈路層一般對可傳輸的每個幀的最大長度都有上限。爲了使超過此上限的ip數據報可以正常傳輸,IP引入了「分片」和「重組」。

  當IP層接收到要發送的IP數據報時,經過查找「轉發表」,會判斷該數據報應該從那個本地「接口」發送以及MTU(最大傳輸單元,指一種通訊協議的某一層上面所能經過的最大數據包大小(以字節爲單位))是多少。

  不一樣的網絡類型,其MTU都不相同,如以太網中MTU爲1518字節,FDDI爲4500字節。若是IP數據報超過MTU值,則進行分片。IPv4的分片能夠在原始發送方主機和端到端路徑上的任何中間路由器上進行,即:一個分片在到達接收主機的路徑中,還可能被繼續分片。(而IPv6只容許源主機進行分片)

  以太網的MTU是1500。若是IP層有數據包要傳,並且數據包的長度超過了MTU,那麼IP層就要對數據包進行分片(fragmentation)操做,使每一片的長度都小於或等於MTU。咱們假設要傳輸一個UDP數據包,以太網的MTU爲1500字節,通常IP首部爲20字節,UDP首部爲8字節,數據的淨荷(payload)部分預留是1500-20-8=1472字節。若是數據部分大於1472字節,就會出現分片現象。

2.3.二、不一樣傳輸層協議的分片

(1)TCP協議

  對於TCP協議來講儘可能避免分片,由於當在IP層進行了分片後,若是其中的某片數據丟失,則需對整個數據報進行重傳。由於IP層自己沒有超時重傳機制,當來自TCP報文段的某一片丟失後,TCP在超時後重發整個TCP報文段,該報文段對應於一份IP數據報,沒有辦法只重傳數據報中的一個數據報片。

  TCP協議能夠避免分片,避免的機制是首先,TCP在創建鏈接時會進行3次握手,而在這3次握手中,客戶端和服務端一般會協商一個值,那就是MSS(最長報文大小),用來表示本段所能接收的最大長度的報文段。MSS=MTU-TCP首部大小-IP首部大小,MTU值經過查詢鏈路層得知。

  當兩端確認好MSS後進行通訊,TCP層往IP層傳輸數據時,若是TCP層緩衝區的大小大於MSS,那麼TCP層都會將其中的數據分組進行傳輸,這樣就避免了在IP層進行分片。

(2)UDP協議

  對於UDP而言,因爲UDP是不須要保證可靠性的,沒有超時和重傳機制,這使得UDP很容易致使IP分片。

  UDP協議分片會根據IP報文字段中的標識字段、標誌字段、片偏移字段來解決。

  

  對於每份IP數據報來講,其16位標識字段都包含一個惟一值。在數據報被分片時,這個值同時被複制到每一個片中。用來識別分片的數據是否爲同一個數據報文。

  在IP首部中,咱們看到有一個佔了3位的標誌字段,其中第1位是R做爲保留字段未用;第2位分段是DF用來表示一個數據報是否容許在IP層被分片,DF=0時容許分片,DF=1時不容許分片;而第3位是MF更多分片字段,則是當數據報被分片時,讓接收端知道在何時完成全部的分片組裝,除了最後一片外,其餘每一個組成數據報的片都要把該比特置1。

  而若是將其中的分段標誌比特位置1,表示不容許IP層對數據報進行分片。例如當路由器收到一份須要分片的數據報,而在IP首部又設置了不分片(DF)的標誌比特,路由器會丟棄數據報併發送一個ICMP差錯報文(「須要進行分片但設置了不分片比特」)。

  IP首部的13位片偏移字段表示IP分片再整個數據流中的位置,第一個數據報分片的偏移量置爲0,然後續的分片偏移量則是根據網絡的MTU大小設置,且必須爲8的整數倍。

2.3.三、分片字段

  

  上圖中咱們看到把一個報文長度爲3800字節的報文分片爲三個。他們每個分片都會含有一個標識(IP地址 + 標識),到達目的地要對其全部的分片進行從新組裝;

  片偏移計算過程;首部分大致的內容是同樣,由於都屬於同一個數據報文

2.3.四、IP報文重組

  IP報文分片後進行重組,只能在目標主機進行重組。

  IP報文分片重組時,採用了一組重組定時器,片重組的控制主要根據數據首部中的標識、標誌、偏移字段進行重組。

  分片重組策略以下:

  (1)第一個分片的偏移值時0

  (2)將第一個分片攜帶的數據長度除以8,結果就是第二個分片的偏移值

  (3)將第一個和第二個分片攜帶數據的總長度除以8,結果就是第二個分片的偏移值

  (4)繼續以上過程。直到以後分片的MF標誌位爲0

2.四、IP報文校驗

2.4.一、IP報文校驗和計算方式

(1)爲了計算一份數據報的IP檢驗和,首先須要把檢驗和字段置爲0

(2)對首部中每一個16bit進行二進制反碼求和(整個首部當作是由一串16bit的字組成)

PS:路由器收到IP報文,而後轉發以後,是須要對TTL(Time to Live)字段減一,那麼這樣的話IP報文校驗和數值也須要進行相應改變

2.4.二、IP報文不對數據校驗緣由

上層傳輸層是端到端的協議,進行端到端的校驗比進行點到點的校驗開銷小。

2.4.三、IP報文對IP首部校驗緣由

IP首部屬於IP層協議的內容,上層協議沒法處理。

IP首部的部分字段在點到點的傳遞過程當中是不斷變化的,只能在每一箇中間點從新造成校驗數據,在相鄰點完成校驗。

  

 

  

 

 

 

 

 

 

 

 

 

方式

相關文章
相關標籤/搜索