TCPIP协议栈—网络层 – 作者:Johnson666

开头放大图
image.png

1.ARP协议

ARP协议即(Address Resolution Protocol 地址解析协议) 的作用,是将以太网中的计算机IP地址解析成MAC地址。

image.png
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址(MAC地址)。
image.png

完整的ARP工作过程

image.png

显示高速cache中的ARP表

image.png

删除ARP表项

image.png

ARP消息格式

image.png

ARP报文的封装

image.png
image.png

ARP工作的4种情况

1.image.png
2.image.png
3.image.png
4.image.png

注意:
点到点链路使用PPP协议,不需要ARP协议。
image.png

2.反向解析协议 RARP

反向地址解析协议 RARP( Reverse Address Resolution Protocol ) 的作用是将MAC地址解析成IP地址。
这种主机往往是无盘工作站。 因此 RARP协议目前已很少使用。
image.png
image.png

3.IP协议

IP(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,提供了数据的面向无连接和不可靠传输功能
除此之外,IP协议还为接入互联网的设备提供IP地址,保证设备的唯一性

抓包查看网络层IP首部

image.png

IP首部格式

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

IP首部固定部分各个字段(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)。

IP首部固定部分各个字段(2)

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

IP首部固定部分各个字段(3)

(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据包,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据包不存在按序接收的问题。当数据包由于长度超过网络的MTU而必须分片时,同一个数据包被分成多个片,这些片的标识都一样,也就是数据包这个标识字段的值就被复制到所有的数据包分片的标识字段中。相同的标识字段的值使分片后的各数据包片最后能正确地重装成为原来的数据包。
(6)标志(flag) 占3位,但目前只有两位有意义。标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据包。MF=0表示这己是若干数据包片中的最后一个。标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才一允许分片。

IP首部固定部分各个字段(4)

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

IP首部固定部分各个字段(5)

(7)片偏移 示例
image.png

IP首部固定部分各个字段(6)

(8)生存时间 生存时间字段常用的英文缩写是TTL(Time To Live),表明是数据包在网络中的寿命。现在TTL字段的功能改为“跳数限制”。
(9)协议 占8位,协议字段指出此数据包携带的数据是使用何种协议,以便使目的主机的网络层知道应将数据部分上交给哪个处理过程。
image.png

IP首部固定部分各个字段(7)

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

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

image.png

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

image.png
image.png

数据分片详解

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

在计算机A的数据链路层分片
image.png
在R1和R2链路的数据链路层分片
image.png

实战:捕获并观察数据包分片(1)

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

实战:捕获并观察数据包分片(2)

image.png
实战:捕获并观察数据包分片(3)
image.png
实战:捕获并观察数据包分片(4)
image.png
实战:捕获并观察数据包分片(5)
image.png
实战:捕获并观察数据包分片(6)
image.png
实战:查看和配置链路MTU(1)

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

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)# ip mtu 500

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

(1)各种操作系统发送数据包,在网络首部都要给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   

(2)
image.png

实战:指定ping命令发送数据包的TTL值(1)
虽然操作系统会给发送的数据包指默认的TTL值,但是ping命令允许我们使用参数-i指定发送的ICMP请求数据包的TTL值。
一个路由器在转发数据包之前将该数据包的TTL减1,如果减1后TTL变为0,路由器就会丢弃该数据包,然后产生一个ICMP响应数据包给发送者,说明TTL耗尽。通过这种方式,你能够知道到达目标地址经过哪些路由器。
image.png
实战:指定ping命令发送数据包的TTL值(2)

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.png
实战:指定ping命令发送数据包的TTL值(3)
image.png
实战:抓包查看数据包的TTL变化(1)
image.png
实战:抓包查看数据包的TTL变化(2)
image.png

IP选项

作用:用于网络测试和调试。
image.png
拷贝:1比特,用于指示路由器在分片处理过程中对选项的处理方法:
设置为“1”,选项应被拷贝到所有分片中;否则仅拷贝至第一分片。
选项类:指明了选项的类型;
选项号:指明了对应某类选项的具体项。

常用选项

image.png

IP记录路由选项

用于源主机希望得知到达目的主机所经过的路由器的场合。通过IP记录路由选项,可以将沿途设备的出接口IP地址都记录下来,IP长度最大为60字节,除去IP头部20字节,选项部分最多是40字节。因此,最多支持记录9个IP地址。
image.png
拷贝比特:取值0;第n个IP地址:依次记录路由器的地址(最多记录9个);
指针:指示下一个可存放地址的位置。
问题:如果路径中的路由器多于9个怎么办?
答案:由于记录选项受限于IP头部长度,没法对大型网络进行记录跟踪,后续才开发出Traceroute。
image.png

源路由选项

通过IP源路由选项,可以在源端指定特定路径(将路径放入IP头部选项)来进行数据转发。
image.png
严格源路由:严格的源路由选择,发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个”源站路由失败”的ICMP差错报文。
宽松源路由:发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。

严格源路由

image.png

宽松源路由

image.png

IP的发展

问题:IPv1-v3在哪里?
答案:最早的协议设计者们并未区分TCP和IP,而是用TCP解决所有问题,效果并不理想。当设计者们把IP分离出来时,TCP已经发展到v3,所以IP直接进入v4。
发展:
1.IPsec:解决安全问题;2.IPv6:解决地址不足、安全等问题。
当前现状:IPv4与IPv6共存。
问题:IPv5是什么?
答案:IPv5是一个试验性协议,即ISP(Internet Stream Protocol,互联网流协议)。由于网络带宽持续大幅提升,这就给基于IPv4实现流技术提供了可能,不需要再用专门的协议,所以ISP,也就是IPv5最终并未实现。

4.ICMP协议

因为IP 协议是提供不可靠传输服务的,因此源地址发出的IP 数据包很可能无法到达目标地址。发生这种情况的原因是很多的,可能是目标主机根本不存在,也可能是传输途中的某个链路中断等。
那么在IP 数据包无法传送到目标地址时,发送方怎样才能知道是什么原因造成的呢?
为了提高 IP 数据报交付成功的机率,在网络层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
ICMP协议允许主机或路由器报告差错情况(如:主机是否可达,路由是否可用等等)。
ICMP 报文是作为IP数据报的数据发送出去的。
ICMP 不是高层协议,而是网络层的协议。

ICMP协议就是这样一种能让我们对网络进行调试的报错机制,它能让发现错误的路由器向数据包的源站发送一个出错消息,报告出错原因。这样源站就可以根据不同的错误采取相应的措施进行处理。
ICMP的错误报告只能通知出错数据包的源主机,而无法通知从源主机到出错路由器途中的所有路由器。
例如:在图中主机H1向H2发送一个IP 数据包,路由器RC 发现无法将该数据包转发到H2。
RC能知道数据包的源地址和目标地址,但它无法知道该数据包到达本路由器时途中经过了哪些其他的路由器。因此RC 只能将出错消息发送给数据包的源地址H1 。
image.png

ICMP报文格式

ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着4个字节的内容与ICMP的类型有关。
image.png
ICMP差错报文的数据部分必须包括生成该差错报文的数据报IP头部+IP头部后面的前8个字节数据。

查看ICMP报文格式

ICMP报文分为:
ICMP请求报文(ICMP echo request)
ICMP响应报文 (ICMP echo reply)
ICMP差错报告报文
image.png

ICMP报文类型和代码

image.png

ICMP差错报告报文类型

(1)终点不可到达 当路由器或主机没有到达目标地址的路由时,就丢弃该数据包,给源点发送终点不可到达报文。
(2)源点抑制 当路由器或主机由于拥塞而丢弃数据包时,就会向源点发送源点抑制报文,使源点知道应当降低数据包的发送速率。
(3)时间超时 当路由器收到TTL=0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把己收到的数据报片都丢弃,并向源点发送时间超过报文。
(4)参数问题 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
(5)路由重定向 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。

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

image.png

ICMP协议的应用

使用ping命令诊断网络故障
使用tracert命令跟踪数据包路径

网络畅通的条件

计算机网络畅通的条件就是数据包能去能回,道理很简单、也很好理解,却是我们排除网络故障的理论依据。
image.png
以下情况网络不通
1.目标主机不可到达
image.png
2.请求超时
image.png

网络排错

明白了网络畅通的条件,网络排错就变得简单了。
先检查数据包是否能够到达目标网络
再检查数据包是否能够返回来。
如果网络不通,您就要检查计算机是否配置了正确的IP地址子网掩码以及网关,再逐一检查沿途路由器上的路由表,查看是否有到达目标网络的路由;然后逐一检查沿途路由器上的路由表,检查是否有数据包返回所需的路由。

使用tracert跟踪数据包路径

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

来源:freebuf.com 2021-04-06 17:39:13 by: Johnson666

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论