一、IP 協議
IP(Internet Protocol)協議是一種網絡層協議,它用于在計算機網絡中實現數據包的傳輸和路由。
IP協議的主要功能有:
1. 數據報格式:IP協議將待傳輸的數據分割成一個個數據包,每個數據包包含有源地址、目的地址、數據內容和其他控制信息。
2. 路由選擇:IP協議通過路由器將數據包從源地址傳輸到目的地址,路由器根據目的地址選擇最佳路徑進行傳輸。
3. 路由尋址:IP協議使用IP地址來標識網絡中的設備和主機,通過IP地址可以確定數據包的源地址和目的地址。
4. 分組傳輸:IP協議將數據包分割成較小的數據片段(分組),每個分組都包含了源地址和目的地址等信息,分組可以獨立傳輸,然后在目的地址重新組裝。
5. 數據包重傳:IP協議可以通過檢測丟失的數據包,并進行重傳,以確保數據的可靠性。
6. IP地址分配:IP協議管理和分配IP地址,確保網絡中的設備可以正確地發送和接收數據包。
IP協議是互聯網的核心協議之一,它通過將數據包從源地址傳輸到目的地址,實現了全球范圍內的數據交換和通信。同時,IP協議也為其他網絡協議提供了基礎,如TCP、UDP等傳輸層協議都是在IP協議之上運行的。
二、IPv4
2.1?IPv4 頭
IPv4頭部是IP協議中數據包的固定部分,它包含了一系列字段,用于傳輸和路由數據包。IPv4頭部的長度為20字節,可以擴展到最多60字節。
0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (if any) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IPv4頭部的字段包括:
1. 版本(Version):占4位,表示IP協議的版本,IPv4為4。
2. 首部長度(Header Length):占4位,表示IPv4頭部的長度,以4字節為單位。由于IPv4頭部長度是可變的,所以需要乘以4來得到實際的字節數。
3. 服務類型(Type of Service):占8位,用于指定IP包的服務質量,如優先級、延遲、吞吐量等。
4. 總長度(Total Length):占16位,表示整個IP包的長度,包括頭部和數據部分。
5. 標識(Identification):占16位,用于唯一標識每個IP數據包。
6. 標志(Flags):占3位,用于標識是否分片以及分片的處理。其中最后一位為“不分片標志”,表示是否允許數據包進行分片。
7. 片偏移(Fragment Offset):占13位,表示數據包在原始數據中的位置,用于重組分片。
8. 生存時間(Time to Live):占8位,表示數據包在網絡中允許經過的最大跳數,每經過一個路由器,該值減1,直到為0時被丟棄。
9. 協議(Protocol):占8位,表示上層協議的類型,如TCP、UDP、ICMP等。
10. 首部校驗和(Header Checksum):占16位,用于檢驗IPv4頭部的完整性。
11. 源IP地址(Source IP Address):占32位,表示數據包的源IP地址。
12. 目的IP地址(Destination IP Address):占32位,表示數據包的目的IP地址。
IPv4頭部之后是可選的選項字段,用于提供額外的信息或進行特定的處理,長度可變。
IPv4頭部的字段信息和標志位的設置對數據包的傳輸和路由起著關鍵作用,它們決定了數據包的優先級、分片處理、路由選擇等。通過這些字段,IPv4協議實現了數據包的可靠傳輸和全球范圍內的路由選擇。
抓包分析
2.2?IP 分片
IP分片是指將一個較大的IP數據包拆分成多個較小的IP數據片段進行傳輸的過程。這是由于互聯網中,不同網絡設備和鏈路對數據包的最大傳輸單元(MTU)有限制,如果數據包超過MTU,就需要將其分成適合MTU大小的片段進行傳輸。
IP分片涉及到兩個重要字段:標志(Flags)和片偏移(Fragment Offset)。
標志字段有3個位,包括:
- 最高位:保留位,始終設置為0。
- 第二位:不分片(DF,Don't Fragment)標志位,如果設置為1,表示數據包不允許分片。
- 第三位:更多分片(MF,More Fragments)標志位,如果設置為1,表示還有更多的分片。
片偏移字段占13位,表示數據片段在原始數據中的位置,以8字節為單位。
當一個數據包需要分片時,發送方將數據包分成適合MTU大小的片段,并設置標志和偏移字段。接收方在接收到這些片段后,根據標志和偏移字段進行重組,恢復原始的數據包。
重組過程包括以下步驟:
1. 接收方收到第一個片段時,它會檢查不分片標志(DF)是否設置為1。如果是,表示不允許分片,那么接收方會丟棄整個數據包,并發送ICMP“分片被禁止”消息給發送方。
2. 接收方根據標志和偏移字段,將收到的片段按照片偏移進行排序。片偏移為0的片段是原始數據包的第一個片段,其他片段按照片偏移的大小進行排序。
3. 接收方根據片偏移和片段的長度,將這些片段進行重組,恢復原始的數據包。
4. 如果還有更多的分片(MF標志設置為1),接收方會繼續等待后續的片段,直到收到最后一個片段(MF標志設置為0)。
5. 如果接收方在一定時間內沒有收到后續片段,它會丟棄已接收的片段,并發送ICMP“分片超時”消息給發送方。
IP分片可以確保大的數據包能夠在網絡中正確傳輸,但它也增加了網絡延遲和處理的復雜性。因此,在設計網絡應用時,盡量避免產生大的數據包,或者使用更高層的協議(如TCP)來處理分片和重組。
三、IPv6
3.1 IPv6 包結構
以下是一個簡化版的IPv6包結構表格,以及其中各個字段的含義解析:
字段名稱 | 長度(bits) | 描述 |
---|---|---|
版本 | 4 | IP協議版本號,固定為6,代表IPv6 |
流量類別 | 8 | 用于QoS(服務質量)的傳輸類型域 |
流標簽 | 20 | 簡化5元組,實現基于網絡層流量識別 |
負載長度 | 16 | IPv6負載的長度(不包括包頭) |
下一個包頭 | 8 | 標識下一個包頭類型或上層協議類型 |
跳數限制 | 8 | 數據包在轉發過程中可以經過的最大路由器數 |
源地址 | 128 | 數據包發送方的地址 |
目的地址 | 128 | 數據包接收方的地址 |
IPv6包頭中的這些字段共同定義了IPv6數據包的格式和傳輸方式。
- 版本字段:用于標識IP協議版本,IPv6的值為6。
- 流量類別字段:提供關于數據包優先級和QoS需求的信息,以便網絡設備進行相應處理。
- 流標簽字段:用于網絡流量識別,簡化路由選擇和其他網絡操作。
- 負載長度字段:指示IPv6包頭后的數據長度,包括擴展頭和上層協議數據單元。
- 下一個包頭字段:標識緊隨當前包頭之后的下一個包頭類型或上層協議類型,用于數據包處理過程中的解析和轉發。
- 跳數限制字段:類似于IPv4的生存時間(TTL)字段,每經過一個路由器,該字段值減1,當值為0時,數據包將被丟棄,以防止數據包在網絡中無限循環。
- 源地址和目的地址字段:分別標識數據包的發送方和接收方地址,采用128位的IPv6地址格式,提供更大的地址空間。
請注意,這只是一個簡化版的IPv6包頭結構表格,實際的IPv6包可能還包含擴展包頭和上層協議數據單元等部分。此外,IPv6包頭中的某些字段可能具有更復雜的結構和功能,需要根據具體的應用場景和協議規范進行深入了解。
3.2 鄰居請求
IPv6 不支持廣播流量,所以解析 ARP 時會用到另一種新協議
IPv6中的鄰居請求(Neighbor Solicitation,NS)是IPv6鄰居發現協議(Neighbor Discovery Protocol,NDP)中的一個重要消息類型。鄰居發現協議用于在IPv6中執行類似IPv4中ARP(地址解析協議)的功能,以及處理IPv6中的路由器發現和前綴重新編號等問題。
鄰居請求消息的主要作用包括:
-
地址解析:當一個IPv6節點想要知道某個IPv6地址對應的鏈路層地址(如MAC地址)時,它會發送一個鄰居請求消息。這個請求消息會廣播到本地鏈路上,詢問是否有節點擁有這個特定的IPv6地址。
-
鄰居可達性檢測:IPv6節點可以使用鄰居請求消息來檢測鄰居節點是否仍然可達。這通常是通過發送一個鄰居請求消息并等待相應的鄰居通告(Neighbor Advertisement,NA)消息來完成的。
-
重復地址檢測(DAD):當一個節點配置了一個新的IPv6地址時,它會發送鄰居請求消息來檢查該地址是否已經被網絡上的其他節點使用。如果收到鄰居通告消息,則說明該地址已經被使用,節點需要選擇一個新的地址。
鄰居請求消息的格式如下:
- 類型:標識消息類型為鄰居請求。
- 代碼:對于鄰居請求消息,此字段通常設置為0。
- 校驗和:用于驗證消息的完整性。
- 目標地址:節點想要解析其鏈路層地址的IPv6地址。
- 選項:可以包含各種附加信息,如源鏈路層地址選項(用于在響應中包含發送方的鏈路層地址)。
當一個節點發送鄰居請求消息時,它會等待一段時間以接收可能的鄰居通告消息。如果沒有收到響應,或者響應表明目標地址不可用,節點會采取相應的操作,如重新配置地址或標記目標節點為不可達。
鄰居請求和鄰居通告消息一起,在IPv6中實現了地址解析、鄰居可達性檢測和重復地址檢測等關鍵功能,確保了IPv6網絡中的節點能夠高效、準確地發現和維護鄰居節點的信息。
如果對應請求報文
鄰居通告報文
關于 Flags 字段解釋:
-
Router?(設置): 這個標志位表明發送該消息的設備是一個路由器。在IPv6中,路由器會設置這個標志位,以便網絡中的其他節點能夠知道它們可以通過這個設備到達其他網絡。
-
Solicited?(設置): 這個標志位表示該消息是對之前的一個請求的直接響應。在鄰居發現過程中,當一個節點發送鄰居請求消息時,收到該請求的鄰居節點會在其響應的鄰居通告消息中設置Solicited標志位,以指示這是一個對請求的響應。
-
Override?(設置): 這個標志位用于處理地址解析中的沖突。當設備收到一個鄰居通告消息時,如果它已經有一個關于目標IPv6地址的緩存條目,并且該條目的鏈路層地址與通告中的不同,那么Override標志位決定了是否應該更新緩存中的鏈路層地址。如果Override標志位被設置,那么緩存中的條目將被更新為通告中的鏈路層地址。
-
Reserved?(值為0): 這個字段是保留字段,用于將來的擴展。當前其值被設置為0,表示沒有使用任何保留位。
3.3 IPv6 分片
在IPv6中,與IPv4不同,IPv6數據包的分片過程更加簡化,因為IPv6要求中間網絡設備(如路由器)必須支持最大傳輸單元(MTU)的路徑發現和通告,以確保數據包不需要進行分片。
IPv6頭部中沒有像IPv4中的分片字段(標志和片偏移),而是引入了"分片擴展頭部"(Fragment Header)來處理分片。
IPv6分片的過程如下:
1. 發送方根據所需的MTU大小,將數據包進行分片。
2. 發送方在原始IPv6頭部后添加一個或多個分片擴展頭部,每個分片擴展頭部對應一個分片。
3. 每個分片擴展頭部包含了分片的順序編號(Fragment Offset)和更多分片(MF)標志位。
4. 接收方通過檢查分片擴展頭部來確定是否存在分片,并按順序重組分片。
5. 接收方根據分片擴展頭部中的順序編號將分片按照正確的順序重組成原始數據包。
6. 如果還有更多分片,接收方會等待后續的分片,直到收到最后一個分片(MF標志位設置為0)。
7. 如果接收方在一定時間內沒有收到后續分片,它會丟棄已接收的分片,并且不會發送任何分片超時的消息。
需要注意的是,IPv6中的分片是端到端的,也就是說,只有發送方和接收方之間進行分片和重組,中間的路由器不會進行分片操作。這使得IPv6網絡中的路由器更加簡化,提高了路由器的性能和可擴展性。
由于IPv6中的分片是在端到端進行的,因此在設計網絡應用時,應該盡量避免產生大的IPv6數據包,以減少分片的需求,從而提高網絡性能和可靠性。
3.4 IPv6 轉換協議
IPv6轉換協議(IPv6 Transition Protocols)是一組協議和機制,用于實現IPv6和IPv4之間的互操作性和平滑過渡。這些協議和機制旨在幫助IPv4和IPv6網絡之間進行通信,并逐步過渡到純IPv6網絡。
以下是一些常見的IPv6轉換協議:
1. IPv6 over IPv4 Tunneling(IPv6通過IPv4隧道傳輸):
? ?- 6to4:將IPv6數據包封裝在IPv4數據包中,通過IPv4網絡進行傳輸,以實現IPv4到IPv6的通信。
? ?- ISATAP(Intra-Site Automatic Tunnel Addressing Protocol):通過IPv4網絡創建虛擬的IPv6鏈路,使IPv6主機能夠直接通信。
? ?- Teredo:通過UDP隧道在IPv4網絡上傳輸IPv6數據包,允許IPv6主機在IPv4網絡上進行全球IPv6連接。
2. IPv6 over IPv4 Translation(IPv6通過IPv4地址轉換):
? ?- NAT64(Network Address Translation 64):使用IPv6地址和IPv4地址之間的轉換,實現IPv6主機與IPv4主機之間的通信。
? ?- SIIT(Stateless IP/ICMP Translation):無狀態的IPv6和IPv4地址轉換技術,通過映射IPv6地址和IPv4地址來實現互操作性。
3. Dual Stack(雙棧):
? ?- 在支持IPv6的網絡設備上同時啟用IPv4和IPv6協議棧,以實現IPv4和IPv6之間的雙向通信。
4. IPv6/IPv4 Proxy(IPv6/IPv4代理):
? ?- 在IPv4環境中,代理服務器接收IPv6請求,并將其轉換為IPv4請求,并將IPv4響應轉換為IPv6響應,以實現IPv6和IPv4之間的通信。
這些IPv6轉換協議和機制提供了不同的方式來促進IPv4和IPv6之間的互通性和平滑過渡。它們可以在IPv4和IPv6之間提供中間解決方案,使得在網絡升級和過渡期間能夠繼續進行通信,并逐步遷移到純IPv6環境。