第7章 网络层协议_网络层首部

Posted 浅墨浓香

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第7章 网络层协议_网络层首部相关的知识,希望对你有一定的参考价值。

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时被丢弃。

以上是关于第7章 网络层协议_网络层首部的主要内容,如果未能解决你的问题,请参考以下文章

计网网络层首部

计网网络层首部

第7章 网络层协议_ICMP协议

【网络协议笔记】第四层:传输层(Transport)TCP协议简介(1)

第7章 网络层协议_IGMP协议

linux网络协议栈源码分析 - 网络层IP网际协议