TCP/IP之IP協(xié)議

IP的作用

IP相當于OSI參考模型中的網(wǎng)絡(luò)層,網(wǎng)絡(luò)層主要作用是實現(xiàn)終端節(jié)點之間的通信。具體來說,數(shù)據(jù)鏈路層的主要作用是在互連同一種數(shù)據(jù)鏈路的節(jié)點之間進行包傳遞,然而,一旦跨越多種數(shù)據(jù)鏈路,就需要借助網(wǎng)絡(luò)層了,網(wǎng)絡(luò)層可以跨越不同的數(shù)據(jù)鏈路。

IP的作用
  • 網(wǎng)絡(luò)層與數(shù)據(jù)鏈路層的關(guān)系:數(shù)據(jù)鏈路層提供直連兩個設(shè)備之間的通信功能,與之相比,作為網(wǎng)絡(luò)層的IP則負責在沒有直連的兩個網(wǎng)絡(luò)之間進行通信傳輸。

IP大致又分為三大作用模塊,分別是IP尋址、路由(最終節(jié)點為止的轉(zhuǎn)發(fā))以及IP分包和組包。

IP地址

MAC地址用來標識同一個鏈路中不同計算機,IP地址則是用來標識網(wǎng)絡(luò)層中主機的通信地址。

  • IP地址:一個32位的正整數(shù)(IPV4),由網(wǎng)絡(luò)和主機兩部分標識構(gòu)成。網(wǎng)絡(luò)標識在數(shù)據(jù)鏈路每個段配置不同的值,相同段內(nèi)相連的主機必須有相同的網(wǎng)絡(luò)地址;主機標識在用于標識同一個網(wǎng)段內(nèi)不同的主機。
IP地址
  • IP地址的分類:IP地址分為網(wǎng)絡(luò)和主機兩部分組成,那么,從第幾位到第幾位是網(wǎng)絡(luò)標識,又是從第幾位到第幾位是主機標識呢?目前,對于IP地址的劃分,主要有兩種劃分方式;IP分類地址和子網(wǎng)掩碼區(qū)分
  • IP 地址分類:IP地址分為四個級別,分別為A、B、C、D類。
    • A類地址:首位以“0”開頭的地址,從第一位到第八位是網(wǎng)絡(luò)標識,后24位相當于主機標識,即:0.0.0.0~127.0.0.0是A類地址。一個網(wǎng)段內(nèi)可容納的主機地址上限為16777214(去掉全0和全1保留地址)。
    • B類地址:前兩位以“10”開頭的地址,從第一位到第十六位是網(wǎng)絡(luò)標識,后16位相當于主機標識,即:128.0.0.0~191.255.0.0是B類地址。一個網(wǎng)段內(nèi)可容納的主機地址上限為65534(去掉全0和全1保留地址)。
    • C類地址:前三位以“110”開頭的地址,從第一位到第二十四位是網(wǎng)絡(luò)標識,后8位相當于主機標識,即:192.0.0.0~239.255.255.0是C類地址。一個網(wǎng)段內(nèi)可容納的主機地址上限為254(去掉全0和全1保留地址)。
    • D類地址:前四位以“1110”開頭的地址,從第一位到第三十二位是網(wǎng)絡(luò)標識,即:224.0.0.0~239.255.255.255是D類地址。D類地址沒有主機標識,常被用于多播。
IP地址分類
  • 廣播地址:廣播地址用于在同一個鏈路中相互連接的主機之間發(fā)送數(shù)據(jù)包。將IP地址中的主機地址部分全部設(shè)置為1,就成了廣播地址。
    • 本地廣播:在本網(wǎng)絡(luò)內(nèi)的廣播叫做本地廣播。例如:網(wǎng)絡(luò)地址為192.168.0.0/24的情況下,廣播地址為:192.168.0.255.這個廣播地址的IP包會被路由器屏蔽,不會到達192.168.0.0/24以外的其他鏈路上。
    • 直接廣播:在不同網(wǎng)絡(luò)之間的廣播叫做直接廣播。例如,網(wǎng)絡(luò)地址為192.168.0.0/24的主機向192.168.1.255/24的目標地址發(fā)送IP包,收到這個包的路由器,將數(shù)據(jù)轉(zhuǎn)發(fā)給192.168.1.0/24,從而使得192.168.1.1~192.168.1.254的主機都能收到這個包。由于直接廣播有一定的安全問題,多數(shù)情況下會在路由器上設(shè)置為不轉(zhuǎn)發(fā)。
