上篇文章:
網絡編程—TCP/IP模型(TCP協議)https://blog.csdn.net/sniper_fandc/article/details/147011479?fromshare=blogdetail&sharetype=blogdetail&sharerId=147011479&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link
目錄
1 網絡層
2 IP協議
3 IP地址
3.1 IP地址分類
3.2 特殊的IP地址
3.3 解決IP地址不夠用
3.3.1 IPV6
3.3.2 DHCP動態分配IP地址
3.3.3 NAT IP地址轉換
3.4 路由選擇
1 網絡層
????????IP協議屬于網絡層,網絡層協議的工作:1.地址管理2.路徑規劃。
2 IP協議
????????4位版本:目前只有4和6,即IPv4和IPv6。IPv4地址32位,IPv6地址128位。
????????4位首部長度:單位4字節,故4位首部長度可以表示15*4=60字節,其中固定首部的長度為50字節,因此選項長度最多40字節。
????????8位服務類型(Type Of Service):3位優先權字段(已經棄用),4位TOS字段,和1位保留字段(必須置為0)。4位TOS分別表示:最小延時,最大吞吐量,最高可靠性,最小成本。這四者相互沖突,只能選擇一個。對于ssh/telnet這樣的應用程序,最小延時比較重要;對于ftp這樣的程序,最大吞吐量比較重要。
????????16位總長度:單位字節,總長度=首部長度+數據載荷(傳輸層數據報)。注意:雖然此處長度做了限制,但這不意味IP數據包遇到數據很多的傳輸層數據報就無法傳輸,實際上IP數據包可以進行拆包和組包,拆包和組包的相關字段和標識、標志、片偏移有關。
????????16位標識:唯一標識主機發送的數據報文,IP數據包的拆包(又被稱為分片)和組包行為不由網絡層控制,而是由數據鏈路層控制。數據鏈路層如果對IP數據包分片,那么多個分片后的包屬于同一個IP數據包,因此16位標識一致。
????????3位標志:第一位保留。第二位置為1表示禁止分片,這時候如果報文長度超過MTU,IP模塊就會丟棄報文。第三位表示“是否還有更多分片”,如果還有分片,置為1;如果沒有分片了則是0,類似于一個結束標記。
????????13位片偏移:當前分片相對于原始IP報文開始處的偏移。其實就是在表示當前分片在原報文中處在哪個位置。實際偏移的字節數是這個值*8得到的。因此,除了最后一個報文之外,其他報文的長度必須是8的整數倍(否則報文就不連續了)。
????????8位生存時間(TTL):數據報到達目的地的最大報文跳數。一般是64(如果是國外的地址,一般是128)。每次經過一個路由,TTL -= 1,一直減到0還沒到達,那么就丟棄了。這個字段主要是用來防止出現路由循環。
????????比如ping百度的地址,百度服務器發送的報文經過64-49=15跳(15次轉發)到達本主機。
????????8位協議:表示上層協議的類型。
????????16位頭部校驗和:使用CRC進行校驗,來鑒別頭部是否損壞。數據部分的校驗由傳輸層負責。
????????32位源地址和32位目標地址:表示發送端和接收端的IP地址。
3 IP地址
????????以IPv4為準,IP地址由32位二進制數表示,每8位二進制用“.”分割,共分成4部分,每部分表示一個字節,范圍為0-255。
3.1 IP地址分類
????????這里不介紹傳統的ABCDE類地址的分類方法(太浪費了,實際中也不用)。實際中使用的是CIDR劃分方法,CIDR引入子網掩碼,作用是表示IP地址哪部分是網絡號,哪部分是主機號。子網掩碼32位,網絡號部分全是1,主機號部分全是0,如下所示:
????????同一個局域網內(內網)的設備,網絡號一樣,主機號不一樣;相鄰局域網的網絡號不一樣(網絡號一樣就屬于同一個局域網了)。
3.2 特殊的IP地址
????????1.網關IP:意思是一個局域網的入口/出口,通常是主機號為.1的IP作為網關IP。
????????2.網絡號:主機號為.0的IP,表示這個局域網的網絡號,因此該IP不會分配給局域網的主機作為IP地址使用。
????????3.廣播IP:主機號為.255的IP,表示廣播IP,向這個IP發送數據,該局域網內的所有設備都會收到。
????????注意:為什么UDP可以實現廣播,TCP不可以?UDP不需要連接,把數據報直接向這個IP發送,就可以實現廣播;而TCP需要建立連接,但是廣播IP沒有實際的設備,即TCP向這個IP發送建立連接信息,沒有設備會應答,因此連接不會建立成功,難以實現廣播。
????????4.本地環回IP:127.0.0.1/127.*,表示主機自己,每臺主機都有一個虛擬的表示環回IP的網卡,因此可以實現自己訪問自己。
????????5.內網IP:10.*、172.16.*-172.31.*和192.168.*,這三類IP都屬于內網IP。
????????6.外網IP:除了內網IP外,其余的都是外網IP。
????????32位IP地址最初的設計是為了唯一表示世界上所有主機設備的地址,因為32位可以表示4294967296,這在當時看來是非常龐大的數字,但是如今手機、電腦、物聯網等各種可上網設備越來越多,這些地址也就不夠用了。如何解決IP地址不夠用問題?就有了以下三種方式:
3.3 解決IP地址不夠用
3.3.1 IPV6
????????IPv6地址為128位,比IPv4地址32位大2^96倍,為地球上每一個沙子分配一個IP都綽綽有余。但是IPv6與IPv4不兼容,而市面上大多數網卡設備等目前仍使用IPv4,因此對于IPv6不做過多研究。
????????IPv6還有個作用,有了IPv6訪問外網就不需要NAT地址轉換了。
3.3.2 DHCP動態分配IP地址
????????當設備需要上網時,向DHCP服務器發送請求,由DHCP服務器分配可用的IP地址,不上網時就不分配IP地址。但是這種方法治標不治本。
3.3.3 NAT IP地址轉換
????????把IP地址按局域網和廣域網分為內網IP和外網IP,不同內網中的IP可以重復,外網IP不能重復。
????????觀察下圖的內網IP和外網IP,體會不同局域網的內網IP可以重復,相鄰的局域網網絡號不同(因為路由器把相鄰的兩個局域網連接起來),同一個局域網的網絡號相同的含義。
????????假設主機1想要上網看視頻,主機1向視頻平臺發送請求,源IP是自己的內網IP192.168.0.10,目的IP是視頻平臺的IP3.3.3.3。IP數據包轉發過程可能經歷多個路由器(上圖進行了簡化),每經過一個路由器,NAT機制就會將源IP改為自己的轉發IP(WAN口出去的IP),同時記錄下地址的映射(包是從哪來的),因此最終視頻平臺看到數據包的源IP并不是主機1的IP,而是上一條路由器的IP。通過NAT機制,視頻平臺不會將返回的響應錯誤發送給局域網3的主機3(和主機1的IP相同),而是原路返回。
????????因此,NAT機制的本質是:用一個外網IP代替多個內網IP,從而節省了IPv4的地址的使用。
3.4 路由選擇
????????路由器內部會維護一張路由表,路由選擇的方式類似“問路”,采用一跳一跳的方式進行,當數據包傳入時,路由器會根據目的IP在路由表搜索下一跳地址,如果匹配到相應的信息就轉發數據包到下一跳;如果沒有匹配到就選擇默認的下一跳地址轉發(路由表的默認選項配置)。
下篇文章:
網絡編程—TCP/IP模型(數據鏈路層了解與知識補充)https://blog.csdn.net/sniper_fandc/article/details/147025676?fromshare=blogdetail&sharetype=blogdetail&sharerId=147025676&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link