https://home.cnblogs.com/group/topic/8550.html

韩立刚计算机网络笔记-第07章 网络层协议

第07章 网络层协议

7.1网络层首部

image-20200612234929865

7.1.1抓包查看网络层首部

image-20200612234956263

7.1.2网络层首部格式

IP数据包首部的格式能够说明IP协议都具有什么功能。

IP数据包由首部和数据两部分组成。首部的前一部分是固定长度,共20个字节,是所有IP数据包必须有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

image-20200612235006170

网络层首部固定部分各个字段(1)

(1)版本 占4位,指IP协议的版本。IP协议目前有两个版本IPv4和IPv6。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。

(2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位二进制数(即4个字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。

(3)区分服务 占8位,配置计算机给特定应用程序的数据包添加一个标志,然后再配置网络中的路由器优先转发这些带标志的数据包,在网络带宽比较紧张的情况下,也能确保这种应用的带宽有保障,这就是区分服务,为这种服务确保服务质量(Quality of Service,QoS)。

(4)总长度 总长度指IP首部和数据之和的长度,也就是数据包的长度,单位为字节。总长度字段为16位,因此数据包的最大长度为216-1=65535字节。实际上传输这样长的数据包在现实中是极少遇到的。

如果超过1500字节,会进行分片,每片加上网络层首部,顺序,接收端组装合并,通过标识来确认是一个包分片得到,但一般包不超过1500。

image-20200612235021390

(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据包,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据包不存在按序接收的问题。当数据包由于长度超过网络的MTU而必须分片时,同一个数据包被分成多个片,这些片的标识都一样,也就是数据包这个标识字段的值就被复制到所有的数据包分片的标识字段中。相同的标识字段的值使分片后的各数据包片最后能正确地重装成为原来的数据包。

(6)标志(flag) 占3位,但目前只有两位有意义。标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据包。MF=0表示这己是若干数据包片中的最后一个。标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才一允许分片

(7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

image-20200612235038086

片偏移 示例

image-20200612235047995

(8)生存时间 生存时间字段常用的英文缩写是TTL(Time To Live),表明是数据包在网络中的寿命。现在TTL字段的功能改为“跳数限制”,数据包能经过多少路由器。

(9)协议 占8位,协议字段指出此数据包携带的数据是使用何种协议,以便使目的主机的网络层知道应将数据部分上交给哪个处理过程。

image-20200612235101938

(10)首部检验和 占16位,这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

7.1.3实战:查看协议版本和首部长度

image-20200612235113664

image-20200612235122222

7.1.4实战:给数据包设置区分服务字段

image-20200612235130905

image-20200612235142779

7.1.5数据分片详解

在IP层下面的每一种数据链路层都有其特有的帧格式,帧格式也定义了帧中数据字段的最大长度,数据字段最大长度称为最大传送单元MTU(Maximum Transfer Unit)。当一个IP数据包封装成链路层的帧时,此数据包的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。例如以太网就规定其MTU值是1500字节。若所传送的数据包长度超过数据链路层的MTU值,就必须把过长的数据包进行分片处理。

在计算机A的数据链路层分片

image-20200612235206705

在R1和R2链路的数据链路层分片

image-20200612235230015

7.1.6实战:捕获并观察数据包分片

C:\Users\win7>ping www.cctv.com -l 3500

正在 Ping cctv.xdwscache.ourglb0.com [111.11.31.114] 具有 3500 字节的数据:

来自 111.11.31.114 的回复: 字节=3500 时间=10ms TTL=128

来自 111.11.31.114 的回复: 字节=3500 时间=11ms TTL=128

来自 111.11.31.114 的回复: 字节=3500 时间=10ms TTL=128

来自 111.11.31.114 的回复: 字节=3500 时间=11ms TTL=128

image-20200612235242607

image-20200612235256356

image-20200612235302832

image-20200612235311812

image-20200612235317007

7.1.7实战:查看和配置链路MTU

可以设置路由器接口的MTU。

image-20200612235330794

R1#show interfaces serial 1/0

Serial1/0 is up, line protocol is up

Hardware is M4T

Internet address is 172.16.0.1/24

MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,

设置接口的MTU

R1(config)#interface serial 1/0

R1(config-if)#mtu 500

7.1.8数据包生存时间(TTL)详解

各种操作系统发送数据包,在网络首部都要给TTL字段赋值,用来限制该数据包能够通过的路由器数量,下面列出一些操作系统发送数据包默认的TTL值。

Windows NT 4.0/2000/XP/2003 128

MS Windows 95/98/NT 3.51 32

Linux 64

MacOS/MacTCP 2.0.x 60

image-20200612235409858

7.1.9实战:指定ping命令发送数据包的TTL值

虽然操作系统会给发送的数据包指默认的TTL值,但是ping命令允许我们使用参数-i指定发送的ICMP请求数据包的TTL值。

一个路由器在转发数据包之前将该数据包的TTL减1,如果减1后TTL变为0,路由器就会丢弃该数据包,然后产生一个ICMP响应数据包给发送者,说明TTL耗尽。通过这种方式,你能够知道到达目标地址经过哪些路由器。

image-20200612235422760

C:\Users\han>ping edu.51cto.com -i 2

正在 Ping yun.dns.51cto.com [120.55.239.108] 具有 32 字节的数据:

来自 172.16.0.250 的回复: TTL 传输中过期。

来自 172.16.0.250 的回复: TTL 传输中过期。

来自 172.16.0.250 的回复: TTL 传输中过期。

来自 172.16.0.250 的回复: TTL 传输中过期。

image-20200612235536140

image-20200613000110820

7.1.10实战:抓包查看数据包的TTL变化

ping一个不存在的网段,会在R1和R2中间来回转,TCL逐渐减小

image-20200613000118006

image-20200613000132316

7.2 ICMP协议

ICMP协议是TCP/IP协议栈中的网络层的一个协议,ICMP是(Internet Control Message Protocol)Internet控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

ICMP报文是在IP数据报内部被传输的,它封装在IP数据报内。ICMP报文通常被IP层或更层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。

7.2.1抓包查看ICMP报文格式

ICMP报文分为:

ICMP请求报文

ICMP响应报文

ICMP差错报告报文

image-20200613000218584

image-20200613000225313

ICMP响应报文

image-20200613225902498

ICMP报文类型和代码

image-20200613225918477

ICMP报文类型和代码

(1)终点不可到达 当路由器或主机没有到达目标地址的路由时,就丢弃该数据包,给源点发送终点不可到达报文。

(2)源点抑制 当路由器或主机由于拥塞而丢弃数据包时,就会向源点发送源点抑制报文,使源点知道应当降低数据包的发送速率。

(3)时间超时 当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把己收到的数据报片都丢弃,并向源点发送时间超过报文。

(4)参数问题 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

(5)改变路由(重定向) 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。

7.2.2 ICMP报文格式

ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着4个字节的内容与ICMP的类型有关。

image-20200613225948830

ICMP差错报告报文的数据字段的内容

image-20200613230000470

7.2.3 ICMP差错报告报文-TTL过期

image-20200613230013264

7.2.4 ICMP差错报告报文-目标主机不可到达

image-20200613230027555

7.2.5 ICMP差错报告报文-路由重定向

image-20200613230040464

image-20200613230046238

7.2.6 ICMP差错报告报文-给程序返回错误消息

image-20200613230100254

image-20200613230105820

7.3使用ICMP排除网络故障案例

7.3.1 使用ping命令诊断网络故障

image-20200613230123417

7.3.2使用ping断定哪一段链路出现故障

image-20200613230131275

测试哪一段链路丢包

image-20200613230140724

断定是整个机房堵塞还是服务器网络堵塞

image-20200613230206358

7.3.3使用tracert跟踪数据包路径

Ping命令并不能跟踪从源地址到目标地址沿途经过了哪些路由器, Windows操作系统中的tracert命令是路由跟踪实用程序,用于确定IP数据报访问目标地址路径,能够帮助我们发现到达目标网络到底是哪一条链路出现了故障。Tracert 命令就是ping命令的扩展,用 IP报文生存时间 (TTL)字段和 ICMP差错报告报文来确定沿途经过的路由器。

Tracert工作原理如下图所示。

image-20200613230215513

7.3.4使用pathping跟踪数据包路径

Pathping是一个基于TCP/IP的命令行工具,该命令不但可以跟踪数据包从源主机到目标主机所经过的路径,还可以统计计算机网络延时以及丢包率,帮助我们解决网络问题,跟踪数据包路径的原理和tracert命令一样。

image-20200613230231522

7.4 ARP协议

A与F通信,A计算机通过发广播寻求网关的地址

ARP协议的作用,将以太网中的计算机的IP地址解析成MAC地址。

点到点链路使用PPP协议,不需要ARP协议。

image-20200613230239989

image-20200614122813155

R1#show arp

Protocol Address Age (min) Hardware Addr Тypе
Internet 192.168.10.1 2 0050.56c0.0001 ARPA
Internet 192.168.10.10 - cc02.26bc.0000 ARPA

在Windows上查看缓存的MAC地址arp -a

7.4.1ARP协议的工作过程和安全隐患

ARP协议是建立在网络中各个主机互相信任的基础上的,计算机A发送ARP广播帧解析计算机C的MAC地址,同一个网段中的计算机都能够收到这个ARP请求消息,任何一个主机都可以给计算机A发送ARP应答消息,可以告诉计算机A一个错误的MAC地址,计算机A收到ARP应答报文时并不会检测该报文的真实性,就会将其记入本机ARP缓存,这就存在一个安全隐患--ARP欺骗。

7.4.2 ARP欺骗之网络执法官

网络执法官软件可以控制以太网中的计算机通信

image-20200613230258509

查看解析的MAC地址

image-20200613230310372

7.4.3判断和防止ARP欺骗的方法

image-20200613230318843

7.5 IGMP协议

7.5.1什么是组播

Internet 组管理协议称为IGMP协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间,IGMP协议是网络层协议。要想搞明白IGMP协议的作用和用途,先要搞明白什么是组播通信,组播也称为多播。

image-20200613230331530

组播节省网络带宽

image-20200613230340197

流媒体服务器就像电视台,多播地址相当于不同的频道。可以使用两个组播地址向网络中发送两个课程的视频。网络的中的计算机绑定哪个多播地址就能收到哪个视频课程。

7.5.2组播IP地址

IP地址中的D类地址是组播地址。D类IP地址的前四位是1110,因此D类地址范围是224.0.0.0到239.255.255.255。我们就用每一个D类地址标志一个多播组。

多播地址只能用于目的地址,而不能用于源地址。

D类地址中有一些是不能随意使用的,因为有的地址己经被IANA指派为永久组地址了[RFC3330]。例如:

224.0.0.0基地址(保留)

224.0.0.1在本子网上的所有参加多播的主机和路由器

224.0.0.2在本子网上的所有参加组播的路由器

224.0.0.3未指派

224.0.0.4 DVMRP路由器

…….

224.0.1.0至238.255.255.255全球范围都可使用的组播地址

239.0.0.0至239.255.255.255限制在一个组织的范围

7.5.3组播MAC地址

目标地址是组播IP地址的数据包到达以太网,就要使用组播MAC地址封装,组播MAC地址使用组播IP地址构造。

为了支持IP 组播,因特网号码指派管理局IANA已经为 Ethernet的MAC地址保留了一个组播地址区间:01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF。如图7-84所示,组播MAC地址48位的MAC地址中的高25位是固定的,为了映射一个IP 多播地址到MAC层的组播地址,IP多播地址的低23位可以直接映射为MAC层组播地址的低23位。

image-20200613230402395

不同的组播IP地址可能构造出相同的多播MAC地址

比如组播IP地址224.128.64.32,如下图所示,使用上面的方法构造出的MAC地址为01-00-5E-00-40-20。

image-20200613230416505

组播IP地址224.0.64.32,如下图所示,使用上面的方法构造出的MAC地址也为01-00-5E-00-40-20。

image-20200613230420744

7.5.4组播管理协议(IGMP)

IGMP实现如下双向的功能:

  1. 主机通过IGMP通知路由器希望接收或离开某个特定组播组的信息。

  2. 路由器通过IGMP周期性地查询局域网内的组播组成员是否处于活动状态,实现所连网段组成员关系的收集与维护。

image-20200613230449492

7.6实战:跨网段观看组播视频

7.6.1搭建流媒体服务器

7.6.2点播视频

7.6.3访问多播视频

7.6.4跨网段多播

image-20200613230510185

配置路由器支持多播

R1#config t

R1(config)#ip multicast-routing

R1(config)#interface fastEthernet 0/0

R1(config-if)#ip pim dense-mode

R1(config-if)#exit

R1(config)#interface serial 2/0

R1(config-if)#ip pim dense-mode

R1(config-if)#^Z

R1#

查看多播路由表

R2#show ip mroute

IP Multicast Routing Table

Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,

​ L - Local, P - Pruned, R - RP-bit set, F - Register flag,

​ T - SPT-bit set, J - Join SPT, M - MSDP created entry,

​ X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,

​ U - URD, I - Received Source Specific Host Report,

​ Z - Multicast Tunnel, z - MDT-data group sender,

​ Y - Joined MDT-data group, y - Sending to MDT-data group

Outgoing interface flags: H - Hardware switched, A - Assert winner

Timers: Uptime/Expires

Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.255.255.250), 00:19:26/00:02:36, RP 0.0.0.0, flags: DC

Incoming interface: Null, RPF nbr 0.0.0.0

Outgoing interface list:

Serial2/0, Forward/Dense, 00:18:57/00:00:00

FastEthernet0/0, Forward/Dense, 00:19:26/00:00:00

7.6.4跨网段多播

R2#debug ip igmp

*Mar 1 01:04:38.235: IGMP(0): Received Group record for group 239.192.44.166, mode 2 from 192.168.80.111 for 0 sources

*Mar 1 01:04:38.239: IGMP(0): WAVL Insert group: 239.192.44.166 interface: FastEthernet0/0Successful

*Mar 1 01:04:38.239: IGMP(0): Switching to EXCLUDE mode for 239.192.44.166 on FastEthernet0/0

*Mar 1 01:05:06.487: IGMP(0): Send v2 general Query on FastEthernet0/0

*Mar 1 01:05:16.111: IGMP(0): Received v2 Report on FastEthernet0/0 from 192.168.80.111 for 239.192.44.166

*Mar 1 01:06:11.115: IGMP(0): Received Leave from 192.168.80.111 (FastEthernet0/0) for 239.192.44.166

*Mar 1 01:06:11.119: IGMP(0): Send v2 Query on FastEthernet0/0 for group 239.192.44.166

posted @ 2020-06-14 14:53  xcsxchen  阅读(598)  评论(0编辑  收藏  举报