本地廣播與直接廣播
  • 子網(wǎng)掩碼:直接使用A類或者B類地址,非常浪費資源,而通過子網(wǎng)掩碼,能夠?qū)崿F(xiàn)比A、B、C更小粒度的網(wǎng)絡(luò)。這種方式,實際上就是將原來A、B、C勒種的主機地址部分用作子網(wǎng)地址,將原網(wǎng)絡(luò)分為多個物理地址的一種機制。引入子網(wǎng)以后,一個IP地址,就有了兩種識別碼,一是IP地址本身,另一個是表示網(wǎng)絡(luò)部的子網(wǎng)掩碼。子網(wǎng)掩碼是一個32位的數(shù)字,它對應(yīng)IP地址網(wǎng)絡(luò)標識部分的位全為1,對應(yīng)的IP地址主機標識的部分則全部為0.由此,一個IP地址不再受限于自己的類別,而是可以用這樣的子網(wǎng)掩碼自由的定位自己的網(wǎng)絡(luò)標識長度。子網(wǎng)掩碼的標識方式有兩種:
  • IP地址 172. 20.100. 52
    子網(wǎng)掩碼 255.255.255.192
    網(wǎng)絡(luò)地址 172. 20.100. 0
    子網(wǎng)掩碼 255.255.255.192
    廣播地址 172. 20.100. 63
    子網(wǎng)掩碼 255.255.255.192
  • 另一種方式是后綴法:它在每個IP地址后面追加網(wǎng)絡(luò)地址的位數(shù),用/隔開
    IP地址 255.255.255.52/26
    網(wǎng)絡(luò)地址 172. 20.100. 0/26
    廣播地址 172.20.100.63/26
子網(wǎng)掩碼
  • 全局地址和私有地址:起初,互聯(lián)網(wǎng)中任何一臺主機或者路由器都配有一個唯一的IP地址,然而,隨著互聯(lián)網(wǎng)的迅速普及,IP地址不足的問題日趨顯著。于是,出現(xiàn)了一種新的技術(shù),他不要求為每一臺主機或者路由器分配一個固定的IP地址,而是在必要的時候只為相應(yīng)數(shù)量的設(shè)備分配唯一的IP地址。于是出現(xiàn)了對應(yīng)全局地址的私有網(wǎng)絡(luò)的IP地址。
  • 私有地址:私有地址的范圍如下:
    10.0.0.0 ~ 10.255.255.255 (10/8) A類
    172.16.0.0 ~ 172.31.255.255 (172.16/12) B類
    192.168.0.0 ~ 192.168.255.255 (192.168/16) C類
  • 全局地址:不在私有地址范圍的IP地址均為全局地址。
    私有IP最早沒有計劃連接互聯(lián)網(wǎng),而只用于互聯(lián)網(wǎng)之外的獨立網(wǎng)絡(luò),然而,當一種能夠互換私有IP和全局IP的NAT技術(shù)誕生以后,配有私有地址的主機與配有全局地址的互聯(lián)網(wǎng)主機也能實現(xiàn)通信。

路由控制

發(fā)送數(shù)據(jù)包時使用的地址是網(wǎng)絡(luò)層的地址,即IP,然而僅僅有IP地址還不足以實現(xiàn)將數(shù)據(jù)包發(fā)送到對端目標地址,在數(shù)據(jù)發(fā)送過程中還需要類似于“指明路由器或主機”的信息,以便真正發(fā)往目標主機。保存這種信息的就是路由控制表。

  • IP地址的網(wǎng)絡(luò)地址部分用于進行路由控制。路由控制表中記錄著網(wǎng)絡(luò)地址與下一步應(yīng)該發(fā)送至路由器的地址。在發(fā)送IP包時,首先要確定IP包首部中的目標地址,再從路由控制表中找到與該地址具有相同網(wǎng)絡(luò)地址的記錄,根據(jù)該記錄將IP包轉(zhuǎn)發(fā)給相應(yīng)的下一個路由器。下圖就是通過路由控制吧將IP發(fā)送到指定目標地址的過程。


    路由控制表與IP發(fā)送
  • 路由控制表分為兩種,一種是管理員手動設(shè)置的,稱為靜態(tài)路由控制,另一種是路由器與其他路由器相互交換信息時自動刷新,稱為動態(tài)路由控制。

IP報文的分片與重組

  • 為何需要進行分片?因為網(wǎng)絡(luò)層需要對數(shù)據(jù)鏈路層進行抽象,而數(shù)據(jù)鏈路不同,他們的MTU(最大傳輸單元)都不盡相同,IP屬于數(shù)據(jù)鏈路的上一層,它必須不受限于不同數(shù)據(jù)鏈路層的MTU大小。為了讓IP包能在不同的數(shù)據(jù)鏈路中進行傳輸,所以必須要對IP進行分片處理。例如,以太網(wǎng)默認的MTU是1500字節(jié),因此,4342字節(jié)的IP數(shù)據(jù)報無法再一個幀中發(fā)送完成,這時,路由器或者主機將此IP數(shù)據(jù)報劃分成3個分片進行發(fā)送。
  • IP報文分片在網(wǎng)絡(luò)層進行,由路由器進行;經(jīng)過分片之后的IP數(shù)據(jù)報在被重組的時候,只能由目標主機進行,路由器雖然能做分片,但不會進行重組。因為現(xiàn)實中,無法保證IP數(shù)據(jù)報是否經(jīng)過同一個路徑傳送,拆分之后的每個分片都可能會在途中丟失,即使在途中某一處進行重組,如果下一站再經(jīng)過其他路由時還會面臨被分片的可能,這會給路由器帶來多余的負擔,也會降低網(wǎng)絡(luò)傳送效率。所以,在目標主機端進行重組IP分片稱為現(xiàn)行規(guī)范。
