目錄
IPv4地址
分類
IP數據報分片
IP 協議在傳輸數據報時,將數據報分為若干分片(小數據報)后進行傳輸,并在目的系統中進行重組,這一過程稱為分片(Fragmentation)。
IP模塊工作流程?編輯
IP(網際互連協議,Internet Protocol)是TCP/IP協議族中最為核心的協議。所有的 TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸。
報文格式
版本:占4位,指IP協議的版本。通信雙方使用的IP協議的版本必須一致。目前廣泛使用的IP協議版本號為4(即IPv4),以后要使用IPv6(即版本6的IP協議)。
首部長度:占4位,可表示的0~15,單位是4B。因為IP首部的固定長度是20字節,因此首部長度字段的最小值是5(即二進制表示的首部長度是0101)。而當首部長度為最大值1111時(即十進制數的15),就表明首部長度達到最大值15個32位字長,即60字節。當IP分組的首部長度不是4字節的整數倍時,必須利用最后的填充字段加以填充。因此IP數據報的數據部分永遠在4字節的整數倍時開始。首部長度限制為60字節的缺點是有時可能不夠用,但這樣做是希望用戶盡量減少開銷。最常用的首部長度是20字節(即首部長度為0101),這時不使用任何選項。
區分服務:占8位,用來獲得更好的服務。這個字段在舊標準中叫做服務類型,但實際上一直沒有被使用過。1998年IETF把這個字段改名為區分服務DS(DifferentiatedServices)。只有在使用區分服務時,這個字段才起作用,在一般的情況下都不使用這個字段。
總長度:占16位,指首部和數據之和的長度,單位為字節。總長度字段為16位,因此數據報的最大長度為2^16-1=65535字節。
標識(identification)占16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,并將此值賦給標識字段。當數據報由于長度超過網絡的MTU而必須分片時,這個標識字段的值就被復制到所有的數據報片的標識字段中。相同的標識字段的值使分片后的各數據報片最后能正確地重裝成為原來的數據報。
標志(flag)占3位,但目前只有低兩位有意義。標志字段中的最低位記為MF(More Fragment)。MF=1即表示后面“還有分片”的數據報。MF=0表示這已是若干數據報片中的最后一個。標志字段中間的一位記為DF(Don't Fragment),意思是“不能分片”。只有當DF=0時才允許分片。
片偏移占13位。片偏移指出:較長的分組在分片后,某片在原分組中的相對位置。也就是說,相對于用戶數據字段的起點,該片從何處開始。片偏移以8個字節為偏移單位。這就是說,除了最后一個分片,長度一定是8字節(64位)的整數倍,最后一個分片可能是8字節(64位)的整數倍。
生存時間占8位,生存時間字段常用的英文縮寫是TTL(Time To Live),表明這是數據報在網絡中的壽命。由發出數據報的源點設置這個字段。其目的是防止無法交付的數據報無限制地在互聯網中兜圈子(例如從路由器R1轉發到R2,再轉發到R3,然后又轉發到R1),因而白白消耗網絡資源。最初的設計是以秒作為TTL值的單位。每經過一個路由器時,就把TTL減去數據報在路由器所消耗掉的一段時間。若數據報在路由器消耗的時間小于1秒,就把TTL值減1。當TTL值減為零時,就丟棄這個數據報。
協議占8位,協議字段指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個協議進行處理。至少記住TCP和UDP(騰訊安全工程師筆試題)。
IPv4地址
分類
IP地址表示如下:
IP地址::={<網絡號>,<主機號>}
二進制對于人類來說很難記憶,所以我們將IP地址分為上面的4個部分,每個部分8位(0-255),使用.分隔,就是點分十進制。
A類IP地址 地址范圍1.0.0.1-126.255.255.254(二進制表示為:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110)
B類IP地址地址范圍128.1.0.1-191.254.255.254(二進制表示為:10000000 00000001 00000000 00000001 - 10111111 11111110 11111111 11111110)
C類IP地址范圍192.0.1.1-223.255.254.254(二進制表示為: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110)
D類IP地址范圍224.0.0.1-239.255.255.254(二進制表示為:11100000 00000001 00000001 00000001 - 11101111 11111111 11111111 11111110)
A類是7位,應該是0-127呀,為什么是1-126呢?因為一些規定,有些ip作為了特殊ip,不能作為A類地址的網絡。
除去特殊ip后
IP數據報分片
IP 協議在傳輸數據報時,將數據報分為若干分片(小數據報)后進行傳輸,并在目的系統中進行重組,這一過程稱為分片(Fragmentation)。
MTU,物理網絡一次傳送的數據是有最大長度的,因此網絡層的下層(數據鏈路層)的傳輸單元(數據幀)也有一個最大長度,這個最大長度值就是 MTU,每一種物理網絡都會規定鏈路層數據幀的最大長度,比如以太網的 MTU 為 1500 字節。
IP 協議在傳輸數據報時,若IP數據報加上數據幀頭部后長度大于 MTU,則將數據報切分成若干分片后再進行傳輸,并在目標系統中進行重組。IP 分片既可能在源端主機進行,也可能發生在中間的路由器處,因為不同網絡的 MTU 是不一樣的,而傳輸的整個過程可能會經過不同的物理網絡。如果傳輸路徑上的某個網絡的 MTU 比源端網絡的 MTU 要小,路由器就可能對 IP 數據報再次進行分片。分片數據的重組只會發生在目的端的 IP 層。
IP模塊工作流程
從右往左分析:
先從網絡驅動程序(網卡)中獲取IP地址信息,將其放入到IP輸入隊列中。
對數據報的頭部做CRC校驗,判斷數據報是否發生錯誤,確認無誤,進行下一步操作。
檢驗是否接收端是本主機,如果目標IP地址是本網段中的某個IP地址,則將數據發送給具體主機,主機通過端口號確保發送給哪一個應用。如果不是則將該網段中的地址,進行數據報轉發。
判斷數據報是否允許轉發,允許轉發則轉發,不允許則丟棄。
IP輸出隊列存放的是等待發送的IP數據報,除過要發送的IP地址外,還包括ICMP報文、TCP報文、UDP報文。