第7章 網路層協議(1)_網路層首部
1. 網路層首部
1.1 網路層協議
(1)TCP/IP協議棧網路層的4個協議:IP協議、ICMP協議、IGMP協議和ARP協議。
(2)IP協議:動態路上協議的統稱,包括RIP和OSPF協議。
(3)TCP/IP協議分成四層:應用層定義了客戶端和伺服器通訊規範,傳輸層實現可靠傳輸,網路層負責為資料包選擇轉發路徑,資料鏈路層負責將資料包封裝成幀傳送到數字鏈路上。
1.2 檢視網路層首部
1.3 網路層首部格式
(1)版本:佔4位,指IP協議的版本。目前有兩個版本IPv4和IPv6。
(2)首部長度:佔4位,能表示的最大十進位制數值為15(60個位元組,即固定部分+可變部分的最大長度為60位元組
(3)區分服務:佔8位,配置計算機給特定應用的資料包新增一個標誌,然後再配置網路中的路由器優先轉發這些帶標誌的資料包。在網路頻寬比較緊張的情況下,這種區分服務能確保服務質量(Quality of Service,QoS)。只有在使用區分服務時,該欄位才起作用。
(4)總長度:指IP首部和資料之和的長度,也就是資料包的長度,單位為位元組。該欄位能表示的最大長度為65535位元組。但資料鏈路層乙太網所能封裝的資料包最大為1500位元組,這就意味著一個IP資料包長度大於鏈路層的MTU時,需要將該資料包分片
(5)標識:佔16位。IP軟體在儲存器中維持一個計數器,每產生一個數據包,計數器加1,並將此值賦給標識欄位。這個計數器會達到最大值後會回零迴圈使用。當資料包由於長度超過網路的MTU而必須分片時,同一個資料包被分成多個片,這些片的標識都一樣,這樣接收端才能將這些分片重灌成原來的資料包。
(6)標誌:佔3位。目前只有兩位有意義。
①最低位記為MF(More Fragment),當MF=1表示後面“還有分片”的資料包。MF=0時表示這巳是若干資料包中的最後一個。
②標誌欄位中間的一位記為DF(Don’t Fragment)。意思是“不能分片”
(7)片偏移:佔13位。片偏移指出較長的分組在分片後,某片在原分組中的相對位置(單位為8位元組)
①假設3個分片資料包中的資料部分長度分別為1400、1400、1000位元組。
②原始資料包首部被複製為各資料包片的首部(但必須修改相關欄位的值)
③片偏移是以位元組為單位的,如175表示175*8=1400位元組處的偏移。
(8)生存時間(Time To Live,TTL):每過一個路由器TTL減1,當TTL為0時,就丟棄該資料包而不再轉發。
(9)協議:佔8位,協議欄位指出此資料包(資料部分)攜帶的資料使用何種協議。以便使目標主機的網路層知道應將資料部分上交哪個處理過程。常用的協議和相應的協議欄位如下圖所示。
協議名 |
ICMP |
IGMP |
IP |
TCP |
EGP |
IGP |
UDP |
IPv6 |
ESP |
OSPF |
欄位值 |
1 |
2 |
4 |
6 |
8 |
9 |
17 |
41 |
50 |
89 |
(10)首部檢驗和:佔16位,這個欄位只檢驗資料報的首部,但不包括資料部分。這是因為每經過一個路由器。路由器都要重新計算一下首部檢驗和(如TTL、標誌和片偏移可能發生變化)
(11)源IP和目標IP。各佔32位。
1.4 實戰
(1)檢視協議版本和首部長度
①為Win7虛擬機器A和B設定IPv4和IPv6兩種地址。如A機IPv4為192.168.80.10/24,IPv6為2001:2012:1975::6/64。B機IPv4為192.168.80.20/24,IPv6為2001:2012:1975::8/64。
②在A機上裝Winshare抓包工具,並ping虛擬機器B中IPv4和IPv6地址(如ping 2001:2012:1975::8)
③注意:ping計算機B的IPv4地址的資料包使用的是ICMP協議,網路層首部Version標記為4,首部長度為20位元組。IPv6使用的是ICMPPv6協議,Version標記為6,IPv6網路層首部長度固定為40個位元組,所以沒有首部長度欄位。
(2)給資料包設定區分服務欄位(以給訪問網站的請求流量包增加區分服務標記為例)
①開啟組策略(gpedit.msc)→“計算機配置”→“Windows”→“基於策略的Qos” →“新建策略”。
②在“建立Qos策略”對話方塊中指定策略名稱,選中“指定DSCP值”為8(8為區分服務的優先順序,範圍為0-63)。然後“下一步”,選擇此Qos策略應用於“所有應用程式”、“任意源IP地址”、“任意目標IP”。
③再“下一步”,在指出“指定協議和埠號”對話方塊中選擇 TCP協議,源埠選擇任意,接收埠中輸入80。這也是計算機訪問網站傳送出去的資料包目標埠。
④執行Wireshark。開啟一個網站,捕獲資料包。找到訪問網站傳送的請求資料包(http、tcp),可以看到該資料包添加了區分服務,值為0x08。
(3)捕獲並觀察資料包分片
①ping命令構造的資料包預設是32位元組,可以使用-l引數指定資料包大小,-f引數指定資料包是否允許分片。如ping www.baidu.com –l 3500 (資料包大小為3500位元組,而乙太網MTU大小為1500位元組,故會被分成三片)
②第1個ICMP資料包被分為3個分片,三個分片的標識都是11110,第1個分片標誌為1,片偏移為0。第2個分片的分片標誌為1,片偏移為1480。第3個分片的分片標誌為0,意味著這是最後一個分片,片偏移為2960。
③禁止分片可以將Flags欄位的第二位(Don’fragment)設定為1.如ping時指定了資料包大小的同時,可以新增一個引數-f來禁止分片。如ping www.baidu.com–f。然後用Wireshare抓包捕獲ICMP包,檢視該標誌位,如果為1表示不允許分片。
(4)檢視和配置鏈路的MTU
①檢視鏈路的MTU:R1#show interface serial 1/0,可以找到MTU的值
②在R1上設定Serial 1/0介面的鏈路MTU為500
R1#conf t
R1(config)#interface serial 1/0
R1(config-if)#mtu 500
③也需要在R2上配置Serial 1/0介面的鏈路MTU為500
(5)資料包生存時間(TTL)
①作業系統傳送資料包的預設TTL值
作業系統 |
預設TTL值 |
備註 |
WinNT4.0/2000/xp/2003 |
128 |
Win7可以在登錄檔中新增一個DefaultTTL來設定預設的TTL值。 HKLM\System\CurrentControlSet\Services\Tcpip\Parameters下將DefaultTTL的值改為Dword型別的值,如,十進位制的64. |
Win95/98/NT3.51 |
32 |
|
Linux |
64 |
|
MacOS/MacTCP2.0x |
60 |
②ping命令中通過-i指定傳送的ICMP請求資料包的TTL值。每經過一個路由器TTL減1,當TTL=0時,路由器會丟棄該資料包,然後產生一個ICMP響應資料包給傳送者,說明TTL耗盡。通過這種方式,可以將TTL分別指定為1、2、3,…來檢視到達目標地址經過哪些路由器)。如ping www.baidu.com -i 1檢視經過的第1個路由器。
③抓包檢視資料包TTL變化
注意:R1的預設路由指向R2的s2/0介面地址,R2的預設路由指向R1的s2/0介面。而ping 131.107.1.2時,這個地址並不存在,會發生ICMP請求資料包在R1和R2之間往復轉發,TTL不斷減1,直到變為0時被丟棄。