前言
IP相當(dāng)于OSI參考模型的第3層--網(wǎng)絡(luò)層:主要作用是"實現(xiàn)終端節(jié)點之間的通信"又稱"點對點通信"半夷。
IP作為整個TCP/IP中至關(guān)重要的協(xié)議,主要負(fù)責(zé)將數(shù)據(jù)包發(fā)送給最終的目標(biāo)計算機(jī)馒过。因此,IP能夠讓世界上任何兩臺計算機(jī)之間進(jìn)行通信。
數(shù)據(jù)鏈路層的作用在于實現(xiàn)同一種數(shù)據(jù)鏈路下的包傳遞,而網(wǎng)絡(luò)層則可以實現(xiàn)跨越不同數(shù)據(jù)鏈路的包傳遞。
主機(jī):配置有IP地址,但是不進(jìn)行路由控制的設(shè)備。
既配有IP地址又有路由控制能力的設(shè)備叫做"路由器"薄啥。
節(jié)點:主機(jī)和路由器的統(tǒng)稱。
網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層的關(guān)系
- 數(shù)據(jù)鏈路層提供兩個直連設(shè)備之間的通信功能逛尚。
- 網(wǎng)絡(luò)層負(fù)責(zé)沒有直連的兩個網(wǎng)絡(luò)之間進(jìn)行通信傳輸垄惧。
舉個旅行的例子:
如果要去一個地方,計劃先飛機(jī)后火車再公交到達(dá)目的地。我們買好票,又制定一個行程表,幾點幾分去哪里坐車都一目了然绰寞。
機(jī)票和火車票只在特定區(qū)間有效,當(dāng)你換乘不同公司的飛機(jī)或不同區(qū)間的火車時,還要重新購票到逊。
每張票,只能在特定的區(qū)間內(nèi)移動,就如同通信網(wǎng)絡(luò)上的數(shù)據(jù)鏈路。
而這個區(qū)間內(nèi)的出發(fā)地點和目的地點就圖同一個數(shù)據(jù)鏈路的原地址和目標(biāo)地址等首部信息滤钱。
整個過程的行程表的作用就相當(dāng)于網(wǎng)絡(luò)層觉壶。
如果只有行程表,沒有車票,就無法達(dá)成交通工具到達(dá)目的地。反之,如果只有車票,而不知道坐什么車,在哪換乘,恐怕也很難到達(dá)目的地件缸。
與之類似,計算機(jī)網(wǎng)絡(luò)中也需要數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層才能實現(xiàn)向最終目標(biāo)地址的通信铜靶。
IP基礎(chǔ)知識
IP大致分為三大作用模塊,它們是IP尋址、路由(最終節(jié)點為止的轉(zhuǎn)發(fā))以及IP分包與組包他炊。
IP屬于面向無連接
- 為了簡化
- 為了提速
IP地址
為了識別通信終端,數(shù)據(jù)鏈路有MAC地址,網(wǎng)絡(luò)層有IP地址争剿。
IP地址用于在"連接到網(wǎng)絡(luò)中的所有主機(jī)中識別出進(jìn)行通信的目標(biāo)地址"已艰。
IP地址(IPv4地址)由32位正整數(shù)來表示。
IP地址有"網(wǎng)絡(luò)標(biāo)識(網(wǎng)絡(luò)地址)"和"主機(jī)標(biāo)識(主機(jī)地址)"兩部分組成蚕苇。
相互連接的不同段,以不同的網(wǎng)絡(luò)標(biāo)識來區(qū)別,在同一個段內(nèi),以不同的主機(jī)地址來區(qū)別哩掺。
由此,可以保證相互連接的整個網(wǎng)絡(luò)中的每臺主機(jī)的IP地址都不會重疊。
IP地址分類
IP地址分為四個級別涩笤,分別為A類嚼吞、B類、C類和D類辆它。分類的依據(jù)是IP地址的前四位:
A類IP地址是第一位為“0”的地址誊薄。A類IP地址的前8位是網(wǎng)絡(luò)標(biāo)識履恩,用十進(jìn)制標(biāo)識的話0.0.0.0-127.0.0.0是A類IP地址的理論范圍锰茉。另外我們還可以得知,A類IP地址最多只有128個(實際上是126個切心,下文不贅述)飒筑,每個網(wǎng)段內(nèi)主機(jī)上限為2的24次方,也就是16绽昏,777协屡,214個。
B類IP地址是前兩位為“10“的地址全谤。B類IP地址的前16位是網(wǎng)絡(luò)標(biāo)識肤晓,用十進(jìn)制標(biāo)識的話128.0.0.0-191.255.0.0是B類IP地址的范圍。B類IP地址的主機(jī)標(biāo)記長度為16位认然,因此一個網(wǎng)段內(nèi)可容納主機(jī)地址上限為65534個补憾。
C類IP地址是前三位為“110”的地址。C類IP地址的前24位是網(wǎng)絡(luò)標(biāo)識卷员,用十進(jìn)制標(biāo)識的話192.0.0.0-223.255.255.0是C類IP地址的范圍盈匾。C類地址的后8位是主機(jī)標(biāo)識,共容納254個主機(jī)地址毕骡。
D類IP地址是前四位為“1110”的地址削饵。D類IP地址的網(wǎng)絡(luò)標(biāo)識長32位,沒有主機(jī)標(biāo)識未巫,因此常用于多播窿撬。
子網(wǎng)掩碼
IP地址總長度32位,它能表示的主機(jī)數(shù)量有限叙凡,大約在43億左右尤仍。而IP地址分類更是造成了極大的浪費,A狭姨、B類地址一共也就一萬多個宰啦,而世界上包含主機(jī)數(shù)量超過254的網(wǎng)段顯然不止這么點苏遥。
我們知道IP地址分類的本質(zhì)是區(qū)分網(wǎng)絡(luò)標(biāo)識和主機(jī)標(biāo)識,另一種更加靈活赡模、細(xì)粒度的區(qū)分方法是使用子網(wǎng)掩碼田炭。使用原A,B,C,D類等分類中的主機(jī)地址部分用作子網(wǎng)地址,可以將原網(wǎng)絡(luò)分為多個物理網(wǎng)絡(luò)的一種機(jī)制。
子網(wǎng)是指一個ip地址上生成的邏輯網(wǎng)絡(luò)漓柑,它可以讓一個網(wǎng)絡(luò)地址跨越多個物理網(wǎng)絡(luò)教硫,即一個網(wǎng)絡(luò)地址代表多個網(wǎng)絡(luò)(很明顯這樣做可以節(jié)省ip地址)。呵呵辆布,聽起來是不是很蹊蹺瞬矩?一個網(wǎng)絡(luò)就這樣被莫名其妙的劃分成了許多子網(wǎng)?那么這樣做有什么用呢锋玲?
我舉個例子來跟你說吧:比如你是某個學(xué)校的網(wǎng)管景用,你的學(xué)校有四個處于不同物理位置的網(wǎng)絡(luò)教室,每個網(wǎng)絡(luò)教室25臺機(jī)器惭蹂,你的任務(wù)是給這些機(jī)器配置ip地址和子網(wǎng)掩碼伞插。你可能會覺得這再簡單不過了,申請4個C類地址盾碗,每個教室一個媚污,然后在一一配置不就搞定了。嗯廷雅,這樣做理論上沒錯耗美,但你有沒有想到這樣做很浪費,你一共浪費了(254-25)*4=916個ip地址航缀,如果所有的網(wǎng)管都像你這樣做商架,那么internet上的ip地址將會在極短的時間內(nèi)枯竭,顯然谬盐,你是不能這樣做甸私,你應(yīng)該做子網(wǎng)劃分。
子網(wǎng)劃分說白了是這樣一個事情:因為在劃分了子網(wǎng)后飞傀,ip地址的網(wǎng)絡(luò)號是不變的皇型,因此在局域網(wǎng)外部看來,這里仍然只存在一個網(wǎng)絡(luò)砸烦,即網(wǎng)絡(luò)號所代表的那個網(wǎng)絡(luò)弃鸦;但在網(wǎng)絡(luò)內(nèi)部卻是另外一個景象,因為我們每個子網(wǎng)的子網(wǎng)號是不同的幢痘,當(dāng)用化分子網(wǎng)后的ip地址與子網(wǎng)掩碼(注意唬格,這里指的子網(wǎng)掩碼已經(jīng)不是缺省子網(wǎng)掩碼了,而是自定義子網(wǎng)掩碼,是管理員在經(jīng)過計算后得出的)做'與'運算時购岗,每個子網(wǎng)將得到不同的子網(wǎng)地址汰聋,從而實現(xiàn)了對網(wǎng)絡(luò)的劃分(得到了不同的地址,當(dāng)然就能區(qū)別出各個子網(wǎng)了喊积,有趣吧)烹困。
子網(wǎng)編址技術(shù),即子網(wǎng)劃分將會有助于以下問題的解決:
1)巨大的網(wǎng)絡(luò)地址管理耗費:如果你是一個A類網(wǎng)絡(luò)的管理員乾吻,你一定會為管理數(shù)量龐大的主機(jī)而頭痛的髓梅;
2)路由器中的選路表的急劇膨脹:當(dāng)路由器與其他路由器交換選路表時,互聯(lián)網(wǎng)的負(fù)載是很高的绎签,所需的計算量也很高枯饿;
3)IP地址空間有限并終將枯竭:這是一個至關(guān)重要的問題,高速發(fā)展的internet,使原來的編址方法不能適應(yīng)诡必,而一些ip地址卻不能被充分的利用奢方,造成了浪費。
因此擒权,在配置局域網(wǎng)或其他網(wǎng)絡(luò)時袱巨,根據(jù)需要劃分子網(wǎng)是很重要的阁谆,有時也是必要的√汲現(xiàn)在,子網(wǎng)編址技術(shù)已經(jīng)被絕大多數(shù)局域網(wǎng)所使用场绿。
子網(wǎng)掩碼長度也是32位剖效,由一段連續(xù)的1和一段連續(xù)的0組成。1的長度就表示網(wǎng)絡(luò)標(biāo)識的長度焰盗。以IP地址172.20.100.52為例璧尸,它本來是一個B類IP地址(前16位是網(wǎng)絡(luò)標(biāo)識),但通過子網(wǎng)掩碼熬拒,它可以是前26為為網(wǎng)絡(luò)標(biāo)識的IP地址:
路由控制
互聯(lián)網(wǎng)是由路由器連接的網(wǎng)絡(luò)組合而成的爷光。為了能讓數(shù)據(jù)包正確的到達(dá)目標(biāo)主機(jī),路由器必須在途中進(jìn)行正確的轉(zhuǎn)發(fā)。
這種"正確的方向"轉(zhuǎn)發(fā)數(shù)據(jù)所進(jìn)行的處理就叫做路由控制或路由澎粟。
路由控制是指將分組數(shù)據(jù)發(fā)送到最終目標(biāo)地址的功能蛀序。
"跳"指網(wǎng)絡(luò)的一個區(qū)間。IP包正是在網(wǎng)絡(luò)中一個跳間被轉(zhuǎn)發(fā)活烙。因此IP路由也叫做多跳路由徐裸。在每一個區(qū)間內(nèi)決定著包在下一條被轉(zhuǎn)發(fā)的路徑。
路由器是根據(jù)由控制表轉(zhuǎn)發(fā)數(shù)據(jù)包啸盏。它根據(jù)所收到的數(shù)據(jù)包中目標(biāo)主機(jī)的IP地址與路由控制表的比較得出下一個應(yīng)該接收的路由器重贺。
為了將數(shù)據(jù)包發(fā)給目標(biāo)主機(jī),所有主機(jī)都維護(hù)者一張路由控制表。 該表記錄IP數(shù)據(jù)在下一步應(yīng)該發(fā)給哪個路由器。IP包將根據(jù)這個路由表在各個數(shù)據(jù)鏈路上傳輸气笙。
路由控制分為靜態(tài)和動態(tài)兩種類型次企。
靜態(tài):通常是由使用者手工操作完成的,是指事先設(shè)置好路由器和主機(jī)中并將路由信息固定的一種方法。
動態(tài):讓管理者設(shè)置好的路由協(xié)議在運行過程中自動的設(shè)置路由控制信息的一種方法潜圃。
IP分割處理
IP是實現(xiàn)多個數(shù)據(jù)鏈路之間通信的協(xié)議抒巢。
但是不同的數(shù)據(jù)鏈路,它們各自的最大傳輸單位不同。
為了解決這個問題,IP進(jìn)行分片處理秉犹。將較大的IP包分成多個較小的IP包蛉谜。分片的包到達(dá)了對端目標(biāo)地址以后會再備注合起來傳給上一層。經(jīng)過分片之后的IP數(shù)據(jù)報在被重組的時候,只能由目標(biāo)主機(jī)進(jìn)行崇堵。路由器雖然做分片,但不會進(jìn)行重組型诚。
路徑MTU發(fā)現(xiàn)
分片會加重路由器的負(fù)擔(dān),因此只要條件允許鸳劳,我們都不希望路由器對IP數(shù)據(jù)包進(jìn)行分片處理狰贯。另外,如果一個分片丟失赏廓,整個IP數(shù)據(jù)報都會作廢涵紊。
解決以上問題的技術(shù)是“路徑MTU發(fā)現(xiàn)”。主機(jī)會首先獲取整個路徑中所有數(shù)據(jù)鏈路的最小MTU幔摸,并按照整個大小將數(shù)據(jù)分片摸柄。因此傳輸過程中的任何一個路由器都不用進(jìn)行分片工作。
為了找到路徑MTU既忆,主機(jī)首先發(fā)送整個數(shù)據(jù)包驱负,并將IP首部的禁止分片標(biāo)志設(shè)為1.這樣路由器在遇到需要分片才能處理的包時不會分片,而是直接丟棄數(shù)據(jù)并通過ICMP協(xié)議將整個不可達(dá)的消息發(fā)回給主機(jī)患雇。
主機(jī)將ICMP通知中的MTU設(shè)置為當(dāng)前MTU跃脊,根據(jù)整個MTU對數(shù)據(jù)進(jìn)行分片處理。如此反復(fù)下去苛吱,直到不再收到ICMP通知酪术,此時的MTU就是路徑MTU。
以UDP協(xié)議發(fā)送數(shù)據(jù)為例:
IPv4首部
通過IP進(jìn)行通信是,需要在數(shù)據(jù)的前面加入IP首部信息翠储。IP首部中包含著用于IP協(xié)議進(jìn)行發(fā)包控制時所有的必要信息绘雁。所以,為了對IP所提供的功能有一個詳細(xì)的把握,還是有必要了解下IP首部的結(jié)構(gòu)的。
其中幾個重要的部分介紹如下:
總長度(Total Length):表示IP首部與數(shù)據(jù)部分總的字節(jié)數(shù)彰亥,該段長16比特咧七,所以IP包的最大長度為65535字節(jié)(2^16)。雖然不同數(shù)據(jù)鏈路的MTU不同任斋,但是IP協(xié)議屏蔽了這些區(qū)別继阻,通過自己實現(xiàn)的數(shù)據(jù)分片功能耻涛,從上層的角度來看,IP協(xié)議總是能夠以65535為最大包長進(jìn)行傳輸瘟檩。
標(biāo)識(ID:Identification):用于分片重組抹缕。屬于同一個分片的幀的ID相同。但即使ID相同墨辛,如果目標(biāo)地址卓研、源地址、上層協(xié)議中有任何一個不同睹簇,都被認(rèn)為不屬于同一個分片奏赘。
-
標(biāo)志(Flags):由于分片重組,由三個比特構(gòu)成太惠。
第一個比特未使用磨淌,目前必須是0。
第二個比特表示是否進(jìn)行分片凿渊,0表示可以分片梁只,1表示不能分片。在路徑MTU發(fā)現(xiàn)技術(shù)中就用到了這個位埃脏。
第三個比特表示在分片時搪锣,是否表示最后一個包。1表示不是最后一個包彩掐,0表示分配中最后一個包构舟。
片偏移(FO: Fragment Offset):由13比特組成,表示被分片的段相對于原始數(shù)據(jù)的位置佩谷。它可以表示8192(2^13)個位置旁壮,單位為8字節(jié)监嗜,所以最大可以表示8 x 8192 = 65536字節(jié)的偏移量谐檀。
生存時間(TTL: Time To Live):表示包可以經(jīng)過多少個路由器的中轉(zhuǎn)。每經(jīng)過一個路由器裁奇,TTL減1桐猬。這樣可以避免前文提到的無限傳遞包的問題。
協(xié)議: 表示IP首部的下一個首部屬于哪個協(xié)議刽肠。比如TCP協(xié)議的編號為6溃肪,UDP編號為17.
首部校驗和:用于檢查IP首部是否損壞
源地址:由32比特構(gòu)成(4個字節(jié)),表示發(fā)送端IP地址。
目標(biāo)地址:由32比特構(gòu)成(4個字節(jié)),表示接收端IP地址音五。
可選項:僅在試驗或診斷時用惫撰,可以沒有。如果有躺涝,需要配合填充(Padding)占滿32比特厨钻。
IPv6
IPv6是為了根本解決IPv4地址耗盡的問題而被標(biāo)準(zhǔn)化的網(wǎng)際協(xié)議。IPv4地址長度32比特,而IPv6地址長度128比特,一般寫成8個16位字節(jié)。
IPv6特點
- IP地址的擴(kuò)大與路由控制表的聚合
- 性能提升
- 支持即插即用功能
- 采用認(rèn)證與加密功能
- 多播夯膀、Mobile IP成為拓展功能
IPv6中IP地址的標(biāo)記方法
一般人們將128比特IP地址以每16比特為一組,每組用冒號(":")隔開進(jìn)行標(biāo)記诗充。而且如果出現(xiàn)連續(xù)的0時還可以將這些0省略掉,并用冷兒冒號("::")隔開。但是一個IP地址中只允許出現(xiàn)一次兩個連續(xù)的冒號诱建。
在互聯(lián)網(wǎng)通信中,使用一種全局的單播地址蝴蜓。他是互聯(lián)萬中唯一的一個地址,不需要正式分配IP地址。