IP報文分片與重組
  • 路徑MTU發(fā)現(xiàn)
    分片機制也有著他的不足,首先,路由器的處理負荷加重,因為路由器在現(xiàn)代網(wǎng)絡(luò)中負荷越來越重,只要允許,對IP數(shù)據(jù)包的分片處理,盡量由主機進行,而不是路由器進行;其次。在分片處理中,一旦某一個分片丟失,則會造成整個IP數(shù)據(jù)報作廢。為了應(yīng)對這些問題,產(chǎn)生了“路徑MTU發(fā)現(xiàn)”技術(shù)。
  • 路徑MTU發(fā)現(xiàn)是指從發(fā)送端主機到接收端主機之間不需要分片時的最大MTU大小,即路徑中存在的所有數(shù)據(jù)鏈路最小的MTU。而路徑MTU發(fā)現(xiàn)從發(fā)送主機按照路徑MTU的大小將數(shù)據(jù)報分片后進行發(fā)送。進行路徑MU發(fā)現(xiàn)后,就可以避免在中途的路由器上進行分片處理。
  • 路徑MTU發(fā)現(xiàn)的工作原理:
    1,發(fā)送時IP首部的分片標志位設(shè)置為不分片。超過數(shù)據(jù)鏈路的最大MTU時,也不分片,直接丟棄該包;
    2,通過一個ICMP的不可達消息將數(shù)據(jù)鏈路上的MTU的值發(fā)送給主機。
    3,下一次,從發(fā)送給同一目標主機的IP數(shù)據(jù)報獲得ICMP所通知的MTU值以后,將他設(shè)置成當前MTU,發(fā)送主機根據(jù)這個MTU對數(shù)據(jù)報進行分片處理。如此反復(fù),直到數(shù)據(jù)報被發(fā)送到目標主機為止沒有再收到任何ICMP,就認為最后一次ICMP所通知的MTU即是一個合適的MTU值。
路徑MTU發(fā)現(xiàn)(UDP)

需要注意的地方是:UDP中沒有重發(fā)處理。應(yīng)用在發(fā)送下一個消息時會被分片。具體來說,就是指UDP層面?zhèn)鬟^來的“UDP首部+UDP數(shù)據(jù)”在IP層被分片,對于IP,它并不區(qū)分UDP首部和應(yīng)用的數(shù)據(jù)。所有分片到達目標主機后進行重組,在傳給UDP層;在TCP中情況則不一樣:由于TCP是可靠性傳輸,具有重發(fā)機制,數(shù)據(jù)報被丟棄后會被重新發(fā)送。TCP負責將數(shù)據(jù)分成IP層不會再分片的粒度以后再傳給IP層。IP層不做分片處理了,接收端主機不需要進行重組,數(shù)據(jù)被原樣發(fā)送給接收端主機的TCP層。

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

IPv4首部

IPv4首部格式

IPv4首部格式如上圖所示。介紹一些主要字段:

  • 版本(version):4比特構(gòu)成,表示標識IP首部的版本號。IPv4的版本號即為4,IPv6即為6。
  • 首部長度:4比特構(gòu)成,表明IP首部的大小,單位是4字節(jié)(32比特)。
  • 總長度:16比特,表示首部與數(shù)據(jù)部分結(jié)合起來的總字節(jié)數(shù),IP包的最大長度為(2的16次方)65535字節(jié)。
  • 標識:16比特,由于分片重組,同一個分片的標識值相同,不同分片的標識值不同。
  • 標志:3比特,表示被分片的相關(guān)信息
    比特 含義
    0:未使用,現(xiàn)在必須是0
    1:表示是否可以進行分片:0-可以分片,1-不可以分片
    2:包被分片的情況下,表示是否為最后一個包。0 -最后一個分片中的包,1-分片中段的包
  • 片偏移:13比特,用于標識被分片的每一個分段相對于原始數(shù)據(jù)的位置
  • 生存時間:8比特,是指包可以中轉(zhuǎn)多少個路由器的意思,每經(jīng)過一個路由器,TTL會減1,直到變成0則丟棄該包。
  • 協(xié)議:8比特,表示IP首部的下一個首部隸屬于哪個協(xié)議。
  • 首部校驗和:16比特,該字段只檢驗數(shù)據(jù)報的首部,不校驗數(shù)據(jù)部分,主要用來確保IP數(shù)據(jù)報不被破壞。
  • 源地址:32比特的發(fā)送端IP地址;
  • 目標地址:32比特的接收端IP地址;
  • 可選項:長度可變。通常只在進行試驗或者診斷額時候使用。
  • 填充:再有可選項的情況下,首部長度可能不是32比特的整數(shù)倍,為此,通過向該字段填充0,調(diào)整為32比特的整數(shù)倍。
  • 數(shù)據(jù):存入數(shù)據(jù)。將IP上層協(xié)議的首部也作為數(shù)據(jù)進行處理。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容