日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

TCP/IP(二):IP协议

發(fā)布時(shí)間:2023/12/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP/IP(二):IP协议 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

IP協(xié)議處于OSI參考模型的第三層——網(wǎng)絡(luò)層,網(wǎng)絡(luò)層的主要作用是實(shí)現(xiàn)終端節(jié)點(diǎn)間的通信。IP協(xié)議是網(wǎng)絡(luò)層的一個(gè)重要協(xié)議,網(wǎng)絡(luò)層中還有ARP(獲取MAC地址)和ICMP協(xié)議(數(shù)據(jù)發(fā)送異常通知)

數(shù)據(jù)鏈路層的作用在于實(shí)現(xiàn)同一種數(shù)據(jù)鏈路下的包傳遞,而網(wǎng)絡(luò)層則可以實(shí)現(xiàn)跨越不同數(shù)據(jù)鏈路的包傳遞。比如主機(jī)A通過Wi-Fi連接到路由器B,路由器B通過以太網(wǎng)連接到路由器C,而路由器C又通過Wi-Fi與主機(jī)D保持連接。這時(shí)主機(jī)A向D發(fā)送的數(shù)據(jù)包就依賴于網(wǎng)絡(luò)層進(jìn)行傳輸。

這篇文章主要介紹IP協(xié)議的基本知識(shí)和IP首部,IP協(xié)議可以分為三大作用模塊:IP尋址、路由和IP分包。

IP地址

IP地址是一種在網(wǎng)絡(luò)層用于識(shí)別通信對(duì)端信息的地址。它有別于數(shù)據(jù)鏈路層中的MAC地址,后者用于標(biāo)識(shí)同一鏈路下不同的計(jì)算機(jī)。

舉一個(gè)形象的例子,我要從鎮(zhèn)江的家里去沈陽(yáng)的東北大學(xué),通信兩端的地址分別是家和學(xué)校,他們相當(dāng)于IP地址。然而沒有交通工具可以讓我從家直接去學(xué)校,所以我先要打車去火車站,然后坐高鐵到沈陽(yáng)站,再轉(zhuǎn)公交去學(xué)校。這三次中轉(zhuǎn)分別屬于三種交通方式(數(shù)據(jù)鏈路),每一次中轉(zhuǎn)都有起點(diǎn)和終點(diǎn),他們就相當(dāng)于MAC地址。每次中轉(zhuǎn)可以稱為一跳(Hop)

IP地址由32位正整數(shù)表示,為了直觀的表示,我們把它分成4個(gè)部分,每個(gè)部分由8位整數(shù)組成,對(duì)應(yīng)十進(jìn)制的范圍就是0-255。

比如172.20.1.1可以表示為:10101100 00010100 00000001 00000001。轉(zhuǎn)換規(guī)則很簡(jiǎn)單,就是分別把四個(gè)部分的十進(jìn)制(0-255)與8位二進(jìn)制數(shù)字進(jìn)行轉(zhuǎn)換。

從功能上看,IP地址由兩部分組成:網(wǎng)絡(luò)標(biāo)識(shí)和主機(jī)標(biāo)識(shí)。

網(wǎng)絡(luò)標(biāo)識(shí)用于區(qū)分不同的網(wǎng)段,相同段內(nèi)的主機(jī)必須擁有相同的網(wǎng)絡(luò)表示,不同段內(nèi)的主機(jī)不能擁有相同的網(wǎng)絡(luò)標(biāo)識(shí)。

主機(jī)標(biāo)識(shí)用于區(qū)分同一網(wǎng)段下不同的主機(jī),它不能在同一網(wǎng)段內(nèi)重復(fù)出現(xiàn)。

32位IP地址被分為兩部分,到底前多少位是網(wǎng)絡(luò)標(biāo)識(shí)呢?一般有兩種方法表示:IP地址分類、子網(wǎng)掩碼。

IP分類

IP地址分為四個(gè)級(jí)別,分別為A類、B類、C類和D類。分類的依據(jù)是IP地址的前四位:

A類IP地址是第一位為“0”的地址。A類IP地址的前8位是網(wǎng)絡(luò)標(biāo)識(shí),用十進(jìn)制標(biāo)識(shí)的話0.0.0.0-127.0.0.0是A類IP地址的理論范圍。另外我們還可以得知,A類IP地址最多只有128個(gè)(實(shí)際上是126個(gè),下文不贅述),每個(gè)網(wǎng)段內(nèi)主機(jī)上限為2的24次方,也就是16,777,214個(gè)。

B類IP地址是前兩位為“10“的地址。B類IP地址的前16位是網(wǎng)絡(luò)標(biāo)識(shí),用十進(jìn)制標(biāo)識(shí)的話128.0.0.0-191.255.0.0是B類IP地址的范圍。B類IP地址的主機(jī)標(biāo)記長(zhǎng)度為16位,因此一個(gè)網(wǎng)段內(nèi)可容納主機(jī)地址上限為65534個(gè)。

