IP協議

IP地址

目前的IP版本有4和6。

目前最流行的就是IPv4,有十進制和二進制兩種表示方法。分別是:

點分四組十進制。每一組範圍是[0~255],如:255.255.255.255

二進制。如:11111111 11111111 11111111 11111111

 

IPV4被分爲五大類:ABCDE

A類爲:點分四組中的第一組地址範圍爲0~127的IP地址。已二進制來看就是“首位爲0” 1.0.0.1~127.255.255.255

B類:128~191.二進制首位爲10 172.16.0.0~191.255.255.255

C類:192~223.二進制首位爲110 192.0.0.0~223.255.255.255

D類:224~239.二進制首位爲1110 224.0.0.0~239.255.255.255

E類:240~255.二進制首位爲1111 240.0.0.0~255.255.255.255

 

子網掩碼

在ip地址傳播的時候,可以根據二進制首位的格式判斷其屬於第幾類網,也就愛能判斷其網絡號有多少位。

但ip地址本身並沒有包含任何關於子網劃分的信息,所以光憑ip地址無法知道“其是如何劃分子網的”。

於是就出現了子網掩碼,和ip地址配套着出現,用來說明“該ip地址的子網ID是那幾位數”。

 

ip地址: 128.32.1.14 對應二進制:10000000 00100000 00000001 00001110

子網: 128.32.1.0

掩碼地址: 255.255.255.0 對應二進制:11111111 11111111 11111111 00000000

子網標識符 128.32.1.0 對應二進制:10000000 00100000 00000001 00000000

 

前綴(CIDR)

因爲現有IPV4地址已經耗盡,所以制定了一個前綴方案。

即:將ip地址的某些位固定住,剩餘的爲可設置爲0和1的任意組合。(比如值固定住第一位,那麼後面又能有好多種組合出來的ip)。

CIDR是沒有分類只說的(也就是說帶有前綴的ip地址,不屬於ABCDE裏面的任何一類)。

之前ABC的網絡號被限制爲8位、16位、24位

而CIDR的網絡號由前綴來控制,如222.80.18.18/25,其中“/25”表示其前面地址中的前25位代表網絡號,其餘位數代表主機ID。

寫法是在現有的點分四組後面加上"/前綴"

 

IP協議

IP報文格式如下:

IP首部分爲兩個部分,固定部分和可變部分;固定部分20個字節

版本號:4個bit,用來標識IP版本號。這個4位字段的值設置爲二進制的0100表示IPv4,設置爲0110表示IPv6。目前使用的IP協議版本號是4。

首部長度:4個bit。標識包括選項在內的IP頭部字段的長度。

服務類型:8個bit。服務類型字段被劃分成兩個子字段:3bit的優先級字段和4bit TOS字段,最後一位置爲0。4bit的TOS分別代表:最小時延,最大吞吐量,最高可靠性和最小花費。4bit中只能將其中一個bit位置1。如果4個bit均爲0,則代表一般服務。

總長度:16個bit。接收者用IP數據報總長度減去IP報頭長度就可以確定數據包數據有效負荷的大小。IP數據報最長可達65535字節。

標識:16個bit。唯一的標識主機發送的每一份數據報。接收方根據分片中的標識字段是否相同來判斷這些分片是否是同一個數據報的分片,從而進行分片的重組。通常每發送一份報文它的值就會加1。

標誌:3個bit。用於標識數據報是否分片。第1位沒有使用,第2位是不分段(DF)位。當DF位被設置爲1時,表示路由器不能對數據包進行分段處理。如果數據包由於不能分段而未能被轉發,那麼路由器將丟棄該數據包並向源發送ICMP不可達。第3位是分段(MF)位。當路由器對數據包進行分段時,除了最後一個分段的MF位被設置爲0外,其他的分段的MF位均設置爲1,以便接收者直到收到MF位爲0的分片爲止。

片偏移:13個bit。在接收方進行數據報重組時用來標識分片的順序。用於指明分段起始點相對於報頭起始點的偏移量。由於分段到達時可能錯序,所以位偏移字段可以使接收者按照正確的順序重組數據包。當數據包的長度超過它所要去的那個數據鏈路的MTU時,路由器要將它分片。數據包中的數據將被分成小片,每一片被封裝在獨立的數據包中。接收端使用標識符,分段偏移以及標記域的MF位來進行重組。

生存時間:8個bit。TTL域防止丟失的數據包在無休止的傳播。該域包含一個8位整數,此數由產生數據包的主機設定。TTL值設置了數據報可以經過的最多的路由器數。TTL的初始值由源主機設置(通常爲32或64),每經過一個處理它的路由器,TTL值減1。如果一臺路由器將TTL減至0,它將丟棄該數據包併發送一個ICMP超時消息給數據包的源地址。

協議:8個bit。用來標識是哪個協議向IP傳送數據。ICMP爲1,IGMP爲2,TCP爲6,UDP爲17,GRE爲47,ESP爲50。

首部檢驗和:根據IP首部計算的校驗和碼。

源地址:IP報文發送端的IP地址

目的地址:IP報文接收端的IP地址

