全是通俗易懂的講解,如果你本節之前的知識都掌握清楚,那就速速來看我的IP協議筆記吧~
????????自己寫自己的八股!讓未來的自己看懂! (全文手敲,受益良多)
?
網路基礎3
? ?網路層
? ?
????????TCP并沒有把數據發到網路里面,只是提供了可靠性策略。而IP協議的本質工作才是,提供一種能力,將數據跨網路從A主機送到B主機!用戶需要的是:提供一種能力,將數據可靠地跨網路從A主機送到B主機。所以TCP提供策略,IP提供能力!
1.前置知識
????????我們要傳輸數據,前提要對所有的主機進行標識,源IP和目的IP來標識源主機和目的
主機。IP地址=目標網路+目標主機。從A主機到B主機要經過許多路由器轉發,根據IP地址先到達目標網路,然后再交給目標主機。構建網路的時候,為我們將來高速定位一臺主機提供基礎保證!!
2.IP協議的報頭
? ? ??寬度為0~31,4個字節,標準長度為20個字節。與TCP類似。
????????如何理解IP報頭呢?本質就是結構體,填字段
問題1:報頭和載荷如何分離?
? ?
????????報頭標準長度有20字節,數據包括有http的報頭,TCP的報頭和用戶數據,通過固定報頭+自描述字段(4位首部長度(如果超過20字節就是選項的了),總長度(總長度-4位首部長度=數據))。?
TCP協議段格式:
? TCP協議也有4位首部長度
????????都代表著:如果該位置的值是x,那么x*4就是真實報頭。4位首部長度范圍在【0000,1111】即0到15,因為至少有20字節,所以在【5,15】,所以真實報頭大小為【20,60】
?
????????IP地址有2^32個,對于IP地址不足,有NAT,IPv6。
????????IP有自己總長度,而TCP沒有。說明UDP,TCP最后都要把數據交給IP層,字節流服務也好,面向數據報也罷,將來在IP層發的都是數據報。所以TCP的字節流的概念,是TCP提供給應用層,應用層所關注到的概念。
????????8位生存時間:當把IP報文轉發出去(路由器之間的轉發)的時候,因為有一些原因(網絡有bug之類),導致IP報文被一直轉發?
問題2:如何將有效載荷交付給上層?
答:8位協議:我們要把IP的有效載荷交給上層的哪個協議(TCP/UDP)
16位首部校驗和:IP要對首部做校驗,校驗失敗的首部直接丟棄,由發送方TCP直接傳送。校驗成功才可以向上交付
????????結論:socket: IP + port。端口號是給TCP去用的,IP 是給IP層去用的。 有目的IP地址和目的端口號,就可以向目標位置發送報文了。用源端口和目的端口填充TCP報頭,用源IP地址和目的IP地址填充IP報頭。
????????為什么要把點分十進制IP轉為4字節IP?
????????因為IP報頭的源IP地址和目的IP地址是4個字節,在真正路由的時候,根據目的IP地址來進行路徑選擇。在通信的時候,只工作在網絡層,沒有傳輸層?
?
網段劃分(重要)
? ? ?
?????????網絡號和主機號很好理解
1.?? ?路由器本質上也是特定一個子網的主機,也要配置IP地址
2.?? ?路由器可以實現跨網段傳發,至少要連接2個子網,相當于同時在2個子網。所以路由器一定要配置多個IP.(認為路由器有多張網卡就行了)
3.?? ?路由器一般是一個子網中的第一個設備,一般它的IP地址都是:網絡號. 1
4.?? ?路由器的功能,IP報文的轉發,但不僅僅如此~,還可以構建子網(局域網)?
一開始因為ip地址只有32位,大概42億多,是不夠用的。?
?,分類劃分法這種方法會存在IP地址嚴重浪費的問題。
針對這種情況提出了新的劃分方案,稱為CIDR(Classless Interdomain Routing):
?
?
子網掩碼的特點:
? ?子網掩碼左側為1,右側為0.將IP地址與網絡掩碼 & 就可以得到網絡號。因此我們可以提供調整子網掩碼1的個數來調整網絡IP中主機號的多少~
????????子網掩碼在路由器里面配置的。
?140.252.20.0 為網絡號,140.252.20.255 為廣播。這兩個主機不用
????????子網掩碼可以對IP 32位任意劃分。?
??
子網掩碼的書寫: ?
特殊的IP地址
IP地址的數量限制
?
?
動態內存分配IP地址,用的時候給你,不用的時候釋放給別人用。相當于共享機制。
真正變革的技術IPv6:128位,即:2^128個IP地址
私有IP地址和公網IP地址
?

