1. 程式人生 > >第7章 網路層協議(1)_網路層首部

第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位元組

)(注意,該欄位的單位為4個位元組)。當IP分組的長度不是4位元組的整數倍時,必須利用最後的填充欄位加以填充。

(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)。意思是“不能分片”

。只有DF=0時才允許分片。

(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時被丟棄。