C類IP地址是前三位為“110”的地址。C類IP地址的前24位是網(wǎng)絡(luò)標(biāo)識(shí),用十進(jìn)制標(biāo)識(shí)的話192.0.0.0-223.255.255.0是C類IP地址的范圍。C類地址的后8位是主機(jī)標(biāo)識(shí),共容納254個(gè)主機(jī)地址。

D類IP地址是前四位為“1110”的地址。D類IP地址的網(wǎng)絡(luò)標(biāo)識(shí)長(zhǎng)32位,沒有主機(jī)標(biāo)識(shí),因此常用于多播。

子網(wǎng)掩碼

IP地址總長(zhǎng)度32位,它能表示的主機(jī)數(shù)量有限,大約在43億左右。而IP地址分類更是造成了極大的浪費(fèi),A、B類地址一共也就一萬多個(gè),而世界上包含主機(jī)數(shù)量超過254的網(wǎng)段顯然不止這么點(diǎn)。

我們知道IP地址分類的本質(zhì)是區(qū)分網(wǎng)絡(luò)標(biāo)識(shí)和主機(jī)標(biāo)識(shí),另一種更加靈活、細(xì)粒度的區(qū)分方法是使用子網(wǎng)掩碼。

子網(wǎng)掩碼長(zhǎng)度也是32位,由一段連續(xù)的1和一段連續(xù)的0組成。1的長(zhǎng)度就表示網(wǎng)絡(luò)標(biāo)識(shí)的長(zhǎng)度。以IP地址172.20.100.52為例,它本來是一個(gè)B類IP地址(前16位是網(wǎng)絡(luò)標(biāo)識(shí)),但通過子網(wǎng)掩碼,它可以是前26為為網(wǎng)絡(luò)標(biāo)識(shí)的IP地址:


子網(wǎng)掩碼

路由控制

路由控制(Routing)是指將分組數(shù)據(jù)發(fā)送到目標(biāo)地址的功能,這個(gè)功能一般由路由器完成。(不要與家里用的小型無線路由器混為一談)

路由器中保存著路由控制表,它在路由控制表中查找目標(biāo)IP地址對(duì)應(yīng)的下一個(gè)路由器地址。下圖描述了這一過程:


路由控制

主機(jī)A的地址是10.1.1.30,要把數(shù)據(jù)發(fā)往地址為10.1.2.10的主機(jī)。在主機(jī)A的路由表中,保存了兩個(gè)字段,由于目標(biāo)地址10.1.2.10與10.1.1.0/24段不匹配,所以它被發(fā)往默認(rèn)路由10.1.1.1也就是圖中路由器1的左側(cè)網(wǎng)卡的IP地址。

路由器1繼續(xù)在它自己的路由控制表中查找目標(biāo)地址10.1.2.10,它發(fā)現(xiàn)目標(biāo)地址屬于10.1.2.0/24這一段,因此將數(shù)據(jù)轉(zhuǎn)發(fā)至下一個(gè)路由器10.1.0.2,也就是路由器2的左側(cè)網(wǎng)卡的地址。

路由器2在自己的路由控制表中查找目標(biāo)地址10.1.2.10,根據(jù)表中記錄將數(shù)據(jù)發(fā)往10.1.2.1接口,也就是自己的右側(cè)網(wǎng)卡的IP地址。主機(jī)B檢查目標(biāo)IP地址和自己相同,于是接收數(shù)據(jù)。

路由控制表

路由控制的關(guān)鍵在于路由控制表,路由控制表可以由管理員手動(dòng)設(shè)置,稱為靜態(tài)路由控制,但是估計(jì)大部分人沒這么干過。這是因?yàn)槁酚善骺梢院绕渌酚善骰Q信息比即使自動(dòng)刷新路由表,這個(gè)信息交換的協(xié)議并沒有在IP協(xié)議中定義,而是由一個(gè)叫做“路由協(xié)議”的協(xié)議管理。

環(huán)路

上圖中,假設(shè)主機(jī)A向一個(gè)不存在的IP地址發(fā)送數(shù)據(jù),并且路由器1、2、3設(shè)置的默認(rèn)路由形成了一個(gè)循環(huán),那么數(shù)據(jù)將在網(wǎng)絡(luò)中不斷轉(zhuǎn)發(fā)最終導(dǎo)致網(wǎng)絡(luò)擁堵。這個(gè)問題將在下文分析IP首部時(shí)得到解決。

IP報(bào)文分割重組

在數(shù)據(jù)鏈路層中,我們已經(jīng)提到過不同的數(shù)據(jù)鏈路有不同的最大傳輸單元(MTU)。因此IP協(xié)議的一個(gè)任務(wù)是對(duì)數(shù)據(jù)進(jìn)行分片和重組。分片由發(fā)送端主機(jī)和路由器負(fù)責(zé),重組由接收端主機(jī)負(fù)責(zé)。