IP地址被劃分為:公網IP 和 私有IP。
理解運營商和全球網絡理解
?
?????????我們是怎么上網的?
????????運營商的工作人員先讓光纖入戶,然后要有2個設備,一個是調制解調器(貓),第二個是家用路由器。路由器有倆套賬號和密碼,一套是交錢提供上網服務的(給運營商);一套是給路由器加密的(給自己),防止別人蹭網。國家 大力 發展互聯網,加大了網絡基礎設施建設。之前流量費非常貴,現在流量費非常便宜了。目的是讓更多的人入網,
全球互聯網:
????????IP地址是一份很大的資源,從大區域進入小區域,最后到達目的主機。我們的網絡被精心設計過的。
公網和私網有什么關系的?
? ?
????????當目的IP不在當前網時要通過路由器進行尋找,直到找到目的主機。然后該主機會將源IP地址和目的IP地址轉換,導致原來的私有IP變成了目的IP地址。因為私有IP不能出現在公網上的,所以該數據就回不來了!!!?
?
?我們應該怎么解決這樣的問題呢?
????????所以當IP地址要經歷路由器的時候,將源IP地址替換成每一個路由器的WAN口IP,即報文的替換。所以私有IP地址不斷被替換的過程,我們叫做NAT技術(主要解決IP地址不足的問題)
我們為什么要使用私有IP而不直接使用公用IP呢?
?
???????? ?原因是到達底層的區域的時候,IP地址已經嚴重不足了,不能夠滿足如此多的數量。
所以公網IP用在龐大的路由器里面,例如:國家,省份,城市。而私網IP地址用在小區域里面,例如:西安內部的網絡 全都用私網。
所以:互聯網=公網+私網~
?
路由器可以構建子網,路由器有Lan口IP和WAN口IP。家用路由器理解上和運營商的路由器性質是類似的。
為什么私網有那么多的類型呢??
????????如果子網覆蓋得比較大,我們可以用第一種:10.*的可以有更多地址,其次是第二種,第三種。根據不同的情況選擇不同的類型。
我們可以通過IP地址前幾位,區分是在哪個區域,通過前面的數字就可以找到該IP的具體區域了。
大公司的IP是這樣的(私有IP+公網IP)嗎?
? ?也是類似的
為什么要這樣呢?原因是IP地址不足
路由
?本地的主機也可以工作在網絡層,也有掩碼。查路由表的方式:拿著目標主機的IP & 掩碼,如果結果等于目標網絡,就通過該接口發出去。如果不等于就找下一個?
查路由表的結果:
1.?? ?給你具體的下一跳
2.?? ?路由器不清楚是去哪一跳,但是傳入默認路由(告訴你別的可能知道的)一般是同網段的另一臺路由器,所以目標IP不在目前內網中。默認路由是出口路由器,即通向另一個更大的網段。
3.?? ?到達入口路由器
結論:因為IP=目標網絡+目標主機,我們在進行轉發的時候,我們先到達目標網絡。
?
?
????????我們轉發的目的地址為192.168.56.3,先拿其與掩碼&,得到192.168.56.0,與第一行地址作對比,不同下一個。發現與第二個相同,就會跳向0 eth1.所以IP路由的過程,就是逐個查路由表的過程。
我們再來看看IP協議的報文
????????實際上,在一臺主機中,報文并沒有通過網絡層直接發出去,而是繼續交給了下一層協議(數據鏈路層)
?,數據鏈路層(屬于網卡的驅動層),不能一次發送過大的報文!所以要求上層不能給我交付過大的報文!這就是為什么TCP要發一個一個的報文,而不是全部都發過去。假如IP報文就是很大,就要求IP成進行分片轉發。
IP不光要考慮分片,未來也要組裝。 這行報頭維護 IP的分片和組裝字段。
16位標識:
? ? ?不同的IP報文有不同的標識
?
3位標識(更多分片):?
?
13位片偏移:目的要把之前發的片組裝在一起
如何組裝呢?
?
1.?? ?確保將分片全部都聚在一起(相同的標識)
2.?? ?通過片偏移進行排序(完成排序)
前置問題:你怎么知道一個IP是被分片了呢?
????????如果沒有分片,片偏移=0,更多分片=0。當我們發現 片偏移!=0 或 更多分片==1 (就分片一個)就說明分片了!
如果分片丟失了呢?
1.?? ?丟第一個 ?收到的眾多被分片的報文中,沒有一個片偏移為0,就說明是丟第一個
2.?? ?丟中間 ?讓報文的長度與報文的片偏移做比較,如果差了超過一個報文的長度就說明丟中間了
3.?? ?丟最后一個 ?所有的報文中,在3位標記的第三個都標記為1,就說明是最后一個
我們不建議分片!可能增加丟包概率,在IP中如果任何分片丟失,都要進行重發。
分片過程用數據舉例:
? ?假如報文有3000字節,報頭有20字節。我們要對它進行分片,前提:每個分片必須要帶報頭,因為報頭有標識,更多分片,片偏移的字段,少了這些無法組裝。我們先分1500,然后把20字節的報頭和后面的1480數據組成新的1500字節的分片,最后還剩20字節,再和20字節結合,形成40字節的分片。
?,然后再進行組裝
請你幫我解釋一下:
? 一個http請求,從服務器發出到你拿到響應的整個過程
? ?從應用層request和response 談,request和response都是數據要交給TCP,交給TCP就會面臨可靠性,擁塞控制,流量控制,面向連接,丟包重傳的問題,如果再想談,TCP報文向下傳到IP,又會涉及路由問題,分片問題。細節談的越多越說明你越厲害~
下篇文章我將更新——數據鏈路層~期待你的關注👉【A charmer】
?