一、网络层提供的两种服务
1.虚电路VC(virtual circuit)
两个计算机进行通信时,应先建立连接(但在分组交换中建立的是一条虚电路),以保证双方通信所需的一切网络资源,然后双方就沿着已建立的虚电路发送分组。这样的分组首部不需要填写完整的目的主机地址,而只需要填写这条虚电路的编号(一个不大的整数),因而减少了分组的开销。这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序列到达终点,当然也不丢失、不重复。在通信结束后要释放建立的虚电路。
2.数据报服务
电信网提供的端到端可靠传输的服务对电话业务是很合适的,因为电信网的终端(电话机)非常简单,没有智能,无差错处理能力。因此电信网必须负责把用户电话机产生的话音信号可靠地传送到对方的电话机,使还原后的话音质量符合技术规范的要求。但计算机网络是有智能的计算机。计算机有很强的差错处理能力。因此,因特网在设计上就采用了和电信网完全不同的思路。
因特网设计思路:
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
发送分组时不用先建立连接,每一个分组独立发送,与前后分组无关(不进行编号)。物理层不提供服务质量的承诺,也就是说所传送的分组可能出错、丢失、重复和失序,也不保证分组交付的时限。由于不提供端到端的可靠性服务,这就使网络中的路由器可以做得比较简单,而且价格低廉。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。
好处:网络造价低,运行方式灵活,能够适应多种应用。
3.二者本质差别
是将顺序控制、差错控制和流量控制等通信功能交由通信子网完成,还是由端系统自己来完成。
二、网际协议IP
与IP协议配套使用的有四个协议:
地址解析协议ARP(address resolution protocol)
逆地址解析协议RARP(reverse address resolution protocol)
网际控制报文协议ICMP(internet control message protocol)
网际组管理协议IGMP(internet group mangement protocol)
1.虚拟互连网络
没有一种单一的网络能够适应所有用户的需求。
注意:物理层使用的中间设备叫转发器,数据链路层使用的中间设备叫网桥或桥接器,网络层使用的中间设备叫路由器。在网络层使用的中间设备叫网关。
利用IP协议可使网络在网络层上看起来好像是一个统一的网络。使用IP网的好处是:像在一个单个网络上通信一样,看不见互连的各网络的具体异构细节(如编址方案、路由选择协议,等等)
存储转发:主机H1先查找自己的路由表,看目的主机是否就在本网络上。如是,则不需要经过任何路由器而是直接交付,任务就完成了。如不是,则必须把IIP数据报发送给某个路由器。R1在查找了自己的路由表后,知道应当把数据报转发给R2进行间接交付。这样一直转发下去,最后由路由器R5知道自己是和H2连接在同一个网络上,不需要再使用别的路由器转发了,于是就把数据报直接交付给目的主机H2。
R4和R4之间使用了卫星链路,R5所连接的是个无线局域网。在R1和R4之间的三个网络则可以是任意类型的网络。
互联网可以由多种异构网络互连组成。
2.分类的IP地址
Ⅰ、IP地址及其表示方法
IP地址的编址方法共经历了三个历史阶段:分类的IP地址、子网的划分、构成超网。
本节只讨论最基本的分类IP地址,后两种在后面讨论。
分类的IP地址是指:将IP地址划分为若干个固定类,每一类地址由两个固定长度的字段组成,第一个是网络号(net-id),它标志主机(或路由器)所连接到的网络。一个网络号在整个因特网范围内必须是唯一的。第二个字段是主机号(host-id),它标志该主机(或路由器),一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个因特网范围内是唯一的。
注意:近年已经广泛使用无分类IP地址进行路由选择。但许多文献资料还在使用分类的。
把IP地址划分为三个类别的原因:各种网络差异大,主机有的多有的少,划分三类能更好满足不同用户的要求。单位申请一个IP是获得了具有同样网络号的一块地址,其中主机号则由单位自行分配,只要做到该单位管辖范围内无重复主机号即可。
点分十进制记法(dotted decimal notation):每8位用等效的十进制数字表示,并且在这些数字之间加上一个点。
Ⅱ、常用的三种类别的IP地址
IP地址的特点:
①每一个IP地址由网络号和主机号两部分组成,是一种分等级的地址结构,这样好处是:一、IP地址管理结构在分配IP地址时只分配网络信号,而主机号由得到该网络号的单位自行分配,这样就方便了IP地址的管理。二、路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间。
②IP地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时接入到两个网络上时有两个IP地址,网络号必须不同。这样的主机称为多归属主机。由于一个路由器至少应连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。
③由于一个网络是指具有相同网络号的主机的集合,因此用转发器或网桥连接起来的若干个局域网仍为一个网络。
④在IP地址中,所有分配到网络号的网络是平等的,不管它是局域网还是广域网。
看上图,可注意到:
(1)与某个局域网相连接的计算机或路由器的IP地址中的网络号都必须是一样的。
(2)用网桥B(它只在链路层工作)互连的局域网仍然是一个局域网。
(3)路由器总是具有两个或两个以上的IP地址,即路由器每一接口都有一个不同网络号的IP地址。
(4)当两个路由器直接相连时,这一段连线就构成了一种只包含一段线路的特殊“网络”(如图中的Nl,N2和N3)。之所以是“网络”是因为它有IP地址。但为节约IP地址资源,有时不分配IP地址,这样的网络叫做无编号网络或无名网络。
3.IP地址与硬件地址
IP地址总是放在IP数据报的首部,而硬件地址则放在MAC帧的首部。在网络层以上使用的是IP地址,而数据链路层以下使用的是硬件地址。当IP数据报放入链路层的MAC帧中后,整个的IP数据报就成为MAC帧的数据,因而在数据链路层看不见数据报的IP地址。
强调指出:
(1)在IP层抽象的互联网上只能看到IP数据报。虽然经过路由器R1、R2两次转发,但首部中的源地址和目的地址始终不变。数据报中间经过的两个路由器的IP地址并不出现在IP数据报的首部中。
(2)虽然IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择。
(3)在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化,这些变化在IP层是看不见的。
(4)尽管互连在一起的网络的硬件地址体系各不相同,但IP层抽象的互联网却屏蔽了下层的复杂细节。类似于,我们单机鼠标几下就能让电脑完成任务,而实际上电脑执行了很多指令。
两个问题:
①主机或路由器怎样知道应当在MAC帧的首部填入什么样的硬件地址?
②路由器中的路由表是怎样得出的?
下节指出
4.地址解析协议ARP和逆地址解析协议RARP
Ⅰ、产生背景
逆地址协议RARP在过去起到很大作用,但现在DHCP协议已包含了RARP协议的功能。因此没有人再使用单独的RARP协议了。它作用是知道自己硬件地址的主机能够通过RARP协议找出其IP地址。
网络层使用的是IP地址,但是数据链路上传送帧时,使用的是网络的硬件地址。但这两个地址由于格式不同不存在简单映射关系。另外,一个网络上有新的主机加进来,也有撤走主机,更换网络适配器也会使主机的硬件地址改变。地址解析协议就是在主机ARP高速缓存中应存放一个从IP地址到硬件地址的映射表,并且还要经常动态更新(新增或超时删除)。
Ⅱ、地址解析协议ARP的工作原理
ARP高速缓存(ARP chche):里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这都是主机目前知道的一些地址。
主机是如何知道这些地址的?
例如:一局域网中,主机A要向主机B发送IP数据报,就在ARP高速缓存中看是否有B的IP地址,有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。
可能找不到B的IP地址的项目,这有可能是因为B刚入网,也可能是A刚加电所以其高速缓存还是空的。这样,A就自动运行ARP,然后按下列步骤找到B的硬件地址。
()ARP进程在本局域网上广播发送一个请求分组,例子是A广播发送ARP请求分组示意图。
(2)在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组
(3)主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP相应分组,并写入自己的硬件地址。其余的所有主机都不理睬这个ARP请求分组。注意:虽然ARP请求是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
(4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
Ⅲ、ARP高速缓存的重要性
A向B发送数据报时,很可能以后不久主机B还要向A发送数据报,因而主机B也可能向A发送ARP分组。为了减少网络上的通信量,主机A在发送其ARP请求分组时,就把自己的IP地址到硬件地址的映射写入ARP请求分组,当主机B收到A的请求分组时,就把主机A的这一地址映射写入到主机B自己的ARP高速缓存中。以后B向A发送数据报时就很方便了。
可见ARP高速缓存非常有用,如果不用,那么每一次通信,就要用广播方式发送ARP请求分组,这样使网络上的通信量大大增加。
ARP把保存在高速缓存中的每一个映射地址项目都设置生存空间。因为有时主机会变。
Ⅳ、不同局域网上如何通信
ARP是解路决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。不在同一个局域网上的无法解析硬件地址,它们通过路由器传送。例如不同局域网上的: H1→R1→R2→H2。主机H1要把路由器R1的IP地址IP3解析为硬件地址HA3,以便能够把IP数据报传送到路由器R1。然后R1从转发表找出R2,同时使用ARP解析出R2的硬件地址HA5。于是IP数据报按照硬件地址HA5转发到路由器R2。路由器R2在转发这个IP数据报时用类似方法解析出H2的硬件地址HA2。
主机的用户对地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就自动把这个IP地址解析为链路层所需要的硬件地址。
Ⅴ、使用ARP的四种典型情况:
①发送方是主机,把IP数据包发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件MAC地址。
②发送方是主机,要把IP数据报发送到另一个网络上的主机。这时用ARP找到本网络上的一个路由器(网关)的硬件MAC地址。剩下的工作由这个路由器来完成。
③发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时用ARP找到目的主机的硬件MAC地址
④发送方是路由器,要把IP数据报转发到另一个网络的一个主机。这时用ARP找到本网络上的一个路由器(网关)的硬件地址。剩下的工作有这个路由器来完成。
Ⅵ、网络链路中是按照硬件地址找到目的主机的,为什么我们不直接用硬件地址通信,而要用IP地址呢?
这是因为要使异构网络相互通信就必须进行非常复杂的硬件地址转换工作,这几乎不可能。但IP地址可以,因为连接到因特网的主机只需拥有一个统一的IP地址,它们之间的通信就像连接在同一个网络那样简单方便。
5.IP数据报的格式
Ⅰ、IP数据报首部的固定部分中的各字段
①版本
占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致,广泛用4(即IPv4),后来用6。
②首部长度
占4位,可表示最大十进制数值为15,数的单位是2位字(1个32位字长是4字节)。长度为1111(即十进制15)时,首部长度就达到最大值60字节。首部长度不是4字节整数倍时,必须用最后的填充字段加以填充,这样在实现IP协议时方便。限制为60字节时可能不够用但减少了开销。最常用的是20字节。
③区分服务
占8位,用来获得更好的服务。只有在区分服务时,才起作用,一般下不用。
④总长度
占16位,指首部和数据之和的长度,单位字节。数据报最大长度为2^16-1字节。
IP层下面数据链路层有自己的帧格式,规定了最大传送单元MTU。当一个IP数据报封装成链路层的帧时,此数据报的总长度(首部加数据部分)不能超过MTU值。
虽然长的数据报会使传输效率提高,但是由于以太网普遍使用,所以很少超过1500字节的。最小长度:576字节(规定)。大于MTU时,要分片才能传送,这时“总长度”字段指分片后的长度。
⑤标识(identification)
占16位。每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个标识不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。超过MTU时,这个标识字段的值就被复制到所有的数据报片的标识字段中。想通的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
⑥标志(flag)
占3位,但目前只有2位有意义。最低位记为MF(more fregment),为1表示后面“还有分片”的数据报,为0表示这已是若干数据报片中的最后一个。中间一位记为DF(don't fragment),不能分片,只有为0时才允许分片。
⑦片偏移
占13位,它是较长的分组在分片后,某片在原分组中的相对位置。也就是,相对于用户数据字段的起点,该片从何处开始,片偏移以8个字节为偏移单位。每个分片长度一定是8字节(64位)的整数倍。
⑧生存时间
占8位。TTL(time to live),表明是数据报在网络中的寿命。由发出的数据报的源点设置这个字段,其目的是防止无法交付的数据报无限制地在因特网中兜圈子。起初是以秒做单位,每经过一个路由器,就减去时间,在路由器消耗的时间小于1s时,就把TTL值减1,为0,就丢弃这个数据帧。
后来,路由器处理时间缩短了,远小于1s,后来就把它功能改为“跳数限制”,路由器在转发数据报前就把TTL值减1,若减小到零,就丢弃这个数据报,不再转发。单位不是秒,而是跳数。所以意义是指明数据报在因特网中至多可经过多少个路由器。经过的路由器的最大数值是255。若把TTL初始值定为1,表示只能在本局域网中传送。
⑨协议
占8位。指出数据报所携带的数据使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
⑩首部检验和
占16位。它只能检验数据报的首部,但不包括数据部分。每经过路由器,路由器都要重新计算首部检验和(如一些字段,如生存时间、标志、片偏移等都会变化)。为简化,不使用CRC检验码。使用方法见图。
注:反码算术求和,是从低位到高位计算,最高位相加后产生进位,则最后结果要加1。
⑪源地址 占32位
⑫目的地址 占32位
Ⅱ、IP数据报首部的可变部分
用来排错、测量等,内容丰富。中间不需要分隔符,最后用0的填充字段补齐成为4字节的整数倍。这样增加了开销,实际上很少用,新IP版本把IP数据报的首部长度做成固定的。
6.IP层转发分组的流程
简化图,不用关心某个网络内部的具体拓扑以及连接在该网络上有多少台计算机,它是从一个路由器转发到下一个路由器。
特定主机路由:虽然因特网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下有特例,即对特定的目的主机指明一个路由。
默认主机路由(default route):可减少路由表所占用的空间和搜素路由表所用的时间,这种转发方式在一个网络只有很少的对外连接是很有用的。
待转发的数据报怎样找到下一跳路由器?
当路由器收到一个待转发的数据报,在从路由表得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交下层的网络接口软件。网络接口软件负责把下一跳路由器的IP地址转换成硬件地址(使用ARP),并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。
分组转发的算法:
①从数据报的首部提取目的主机的IP地址D,计算出目的主机的网络地址N。
(将IP数据报中目的主机的IP地址和路由表上的子网掩码进行&运算,就可以得出网络地址N)
②若N就是与此路由器直接相连的某个网络的网络地址。则直接进行交付,不需要经过其他路由器,而是直接将IP数据报交付给目的主机。
(注意,直接交付时,路由器需要将目的主机地址D转换为具体的硬件地址,把数据报封装在MAC帧,在发送此帧。)
若N不是与此路由器直接相连的网络,就进行间接交付。执行3或执行4
③若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行4。
④若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行5。
⑤如果3和4都没能将IP数据报转发出去,若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6。
⑥报告转发分组出错。
注:未涉及路由表一开始如何建立的以及路由表中的内容如何进行更新
三、划分子网和构造超网
1.划分子网
Ⅰ、从两级IP地址到三级IP地址
两级IP地址缺点:①地址空间利用率有时低;②给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏;③两级IP地址不够灵活。
划分子网基本思路:①一个拥有很多物理网络的单位,可以将所属的物理网络划分为多个子网,本单位以外看不到多少个子网,对外界来说表现为一个网络。②划分子网的方法是从网络的主机号借用若干位作为子网号,当然主机号也就相应减少了同样的位数,三级IP地址为:<网络号>,<子网号>,<主机号>。③凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机。
举例如图:
Ⅱ、子网掩码
假定有一个数据报(目的地址是145.13.3.10)已经到达了路由器R1,那么这路由器如何把它转发到子网145.13.3.0??
由于IP地址本身以及数据报首部都没有包含任何有关子网划分的信息,所以用到了子网掩码(subnet mask)
使用子网掩码好处:不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位的“与”运算(AND),就立即得出网络地址来。这样在路由器在处理到来得分组时就可采用同样的算法。
不划分子网时,既然没有子网,又为什么要使用子网掩码?
这是为了便于查找路由表,在路由器的路由表中必须有子网掩码这一栏,如果不划分子网,那么子网掩码就是默认子网掩码。若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。
上表结论:划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。若用较少位数的子网号,则每一个子网上可连接的主机数就较多。反之,若用较多位数的子网号,则连接的主机数少。
同样的IP地址和不同的子网掩码可以得出相同的网络地址。但是,不同地掩码效果是不同的。
2.使用子网时分组的转发
划分子网后,路由表包括:目的网络地址、子网掩码、下一跳地址
划分子网下,路由表转发分组的算法:
①从收到的数据报的首部提取目的IP地址D
②先判断是否直接交付,对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”(AND操作),看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还要把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束,否则就是间接交付,执行③。
③若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器。否则,执行④。
④对路由表中的每一行(目的网络地址、子网掩码、下一跳地址),用其中的子网掩码和D逐位相“与”(AND操作),其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器。否则,执行⑤。
⑤若有默认路由,则把数据报传送给路由表中所指明的默认路由器。否则,报告转发分组出错。
3.无分类编址CIDR(构造超网)
Ⅰ、网络前缀
划分子网出现了问题:①B类地址快要分配完毕②因特网主干网上的路由表中的项目数急剧增长③整个IPv4的地址空间最终将全部耗尽。现用网络前缀解决前两个问题。
在变长子网掩码VLSM(variable length subnet mask)基础上研究出了无编址方法,正式名字是无分类域间路由选择CIDR(classless inter-domain routing)。
CIDR最主要特点:①消除了传统的A类、B类、C类地址以及划分子网的概念,因而可有效分配IPv4的地址空间。记法是:<网络前缀>,<主机号>。②CIDR把网络前缀都相同的连续IP地址组成一个“CIDR地址块”。例如:
主机号是全0和全1的地址一般不用,这个地址块共有2^12个地址,我们可以用地址块中最小地址和网络前缀的位数指明这个地址块,于是记为128.14.32.0/20。不需要指出起始地址时,也可记为“/20地址块”。
/20地址块的掩码是11111111 11111111 11110000 00000000(20个连续的1),斜线记法中,斜线后面的数字就是地址掩码中1的个数。通过斜线记法,可知这分地址块的最小地址和最大地址。
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合(route aggregation,也称为构成超网supermetting),它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由。
下面例子可以看出,把四个系的路由聚合为大学的一个路由,是将网络前缀缩短。网络前缀越短,其地址块所包含的地址数就越多。
Ⅱ、最长前缀匹配
在使用CIDR时,由于采用了网络前缀这种记法,IP地址由网络前缀和主机号这两部分组成。所以路由项目就要有网络前缀和下一跳地址。
查找路由表时可能得到不止一个匹配结果,我们应当从匹配结果中选择具有最长网络前缀的路由。这叫做最长前缀匹配(longest-prefix matching)。这是因为网络前缀越长,其地址块就越小,因而路由选择就越具体。
另外,要把分配出去的IP地址收回再重新分配是十分困难的事,因为这牵涉到很多正在工作的主机必须改变其IP地址。尽管这样,CIDR的使用已经推迟了IP地址将要耗尽的日期。
Ⅲ、使用二叉线索查找路由表
使用CIDR后,由于要寻找最长前缀匹配,使路由表的查找过程变得更加复杂了。当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。
二叉线索只是提供了一种可以快速在路由表中找到匹配的叶节点的机制,但这是否和网络前缀匹配,还要和子网掩码进行一次逻辑与的运算。为提高二叉线索的查找速度,广泛使用了各种压缩技术,例如在上图二叉树右侧,前面4位都是1011,因此只要一个地址的前4位是1011,就可以跳过前面4位而直接从第5位开始比较,这样就减少了查找时间。即使压缩计算很大,但是可提高查找速率还是值得的。
四、网际控制报文协议ICMP
ICMP报文的种类
ICMP报文有两种:即ICMP 差错报文和ICMP询问报文
ICMP差错报文有五种,即:
①终点不到达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文
②源点抑制:当路由器或主机由于堵塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
③时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定内不能收到一个数据报的全部数据报片时,就把已收到的数据报片废弃,并向源点发送时间超过报文。
④参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
⑤改变路由(重定向):路由器把改变路由器报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。当主机发送数据报时,首先查找主机自己的路由表,看应从哪个接口把数据报发送出去,为了效率会有一个默认路由器的IP地址。发现这个默认路由器的IP地址不对时,就用改变路由报文把这情况告诉主机,这样主机就在路由表增加一个项目:到某某目的地址应经过路由器R(而不是默认路由器)。
所有ICMP差错报告报文中的数字都具有同样的格式,把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上相应的ICMP的差错报告的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号以及运输层报文的发送序号。这些信息对源点通知高层协议是有用的(端口作用在下一章介绍)。整个ICMP报文作为IP数据报的数据字段发送给源点。
不应发送ICMP差错报告报文的几种情况:
①对ICMP差错报告报文不再发送ICMP差错报告报文
②对每一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
③对具有多播地址的数据报都不发送ICMP差错报告报文
④对具有特殊地址的数据报不发送ICMP差错报告报文
常用的ICMP询问报告有两种:
①回送请求和回答
ICMP回送请求报文是主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
②时间戳请求和回答
ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。可用来进行时钟同步和测量时间。