网际协议IP
文章目录
- 网际协议IP
- @[toc]
- 虚拟互联网
- IP地址及其表示方法
- 分类IP地址(两级)
- 无分类编址 CIDR
- 网路前缀
- 地址块
- 地址掩码
- 子网划分(三级IP地址)
- IP地址和MAC地址
- 地址解析协议ARP
- IP数据报的格式
- IP数据报首部的固定部分中的各字段
- IP数据报首部的可变部分
- 分组转发算法
- 网际层控制报文协议ICMP
- ICMP的典型应用
- Ping
- Tracert
- NQA
- 参考
文章目录
- 网际协议IP
- @[toc]
- 虚拟互联网
- IP地址及其表示方法
- 分类IP地址(两级)
- 无分类编址 CIDR
- 网路前缀
- 地址块
- 地址掩码
- 子网划分(三级IP地址)
- IP地址和MAC地址
- 地址解析协议ARP
- IP数据报的格式
- IP数据报首部的固定部分中的各字段
- IP数据报首部的可变部分
- 分组转发算法
- 网际层控制报文协议ICMP
- ICMP的典型应用
- Ping
- Tracert
- NQA
- 参考
网际协议IP是TCP/IP体系中两个最主要的协议之一,也是最重要的互联网标准协议之一。
与IP协议配套使用的还有三个协议:
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP(Internet Control Message Protocol)
- 网际组管理协议 IGMP(Internet Group Management Protocol)
在这一层中,IP经常要使用ARP这个协议。ICMP和IDMP要使用IP协议。由于网际协议TCP/IP体系中的网络层常常被称为网际层或IP层。
虚拟互联网
一般来讲,将网络互联起来要使用一些中间设备。根据中间设备所在的层次,可用由以下四种不同的中间设备:
- 物理层:转发器(repeater)
- 数据链路层:网桥或称为桥接器(bridge)
- 网络层:路由器(router)
- 网络层以上:网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。
当中间设备时转发器或网桥时,这仅仅将一个网络扩大了,而从网络层的角度来看,这任然是一个网络,一般不称之为网络互联。
当许多计算机通过一些路由器进行互联。由于参加连接的计算机网络都使用相同的网际层协议(Internet Protocol),因此可以把参与互连以后的计算机网络看作是一个虚拟互连网络。所谓的虚拟网络就是逻辑互联网络,它的意思是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。
IP地址及其表示方法
IP地址现在由互联网名字和数字分配机构ICANN进行分配。
IP地址的编址方式经历了三个阶段:
- 分类的IP地址
- 子网的划分
- 构成超网 CIDR
按照灵活度排: 构成超网> 子网划分 > 分类IP地址。
因为,CIDR其实是进一步对子网划分的扩展,所有后面讲的话先讲CIDR,子网划分的部分自然也就清楚了。
IP地址的特点:
- 每一个IP地址都由网络号和主机号两部分组成。这样做的好处时:① IP地址的管理机构在分配IP地址时只分配网络号,而剩下的主机号则由得到该网络的单位自行分配。② 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样子就可以使路由表中的项目数大幅度减少,从而减小了路由表所占用的存储空间以及查找路由表的时间。
- 实际上IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络时,这种主机称为多归属主机。
- 按照互联网的观点,一个网络号是指具有相同网络号net-id的主机的集合,因此,用转发器或网桥连接起来的若干个局域网仍为一个网络。
- 在IP地址中,所有分配到网络号的网络(不管是范围很小的局域网,还是可能覆盖很大的地理范围的广域网)都是平等的。
分类IP地址(两级)
所谓的分类IP地址就是将IP地址划分为若干个固定类。每一类都由两个固定长度的字段组成,分别是网络号和主机号。一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个互联网范围内是唯一的。这种两级的IP地址可以记为:
I
P
地址
:
:
=
{
<
网络号
>
,
<
主机号
>
}
IP地址 ::= \{ <网络号>, <主机号> \}
IP地址::={<网络号>,<主机号>}
从上图中我们就可以比较清晰的看出,各类IP地址网络号和主机号的划分。
A类地址的网络号只有7位可以用,其中网络号全为0的IP地址表示“本网络”,网络号全为1即127(0111 1111)保留作为本地环回测试。因此A类地址可指派的网络号是126个( 2 7 − 2 2^7 - 2 27−2)。(计算其他类的网络数时不需要减2)
A类地址的主机号占3个字节。但全0和全1的主机号一般不指派。全0 的主机号表示该IP地址是“本主机”所连接到的单个网络地址。全1表示该网络上的所 2 24 − 2 2^{24} - 2 224−2,即16777214.
无分类编址 CIDR
这种编址的方法的全名是 无分类域间路由选择 CIDR(Classless Inter-Domain Routing),其要点有以下三个。
网路前缀
CIDR中将网络号改称为“网络前缀”。CIDR的记法是:
I
P
地址
:
:
=
{
<
网络前缀
>
,
<
主机号
>
}
IP地址 ::= \{ <网络前缀>,<主机号> \}
IP地址::={<网络前缀>,<主机号>}
这里的网络前缀是可以在0-32之前取任意值,这是跟分类IP地址的最大区别。CIDR采用“斜线记法”,即在IP地址的后面加上斜线“/”,斜线的后面是网络前缀所占的位数。
地址块
CIDR把网络前缀都相同的所有连续的IP地址组成一个“CIDR地址块”。例如128.14.35.7/20,包含的网络前缀是20位,剩下的12位是主机号。那么对应的可指派的地址数就是 2 12 − 2 2^{12} - 2 212−2个
地址掩码
CIDR使用斜线记法可以让我们知道网络前缀的数值。为了让计算机能够识别网络地址是否相同,就要用到地址掩码(掩码)。地址掩码又称为子网掩码。掩码其实就是IP对应的网络号的二进制位全为1,主机号对应的二进制位全为0.例如/20
地址块的地址掩码就是:11111111 11111111 11111111 11110000 00000000。又如A类网络的地址掩码为 255.0.0.0或255.0.0.0/8。所以只要将子网掩码和IP地址相与,就可以得到网络号。
子网划分(三级IP地址)
子网的划分是在分类IP地址上做的一种扩展。换一种说法是将分类IP地址中的部分主机号,也看作是网络号的一部分(子网号)。子网的划分在应用的时候也需要使用到掩码,其用法跟CIDR中的一样。
IP地址和MAC地址
MAC地址已固化在网卡上的ROM中,因此常常将MAC地址称为硬件地址或物理地址。从层次上来看MAC地址是数据链路层的地址,IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址是逻辑地址是因为IP地址是用软件实现的)。当IP数据报插入到MAC帧以后,整个数据的IP数据就成为MAC帧的数据,因而在数据链路层看不到数据报的IP地址。
地址解析协议ARP
在实际应用中,我们经常会遇到这样一个问题:已经知道了一个机器的IP地址,需要找出其IP地址。地址解析协议ARP就是用来解决这个问题的。要注意的是ARP是解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射问题。
地址解析协议ARP是在主机的ARP高速缓存中存放一个IP地址到MAC地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。
当主机A要向本局域网上的某台主机发送IP数据报,就先在其ARP告诉缓存中查看有无主机B 的IP地址。如果有就把查到的这个MAC地址写入到MAC帧,然后通过局域网把该MAC帧发送往此MAC地址。
如果无法在自己的ARP缓存中找到,则按照下图的方式找出主机B 的MAC地址。
IP数据报的格式
一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
IP数据报首部的固定部分中的各字段
-
版本 占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。IPv4的版本号即4.
-
首部长度 占4位,可表示的最大十进制数是15,首部长度字节所表示的数据单位是32字(即4字节)。因为IP首部的固定长度是20字节,因此此首部字段的最小值是5(即0101).当首部的值为15即(1111),表明IP首部的长度最大为60字节。
-
区分服务 占8位。只有当使用区分服务时,这个字段才起作用,在一般情况下都不使用这个字段。
-
总长度 总长度指的是首部和数据部分长度之和,单位是字节。因此数据报的最大长度为 2 16 − 1 = 65535 2^{16} - 1 = 65535 216−1=65535字节。但这样长的数据报在现实中是极少遇到的。
在IP层的下面每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元 MTU(Maximum Transfer Unit)。例如,最常用的以太网就规定其MTU值是1500字节。若传送的数据报长度超过数据链路层的MTU值,就会将过长的数据报进行分片处理。
-
标识(identification) 占16位。IP软件在存储器中位置一个计数器,每产生一个数据报,计数器就加1,并赋值给标识字段。相同标识字段的值使分片后的数据报片能正确地重装为原来的数据报。
-
标志(flag) 占3位,但目前只有两位有意义。
- 最低位 MF(More Fragment) MF = 1表示后面还有分片。反之则表示无分片。
- 中间位 DF(Don’t Fragment) DF = 1表示不能进行分片。反之则表示可以分片。
-
片偏移 占13位。片偏移指出:较长的分组在分片或,某片在原分组中的相对位置(相对于用户数据字段的七点)。片偏移以8字节位偏移单位。也就是说,每个分片的长度一定是8字节的整数倍。为了更好地理解,可以看以下例子。要将数据部分长度位3800字节长的IP数据报进行分片,要求分片长度不超过1420字节的数据报片。
-
生存时间 占8位,生存时间字段常用的英文缩写是TTL(Time to Live),表明这是数据报在网络中的寿命。现在TTL的功能改为了“跳数限制”。路由器在每次转发数据报前就把TTL减1.若TTL值减小到零,就丢弃这个数据报,不再转发。因此现在TTL的单位是跳数。数据报在互联网中经过的路由器的最大数值是255,如果TTL初始设置为1说明这个数据报只能在本局域网中传送。
-
协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,让目标主机IP层知道应将数据部分上交给哪个协议进行处理。常用的协议如下:
协议名 ICMP IGMP IP TCP EGP IGP UDP IPv6 ESP OSPF 协议字段值 1 2 4 6 8 9 17 41 50 89 -
首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。检验原理如下图:
-
源地址 占32位
-
目的地址 占32位
IP数据报首部的可变部分
IP数据报的可变部分从1个字节到40个字节不等。其中的内容其实就是选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
分组转发算法
分组转发算法如下:
- 从数据包的首部提取目的主机的IP地址D,得出目的的网络地址为N。
- 若N就是与此路由器直接相连的某个网络地址,则直接交付,不需要再经过其他路由器,直接把数据交付给目的主机(这里包括把目的主机地址D转化为具体硬件地址,把数据报封装为MAC帧,再发送此帧,过程中不修改IP数据报中的IP地址);否则就是简介交付,执行3.
- 若路由表中由目的地址为D的特定主机路由,则把数据传送给路由表中所指明的下一跳路由器(这个也是通过ARP分装为MAC帧然后发送的);否则执行4.
- 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行
- 若路由表中有一个默认路由,则把数据传送给路由表中的默认路由器;否则执行6
- 报告转发分组出错
网际层控制报文协议ICMP
在网际层中使用**网际控制报文协议ICMP(Internet Control Message Protocol)**有效地提高了转发IP数据报的成功交付机会。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。ICMP报文的格式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C6uGaTbV-1676383164016)(https://download.huawei.com/mdl/image/download?uuid=1eb415d0e4c042c6a0743284dd2f6cf1)]
ICMP报文的包头中包含三个固定字段就是源端设备确定发生错误类型的主要依据:
- 类型 表示ICMP消息的类型
- 代码 表示ICMP消息类型细分的子类型
- Checksum 表示ICMP报文的校验和
ICMP报文的类型有两种,分别是ICMP 差错报告报文和ICMP询问报文。下面列出一些常见的ICMP报文类型值:
差错报告报文
类型的值 | ICMP报文的类型 |
---|---|
3 | 终点不可达 |
11 | 时间超过 |
12 | 参数问题 |
5 | 改变路由 |
询问报文
类型的值 | ICMP报文的类型 |
---|---|
0或8 | 会送(Echo)请求或回答 |
13或14 | 时间戳请求或回答 |
其中每类对应的type都有很多,如下图。这里就不列举出来了:
ICMP的典型应用
IP数据报及其他应用程序通过ICMP报文可以实现多种应用,其中Ping程序和Tracert(Traceroute)程序最为常见。此外,在网络管理和监测中,网络质量分析NQA(Network Quality Analysis)技术更加充分应用了ICMP。
Ping
Ping程序是最常见的用于检测IPv4和IPv6网络设备是否可达的调试手段,它使用ICMP的echo信息来确定:
- 远程设备是否可达;
- 与远程主机通信的来回旅程(round-trip)的延迟;
- 报文包的丢失情况。
Tracert
Tracert程序主要用于查看数据包从源端到目的端的路径信息,从而检查网络连接是否可用。当网络出现故障时,用户可以使用该命令定位故障点。
Tracert利用ICMP超时信息和目的不可达信息来确定从一个主机到网络上其他主机的路由,并显示IP网络中每一跳的延迟(这里的延迟是指:分组从信息源发送到目的地所需的时间,延迟也分为许多的种类——传播延迟、传输延迟、处理延迟、排队延迟等)。下图中利用tracert命令进行测试。
NQA
网络质量分析NQA(Network Quality Analysis)是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。NQA能够实时监视网络服务质量,在网络发生故障时进行有效的故障诊断和定位。
利用不同类型的ICMP报文,NQA实现了Ping和Tracert功能的扩展和增强,可以实现对网络运行状况的准确测试,输出统计信息。比如NQA的ICMP测试、ICMP Jitter测试和Trace测试等。
-
ICMP测试
ICMP测试是通过发送ICMP Echo请求报文和Echo响应报文来判断目的地的可达性、计算网络响应时间及丢包率,从而清晰地反映出网络性能及畅通情况。ICMP测试提供类似于命令行下的Ping命令功能,但输出信息更为丰富。
-
ICMP Jitter测试
ICMP Jitter测试是以ICMP报文为承载,通过记录在报文中的时间戳信息来统计时延、抖动、丢包的一种测试方法。Jitter(抖动时间)是指相邻两个报文的接收时间间隔减去这两个报文的发送时间间隔。
-
Trace测试
NQA的Trace测试用于检测源端到目的端的转发路径,并沿该路径记录源设备到中间各个设备的时延等信息。Trace测试类似于Tracert命令功能,但输出信息更为丰富。每一跳信息中能够显示平均时延、丢包、最后一个包接收时间等信息。
参考
- tracert原理
- 《计算机网络 第7、8版》