路徑MTU發(fā)現(xiàn)

分片會(huì)加重路由器的負(fù)擔(dān),因此只要條件允許,我們都不希望路由器對(duì)IP數(shù)據(jù)包進(jìn)行分片處理。另外,如果一個(gè)分片丟失,整個(gè)IP數(shù)據(jù)報(bào)都會(huì)作廢。

解決以上問題的技術(shù)是“路徑MTU發(fā)現(xiàn)”。主機(jī)會(huì)首先獲取整個(gè)路徑中所有數(shù)據(jù)鏈路的最小MTU,并按照整個(gè)大小將數(shù)據(jù)分片。因此傳輸過程中的任何一個(gè)路由器都不用進(jìn)行分片工作。

為了找到路徑MTU,主機(jī)首先發(fā)送整個(gè)數(shù)據(jù)包,并將IP首部的禁止分片標(biāo)志設(shè)為1.這樣路由器在遇到需要分片才能處理的包時(shí)不會(huì)分片,而是直接丟棄數(shù)據(jù)并通過ICMP協(xié)議將整個(gè)不可達(dá)的消息發(fā)回給主機(jī)。

主機(jī)將ICMP通知中的MTU設(shè)置為當(dāng)前MTU,根據(jù)整個(gè)MTU對(duì)數(shù)據(jù)進(jìn)行分片處理。如此反復(fù)下去,直到不再收到ICMP通知,此時(shí)的MTU就是路徑MTU。

以UDP協(xié)議發(fā)送數(shù)據(jù)為例:


路徑MTU發(fā)現(xiàn)

重組

接收端根據(jù)IP首部中的標(biāo)志(Flag)和片偏移(Fragment Offset)進(jìn)行數(shù)據(jù)重組。具體內(nèi)容將在分析IP首部時(shí)詳細(xì)解釋。

IP首部(IPv4)

IP首部是一個(gè)有些復(fù)雜的結(jié)構(gòu),我們不用記憶它的結(jié)構(gòu),只需了解每個(gè)部分的作用即可,這樣可以加深對(duì)IP協(xié)議的理解。


IP首部

其中幾個(gè)重要的部分介紹如下:

  • 總長(zhǎng)度(Total Length):表示IP首部與數(shù)據(jù)部分總的字節(jié)數(shù),該段長(zhǎng)16比特,所以IP包的最大長(zhǎng)度為65535字節(jié)(2^16)。雖然不同數(shù)據(jù)鏈路的MTU不同,但是IP協(xié)議屏蔽了這些區(qū)別,通過自己實(shí)現(xiàn)的數(shù)據(jù)分片功能,從上層的角度來看,IP協(xié)議總是能夠以65535為最大包長(zhǎng)進(jìn)行傳輸。

  • 標(biāo)識(shí)(ID:Identification):用于分片重組。屬于同一個(gè)分片的幀的ID相同。但即使ID相同,如果目標(biāo)地址、源地址、上層協(xié)議中有任何一個(gè)不同,都被認(rèn)為不屬于同一個(gè)分片。

  • 標(biāo)志(Flags):由于分片重組,由三個(gè)比特構(gòu)成。

    第一個(gè)比特未使用,目前必須是0。

    第二個(gè)比特表示是否進(jìn)行分片,0表示可以分片,1表示不能分片。在路徑MTU發(fā)現(xiàn)技術(shù)中就用到了這個(gè)位。

    第三個(gè)比特表示在分片時(shí),是否表示最后一個(gè)包。1表示不是最后一個(gè)包,0表示分配中最后一個(gè)包。

  • 片偏移(FO: Fragment Offset):由13比特組成,表示被分片的段相對(duì)于原始數(shù)據(jù)的位置。它可以表示8192(2^13)個(gè)位置,單位為8字節(jié),所以最大可以表示8 x 8192 = 65536字節(jié)的偏移量。

  • 生存時(shí)間(TTL: Time To Live):表示包可以經(jīng)過多少個(gè)路由器的中轉(zhuǎn)。每經(jīng)過一個(gè)路由器,TTL減1。這樣可以避免前文提到的無限傳遞包的問題。

  • 協(xié)議: 表示IP首部的下一個(gè)首部屬于哪個(gè)協(xié)議。比如TCP協(xié)議的編號(hào)為6,UDP編號(hào)為17.
  • 首部校驗(yàn)和:用于檢查IP首部是否損壞
  • 可選項(xiàng):僅在試驗(yàn)或診斷時(shí)用,可以沒有。如果有,需要配合填充(Padding)占滿32比特。


文/bestswifter(簡(jiǎn)書作者)
原文鏈接:http://www.jianshu.com/p/9cb5cf1864da
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),并標(biāo)注“簡(jiǎn)書作者”。

總結(jié)

以上是生活随笔為你收集整理的TCP/IP(二):IP协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。