選項:是數據報中的一個可變長的可選信息。選項字段以32bit爲界,不足時插入值爲0的填充字節。保證IP首部始終是32bit的整數倍。

 

報文結構:

 

 

分片

 

一個以太幀最大爲1518字節 (14字節以太首部,20字節IP首部,UDP8/TCP20,因此IP包每次最大爲1500==MTU。去掉協議頭UDP有效數據1472字節,TCP爲1460字節。還有最後的4字節CRC)

但是一個IP數據報則可能會有8192字節,超過以太幀的最大限制,那麼這時就需要IP分片,分批進行傳輸。

發送方會在IP層將要發送的數據分成多個數據包分批發送,而接收方則將數據按照順序再從新組織起來,等接收到一個完整的數據報之後,然後再提交給上一層傳輸層。

一個IP數據報的每個分片都具有自己的IP頭部信息,它們都具有相同的標識值,但是具有不同的位偏移,且除了最後一個分片外,其他分片都將設置MF標誌。此外,每個分片的IP頭部的總長度字段將被設置爲該分片的長度

 

TCP/UDP

一般來說TCP的IP報文不會進行分片,只有UDP纔會進行IP分片。

MTU是鏈路層中的網絡對數據幀的一個限制,依然以以太網爲例,MTU爲1500個字節。一個IP數據報在以太網中傳輸,如果它的長度大於該MTU值,就要進行分片傳輸,使得每片數據報的長度小於MTU。分片傳輸的IP數據報不一定按序到達,但IP首部中的信息能讓這些數據報片按序組裝。IP數據報的分片與重組是在網絡層進完成的。

MSS是TCP數據包每次能夠傳輸的最大數據分段,TCP報文段的長度大於MSS時,要進行分段傳輸。TCP協議在建立連接的時候通常要協商雙方的MSS值,每一方都有用於通告它期望接收的MSS選項(MSS選項只出現在SYN報文段中,即TCP三次握手的前兩次)。MSS的值一般爲MTU值減去兩個首部大小(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以如果用鏈路層以太網,MSS的值往往爲1460。而Internet上標準的MTU(最小的MTU,鏈路層網絡爲x2.5時)爲576,那麼如果不設置,則MSS的默認值就爲536個字節。很多時候,MSS的值最好取512的倍數。TCP報文段的分段與重組是在運輸層完成的。

到了這裏有一個問題自然就明瞭了,TCP分段的原因是MSS,IP分片的原因是MTU,由於一直有MSS<=MTU,很明顯,分段後的每一段TCP報文段再加上IP首部後的長度不可能超過MTU,因此也就不需要在網絡層進行IP分片了。因此TCP報文段很少會發生IP分片的情況。

再來看UDP數據報,由於UDP數據報不會自己進行分段,因此當長度超過了MTU時,會在網絡層進行IP分片。同樣,ICMP(在網絡層中)同樣會出現IP分片情況。

總結:UDP不會分段,就由IP來分。TCP會分段,當然就不用IP來分了!

 

偏移量的計算

方法爲:已經“裝載”好的分片字節數/8(偏移量就是某片在原分組的相對位置,所以8個字節作爲偏移單位。)

分片1偏移量爲:0(0=0/8,因爲該偏移量之前沒有裝載過任何分片,自然也就是0除以8了)

分片2偏移量爲:175(175=1400/8,由於分片1已經裝載好了1400字節,所以此分片的位置就在1400字節之後,也就用1400除以8了)

分片3偏移量爲:350(350=2800/8,目前已經裝好了兩個分片也就是2800字節已經裝載完了,那麼分片3自然就跟在2800字節之後了,也就是用2800除以8)

 

IP報文重組

IP報文分片後進行重組,只能在目標主機進行重組。

IP報文分片重組時,採用了一組重組定時器,片重組的控制主要根據數據首部中的標識、標誌、偏移字段進行重組。

分片重組策略如下:

(1)第一個分片的偏移值時0

(2)將第一個分片攜帶的數據長度除以8,結果就是第二個分片的偏移值

(3)將第一個和第二個分片攜帶數據的總長度除以8,結果就是第二個分片的偏移值

(4)繼續以上過程。直到之後分片的MF標誌位爲0

 

IP報文校驗

  1. IP報文校驗和計算方式

(1)爲了計算一份數據報的IP檢驗和,首先需要把檢驗和字段置爲0

(2)對首部中每個16bit進行二進制反碼求和(整個首部看成是由一串16bit的字組成)

PS:路由器收到IP報文,然後轉發之後,是需要對TTL(Time to Live)字段減一,那麼這樣的話IP報文校驗和數值也需要進行相應改變

  1. IP報文不對數據校驗原因

上層傳輸層是端到端的協議,進行端到端的校驗比進行點到點的校驗開銷小。

  1. IP報文對IP首部校驗原因

IP首部屬於IP層協議的內容,上層協議無法處理。

IP首部的部分字段在點到點的傳遞過程中是不斷變化的,只能在每個中間點重新形成校驗數據,在相鄰點完成校驗。

 

參考:

https://www.cnblogs.com/red-code/p/7132023.html

https://blog.csdn.net/ever_peng/article/details/80054212

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章