###IPv4地址
IPv4地址分成網絡部分和主機部分
IPv4地址根據定義可分為:
- A類地址
a. 第一字節的第一位為0
b. 第一字節的數值范圍為1-126 - B類地址
a. 第一字節的第一和第二位為10的一組地址
b. 第一字節的數值范圍為128-191 - C類地址
a. 第一字節的第一、第二和第三位為110的一組地址
b. 第一字節的數值范圍192-223
主網以及子網劃分
主網采用自然掩碼
- A類網絡中使用8位掩碼 1-126 255.0.0.0
- B類網絡中使用16位掩碼 128-191 255.255.0.0
- C類網絡中使用24位掩碼 192-223 255.255.255.0
子網劃分是把整個主類網絡地址繼續劃分為更多的子網地址,屬于在主網內部重新劃分不同子網行為
IPv4報文
- 版本號(Version):長度4bit 標識目前采用的IP協議和版本號
a. 0100代表IPv4
b. 0110代表IPv6 - 報文頭長度(Header Length):長度4bit 這個字段的作用是為了描述IP報文頭的長度
a. IP報文頭的長度最長為60Byte 最小長度為20Byte - 服務類型(Type of Service):長度8bit 用于實施QoS
a. RFC 791中TOS的IP precedence將數據流分為8個優先級,取值越大優先級越高
b. RFC 2474中又對TOS進行了重新的定義,把前6位定義成DSCP,可以標識64中等級,后兩位保留 - 報文總長度(Total length):長度16bit 以Byte為單位計算IP報文的長度(包括報文頭部和數據),所以IP報文最大長度位65535Byte
- 標識符(identifier):長度16bit 該字段與Flags和Fragment Offset字段聯合使用,對較大的上層數據包進行分段操作,路由器將一個包拆分后,所有拆分開的小包被標記相同的值,以便目的端設備能夠區分那個包屬于被拆分開的包的一部分
- 標記(Flags):長度3bit
a. 該字段第一位不使用
b. 第二位是DF(Don’t Fragment)位,DF位為1時表明路由器不能對該上層數據包分段。如果一個上層數據包無法在不分段的情況下進行轉發,則路由器會丟棄該上層數據包并返回一個ICMP錯誤信息
c. 第三位是MF(More Fragment)位,當路由器對一個上層數據包分段,則路由器會在除了最后一個分段的IP報文的頭中將MF位設為1 - 片偏移(Fragment Offset):長度3bit 表示該IP報文在矮族分片中的位置,接收端靠此來組裝還原IP報文
- 生存時間(TTL):長度8bit 當IP報文經過每一個沿途的路由器的時候,TTL值減一,如果TTL減少為0,則該IP報文會被丟棄。這個字段可以防止由于路由環路導致IP報文在網絡中不停被轉發
- 協議(Protocol):長度8bit 標識了上層所使用的協議。例如ICMP(協議號為1)、OSPF(協議號89)
- 頭部校驗(Header Checksum):長度16bit 用來做IP頭部的正確性檢測,但不包含數據部分
- 源和目標地址(Source and Destination Address):這兩個字段都是32bit 標識了IP報文的源地址和目的地址
- 可選項(Options):一個可變長字段,該字段屬于可選項
a. 松散源路由(Loose Source Routing):給出一連串路由器接口的IP地址。IP包必須沿著這些IP地址傳送,但是允許在相繼的兩個IP地址之間跳過多個路由器
b. 嚴格源路由(Strict Source Routing):給出一連串路由器接口的IP地址。IP包必須沿著這些IP地址傳送,如果下一跳不在IP地址表中表示發生錯誤
c. 路有記錄(Record Route):當IP包離開每隔路由器的時候記錄路由器的出站接口的IP地址
d. 時間戳(Timestamps):當IP包離開每隔路由器的時候記錄時間 - 填充(Padding):因為IP報文頭長度部分的單位為32bit,所以IP報文頭長度必須為32bit的整數倍,因此,在可選項后面,IP協議會填充若干個0,以達到32bit的整數倍