zoukankan      html  css  js  c++  java
  • [计算机网路]-第四章网络层

    本章最重要内容:

    • 虚拟互连网络的概念
    • IP 地址与物理地址的关系
    • 传统的分类的 IP 地址(包括子网掩码)和无分类域间路由选择 CIDR
    • 路由选择协议的工作原理

    网络层提供的两种服务

    虚电路服务、数据报服务。

    因特网采用的设计思路

    • 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
    • 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
    • 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。

    尽最大努力交付的好处

    • 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
    • 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。
    • 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
    • 因特网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。

    虚电路服务

    H1 发送给 H2 的所有分组都沿着同一条虚电路传送

    • 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
    • 请注意,电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。

    数据报服务

    H1 发送给 H2 的分组可能沿着不同路径传送

    虚电路服务与数据报服务的对比

    对比的方面 虚电路服务 数据报服务
    思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证
    连接的建立 必须有 不需要
    终点地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址
    分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发
    当结点出故障时 所有通过出故障的结点的虚电路均不能工作 出故障的结点可能会丢失分组,一些路由可能会发生变化
    分组的顺序 总是按发送顺序到达终点 到达终点时不一定按发送顺序
    端到端的差错处理和流量控制 可以由网络负责,也可以由用户主机负责 由用户主机负责

    TCP/IP体系的网络层提供的是数据报服务。

    网际协议 IP

    网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。与 IP 协议配套使用的还有三个协议:

    • 地址解析协议 ARP (Address Resolution Protocol)
    • 网际控制报文协议 ICMP (Internet Control Message Protocol)
    • 网际组管理协议 IGMP (Internet Group Management Protocol)

    本来还有一个逆地址解析协议RARP,现已淘汰。

    虚拟互连网络

    网络互相连接起来要使用一些中间设备(中间系统或中继系统):

    • 物理层中继系统:转发器(repeater)。
    • 数据链路层中继系统:网桥或桥接器(bridge)。
    • 网络层中继系统:路由器(router)。
    • 网桥和路由器的混合物:桥路器(brouter)。
    • 网络层以上的中继系统:网关(gateway)。

    互连网络与虚拟互连网络:

    • 所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。
    • 使用 IP 协议的虚拟互连网络可简称为 IP 网。
    • 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节

    分类的 IP 地址

    我们把整个因特网看成为一个单一的、抽象的网络。IP 地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。IP 地址现在由因特网名字与号码指派公司ICANN (Internet Corporation for Assigned Names and Numbers)进行分配。

    IP 地址的编址方法:分类的IP地址、子网的划分、构造超网。

    下面学习分类的IP地址:

    • 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
    • 两级的 IP 地址可以记为:IP地址::={<网络号>, <主机号>}。(::=表示“定义为”)

    常用的三种类别的IP地址:

    IP地址指派范围

    网络类别 最大网络数 第一个可用网络号 最后一个可用网络号 每个网络中的最大主机数
    A (2^{7}-2/126) 1 126 (2^{24}-2)
    B (2^{14}-1/16383) 128.1 191.255 (2^{16}-2)
    C (2^{21}-1/2097151) 192.0.1 223.255.255 (2^{8}-2)
    • A类最大网络数减2因为:(1)网络号全0的IP地址是保留地址,意思是本网络;(2)网络号为01111111即127保留作为本地软件换回测试本主机得进程之间的通信之用。
    • B类最大网络数减1因为:128.0.0.0是不指派的。
    • C类最大网络数减1因为:192.0.0.0是不指派的。
    • 最大主机数都减2因为:主机号全0表示本主机,全1表示该网络上得所有主机。

    IP 地址的一些重要特点:

    1. IP 地址是一种分等级的地址结构。分两个等级的好处是:
      • 第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
      • 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
    2. 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口:
      • 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机(multihomed host)。
      • 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
    3. 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
    4. 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。

    IP 地址与硬件地址

    • 在 IP 层抽象的互联网上只能看到 IP 数据报,图中的 IP1→IP2 表示从源地址 IP1 到目的地址 IP2,两个路由器的 IP 地址并不出现在 IP 数据报的首部中
    • 路由器只根据目的站的 IP 地址的网络号进行路由选择
    • 在具体的物理网络的链路层,只能看见 MAC 帧而看不见 IP 数据报
    • IP层抽象的互联网屏蔽了下层很复杂的细节,在抽象的网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或主机和路由器之间的通信

    地址解析协议 ARP

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

    • 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。

    • 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。

    • 也有可能查不到主机B得IP地址项目。可能是B刚入网;也可能是A刚加电,ARP高速缓存还是空的。这种情况下,通过以下步骤找到B主机得硬件地址:

      1. ARP进程在本局域网上广播发送一个ARP请求分组。
      2. 局域网上的所有主机上运行的ARP进程都能收到此ARP请求分组。
      3. 主机B得IP地址与ARP请求分组中要查询得IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP相应分组中写入自己的硬件地址。其余主机的IP地址不匹配就不理睬这个ARP请求分组。
      4. 主机A收到B的响应分组后,就在ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

      主机A在发送ARP请求分组时就把自己的IP地址到硬件地址的映射写入ARP请求分组,当主机B收到A的ARP请求分组时就把A的这一映射写入B自己的ARP高速缓存中。方便以后通信。

    应当注意:

    • ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
    • 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
    • 从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
    • 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。

    使用ARP的四种典型情况;

    • 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
    • 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
    • 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
    • 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。

    IP 数据报的格式

    • 一个 IP 数据报由首部和数据两部分组成。
    • 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
    • 在首部的固定部分的后面是一些可选字段,其长度是可变的。
    • 版本:占4位,指IP协议的版本,目前协议版本号为4(IPv4)

    • 首部长度:占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此IP数据报的首部长度的最大值是 60 字节。

    • 区分服务:占 8 位,用来获得更好的服务,在一般的情况下都不使用这个字段 。

    • 总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。

    • 标识:占 16 位,它是一个计数器(每产生一个数据报计数器就加1),用来产生数据报的标识。相同的标识字段的值使得分片后的各数据报片最后能够正确地重装成为原来的数据报。

    • 标志:占 3 位,目前只有前两位有意义。

      • 标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。
      • 标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF=0 时才允许分片。
    • 片偏移:占13位,片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。片偏移以8字节位偏移单位,也就是说每个分片地长度一定是8字节(64bit)。

    • 生存时间:占8位,数据报在网络中可通过的路由器数的最大值。

    • 协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程。

    • 首部检验和:占16位,只检验数据报的首部不检验数据部分。不采用CRC校验码,而是用更简单的计算方法:

      1. 在发送方,先把IP数据包首部划分为许多16位字的序列,并把检验和字段置为0。用反码算术运算把所有16位字相加后,讲得到的和的反码写入检验和字段。

      2. 接收方收到数据报后,讲首部的所有16位字在使用反码算术运算想加一次。将得到的和取反码,即得出接收方检验和计算结果。

      3. 若首部未发生变化,则结果必是0,于是保留这个数据报。

      4. 否则认为出错,丢弃数据报。

    • 源地址和目的地址都各占 4 字节

    IP数据报的可变部分:

    • IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
    • 选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
    • 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。
    • 实际上这些选项很少被使用。

    IP 层转发分组的流程

    有四个 A 类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万个主机。可以想像,若按目的主机号来制作路由表,则所得出的路由表就会过于庞大。但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含 4 个项目。这样就可使路由表大大简化。

    路由表举例:

    在路由表中,对每一条路由,最主要的是:(目的网络地址,下一跳地址) 。

    根据目的网络地址就能确定下一跳路由器,这样做的结果是:

    • IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
    • 只有到达最后一个路由器时,才试图向目的主机进行直接交付。

    特定主机路由:

    • 这种路由是为特定的目的主机指明一个路由。
    • 采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。

    默认路由:

    只要目的网络不是 N1 和 N2,就一律选择默认路由,把数据报先间接交付路由器 R1,让 R1 再转发给下一个路由器。

    • 路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。
    • 这种转发方式在一个网络只有很少的对外连接时是很有用的。
    • 默认路由在主机发送 IP 数据报时往往更能显示出它的好处。
    • 如果一个主机连接在一个小网络上,而这个网络只用一个路由器和因特网连接,那么在这种情况下使用默认路由是非常合适的。

    要强调的是:

    • IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。
    • 当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件
    • 网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。

    分组转发算法:

    (1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N
    (2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
    (3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
    (4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
    (5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
    (6) 报告转发分组出错

    划分子网和构造超网

    划分子网

    在 ARPANET 的早期,IP 地址的设计确实不够合理:

    • IP 地址空间的利用率有时很低。
    • 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
    • 两级的 IP 地址不够灵活。

    划分子网的基本思路:

    • 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。

    • 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。

      [IP地址 ::= {<网络号>, <子网号>, <主机号>} ]

    • 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。

    • 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。

    • 最后就将 IP 数据报直接交付目的主机。

    当没有划分子网时,IP 地址是两级结构。划分子网后 IP 地址就变成了三级结构。划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id

    子网掩码:

    • 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
    • 使用子网掩码(subnet mask)可以找出 IP 地址中的子网部分。

    IP地址与子网掩码逐位相与得到网络号:

    默认子网掩码:

    • 子网掩码是一个网络或一个子网的重要属性。
    • 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
    • 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
    • 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。

    使用子网掩码的分组转发过程

    在不划分子网的两级 IP 地址下,从 IP 地址得出网络地址是个很简单的事。但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。因此分组转发的算法也必须做相应的改动。

    在划分子网的情况下路由器转发分组的算法:

    • (1) 从收到的分组的首部提取目的 IP 地址 D。
    • (2) 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
    • (3) 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
    • (4) 对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
    • (5) 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
    • (6) 报告转发分组出错。

    一个栗子:

    如上图,已知互联网和路由器 R1 中的路由表。主机 H1 向 H2 发送分组。试讨论 R1 收到 H1 向 H2 发送的分组后查找路由表的过程。

    过程如下:

    1. 因此 H1 首先检查主机 128.30.33.138 是否连接在本网络上:

      H1使用本网络子网掩码255.255.255.128跟128.30.33.138按位相与,由于255是全1,所以前三个字节数据结果跟主机前三字节一致,那么我们只需要计算最后一个字节就好了:

      [255.255.255.10000000\ 128. 30 . 33 .10001010\ ----------------AND\ 128. 30 . 33 .10000000 ]

      结果就是128.30.33.128,跟本网络地址128.30.33.0不一致,所以不是本网络主机,不能进行直接交付。

    2. H1把分组传送到路由器 R1。

    3. 路由器 R1 收到分组后就用路由表中第 1 个项目的子网掩码和 128.30.33.138 逐位 AND 操作(同第一步运算方式),结果跟第1个项目的目的网络地址不一致。

    4. 路由器 R1 收到分组后就用路由表中第 1 个项目的子网掩码和 128.30.33.138 逐位 AND 操作(同第一步运算方式),结果跟第1个项目的目的网络地址不致。这表明子网 2 就是收到的分组所要寻找的目的网络。于是就不需要再继续寻找目的网络了,并把分组从接口1直接交付给主机H2(它们在同一网络上)。

    无分类编址 CIDR(构造超网)

    CIDR的特点:

    • CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
    • CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
    • IP 地址从三级编址(使用子网掩码)又回到了两级编址。

    无分类的两级编址:

    • 无分类的两级编址的记法是:

      [IP地址 ::= {<网络前缀>, <主机号>} ]

    • CIDR 还使用斜线记法(slash notation),它又称为CIDR记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。

    • CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。

    CIDR 记法的其他形式:

    网络前缀的后面加一个星号 * 的表示方法,如 00001010 00*,在星号 * 之前是网络前缀,而星号 * 表示 IP 地址中的主机号,可以是任意值。

    CIDR地址块:

    • 128.14.32.0/20 表示的地址块共有 (2^{12}) 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。
    • 这个地址块的起始地址是 128.14.32.0。
    • 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。
    • 128.14.32.0/20 地址块的最小地址:128.14.32.0
    • 128.14.32.0/20 地址块的最大地址:128.14.47.255
    • 全 0 和全 1 的主机号地址一般不使用。

    构造超网:

    将多个子网聚合成一个较大的子网,叫做构造超网,或路由聚合。

    方法是将网络前缀缩短。

    一个栗子:

    如上图,R2连接两个子网(网络1、2),如果R1给网络1或2发送数据报,那么就需要查找自己的路由器转发表。而不使用构造超网技术,R1的路由器转发表就会有两个项目,即目的网络是网络1,下一跳是R2;网络是网络2,下一跳是R2。

    而如果使用构造超网技术,那么我们将两个网络的网络前缀缩短一位,就能将两个网络聚合为一个网络206.1.0.0/16。这时R1的路由器转发表就可以只写一个:网络前缀206.1.0.0/16,下一跳地址R2。

    最长前缀匹配:

    使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。最长前缀匹配又称为最长匹配或最佳匹配。

    一个栗子:

    最后一行是默认路由

    1. 将目的地址的网络前缀假设成与第一个项目相同的位数,即132.19.237.5/8,其对应的网络号是:132.0.0.0,跟项目1的网络号132.0.0.0一致,保留。
    2. 同上,132.19.237.5/11,其对应的网络号是:132.0.0.0,也要保留。
    3. 同上,132.19.237.5/22,其对应的网络号是:132.19.236.0,跟目的网络不一致,丢弃。

    通过计算,有两个项目符合条件,然后根据最长前缀匹配,我们选择R2。

    网际控制报文协议 ICMP

    • 为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
    • ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
    • ICMP 不是高层协议,而是 IP 层的协议。
    • ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。

    ICMP报文的种类

    • ICMP 差错报告报文
    • ICMP 询问报文

    ICMP 差错报告报文

    ICMP 差错报告报文共有 5 种:

    • 终点不可达
    • 源点抑制(Source quench)
    • 时间超过
    • 参数问题
    • 改变路由(重定向)(Redirect)

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

    不应发送 ICMP 差错报告报文 的几种情况:

    • 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
    • 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
    • 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
    • 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。

    ICMP 询问报文

    ICMP 询问报文有两种:

    • 回送请求和回答报文
    • 时间戳请求和回答报文

    下面的几种 ICMP 询问报文不再使用:

    • 信息请求与回答报文
    • 掩码地址请求和回答报文
    • 路由器询问和通告报文

    ICMP的应用举例

    ping

    • PING 用来测试两个主机之间的连通性。
    • PING 使用了 ICMP 回送请求与回送回答报文。
    • PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。

    traceroute/tracert

    UNIX操作系统中叫做traceroute,Windows操作系统中叫做tracert。用来追踪一个分组从源点到终点的路径。

    traceroute从源主机向目的主机发送一连串的IP数据报,数据报封装的是无法交付的UDP用户数据。第一个数据报p1的生存时间设为1。当p1到达路径上的第一个路由器R1时,路由器手下它,并把TTL值减1。由于TTL等于0了,R1就把p1丢掉,并向源主机发送一个ICMP时间超过差错报告报文

    接着源主机发送第二个数据报,并设TTL=2,依次类推。

    当最后一个数据报刚到达目的主机时,数据报的TTL是1。主机不转发数据报,也不把TTL减1。但是因为数据报中封装的是无法交付的运输层的UDP用户数据报,因此目的主机要向源主机发送ICMP终点不可达差错报告报文。

  • 相关阅读:
    (转)mtr命令详解诊断网络路由
    WinDbg使用介绍
    windbg-bp、 bm、 bu、 bl、 bc、 ba(断点、硬件断点)
    【转】25.windbg-!gle、g(错误码、g系列)
    umdh windbg分析内存泄露
    windbg !logexts(自带的监控API)
    windbg cs
    windbg dds、dps、dqs
    Windbg找出memory leak的一种笨办法
    【转】windows平台多线程同步之Mutex的应用
  • 原文地址:https://www.cnblogs.com/xxmmqg/p/13308349.html
Copyright © 2011-2022 走看看