##课程记录

week2

套接字

image-20240918100509290 image-20240918100536012
  1. 创建

    image-20240918100609661

  2. 绑定

    image-20240918100643731
  3. 关闭

    image-20240918100705539
  • TCP套接字

    image-20240918100845010 image-20240918101454446
    • 监听进程:专门用来分发用户端数据给服务器建立针对客户端专门的服务器进程

      image-20240918101241642

      服务端在9999监听(PS :8080 网页;21 FTP)

网络度量单位

  • 比特率、带宽、包转发率

    image-20240918102154235
  • 时延及限制因素

image-20240918102207679 image-20240918102420329
  • 往返时延RRT

    image-20240918102647900
  • 时延带宽积

    image-20240918103812217

    讲道理是越大越好,因为标志了通道的数据发送量,而且时延影响基本上是毫秒级,可以忽略

  • 吞吐量、有效吞吐量、利用率、丢包率

    image-20240918104205226
  • 时延抖动、延时丢包

    image-20240918104412320

物理层

网络中硬件设备和传输介质的种类繁多,通信方式也各不相同。物理层应尽可能屏蔽这些差异,让数据链路层感觉不到这些差异。

接口特性

发送方的数据链路层将需要发送的帧交给物理层,传输后接收方的物理层将这些帧传递给接收方的数据链路层。

image-20240918115929300

具体地说,物理层确定与传输媒体接口有关的一些特性:

  • 机械特性 - 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等

    image-20240918120609445
  • 电气特性 - 指明在接口电缆的各条线上出现的电压的范围

    image-20240918120624349
  • 功能特性 - 规定物理接口上各条信号线的功能分配和确切定义(各条线上出现各种电压表示何意义)

    image-20240918120642479
  • 规程特性 / 过程特性 - 定义了各信号线的工作顺序和时序,使得比特流传输得以完成。

    image-20240918120846347
数据通信基础与基础概念

007

008

  1. Encapsulation封装
    en

4layer
4层

  1. 两种数据包构成
    alt text
    数据包构成Hardware
    alt text
    数据包构成software

  2. Virtual Pravate Network
    alt text
    ETH|IP|TCP|TLS|IP|TCP|HTTP|end_TCP_|…|end-ETH

009Memory,Byte Order,and Packet Formats

  1. 大小端

alt text

010Quiz

alt text

011Answer

Big Little

012NetByte Order

All protocols that are internet specifications use a Big-endian

  1. IPV4数据包格式
    alt text
  • 最高65535字节(2^16),取决于Total Length的数值,而它仅有16位长
  • 以大端形式存在

013Name and Address:IPv4

alt text

  • IPv4标识了互联网上的每一处设备
  • IPv4每一位是8bit
  • NetMask(子网掩码),处于同一网络状态下的设备标识,从最高位开始计算,是一长串的1+一串0

参考博客

- 子网掩码(subnet masking)的功能是告知主机或路由设备,地址的哪一部分是网络号,包括子网的网络号部分,哪一部分是主机号部分。

- 子网掩码使用与IP地址相同的编址格式,即4个8位组的32位长格式。

- 在子网掩码中,网络部分和子网络部分对应的位全为“1”,主机部分对应的位全为“0”

- 通过将子网掩码与IP地址进行“与”操作,可提供所给定的IP地址所属的网络号(包括子网络号)
> 172.31.128.255/18
> 
>其中18就是子网掩码,表示32位中高18位是1,其它位为0。它的二进制形式为11111111.11111111.11000000.000000,转为十进制就是255.255.192.0,为了方便我们习惯于写单个数字18表示子网掩码

![alt text](image-8.png)

- 常见IP相关计算
> 例子: 给定IP地址和子网掩码 172.31.128.255 / 18

> 1. 网络号
>
> 公式:将IP地址的二进制和子网掩码的二进制进行“&”(and)运算,得到的结果就是网络号。“&运算”的规则是1&1=1,0&1=0,1&0=0,0&0=0。
>
> ip:        10101100.00011111.10000000.11111111  
>
> 子网掩码:  11111111.11111111.11000000.00000000
>
> 网络号:     10101100.00011111.10000000.00000000   & 
> 
> 网络号点分法表示: 172.31.128.0 


​ > 2. 主机号
​ >
​ > 公式:用IP地址的二进制和(子网掩码的二进制的反码)进行“&”运算,得到的结果就是主机号。反码就是将原本是0的变为1,原本是1的变为0。
​ > ip: 10101100.00011111.10000000.11111111
​ > 子网掩码取反:  00000000.00000000.00111111.11111111
​ > 主机号: 00000000.00000000.00000000.11111111 & 
​ > 主机号点分法表示: 0.0.0.255

​ > 3. 广播地址
​ >
​ > 公式:在得到网络号的基础上,将网络号右边的表示IP地址的主机部分的二进制位全部填上1,再将得到的二进制数转换为十进制数就可以得到广播地址。因为本题中子网掩码是11111111.11111111.11000000.00000000, 0有14个,主机位是14,我们将网络号172.31.128.0,转换为二进制是 10101100.00011111.10000000.00000000,从右边数起,将14个0全部替换为1, 即:10101100.00011111.10111111.11111111,这就是这个子网的广播地址的二进制表示法。将这个二进制广播地址转换为十进制就是172.31.191.255
​ >
​ > 网络号: 10101100.00011111.10000000.00000000
​ >
​ > 子网掩码:  11111111.11111111.11000000.00000000
​ >
​ > 广播地址: 10101100.00011111.10111111.11111111 网络号从右向左0填为1,个数为掩码中的0
​ >
​ > 广播地址点分法表示: 172.31.191.255

  • 特殊的一类IP地址

alt text

014Quiz

alt text No Yes No No Yes

015Answer

alt text

016Address Structure(historical)

参考博客

  • ip地址的两种表示方式
    1. 原始的划分方式
      左边的某些连续位表示网络号,右边的某些连续位表示主机号,那么我们平常在讨论这一系列问题的时候,会有一个“网络地址”的概念,一般来说网络地址并不等于IP地址,网络地址就是IP地址中的网络号,将主机号置0,就可以得到网络地址。

      IP地址 ::= {<网络号>, <主机号>},
      alt text

    2. 目前使用的最新方式:CIDR(Classless Inter-Domain Routing)
      CIDR中已经废弃了IP地址的分类,无分类编址的命名也是由此得来的,所以目前基本已经不再采用所谓的A类、B类、C类的IP地址分类表示法,网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

      IP地址 ::= {<网络号>, <主机号> / <子网掩码>}

      例如192.168.8.2/8代表192为网络号
      alt text

017Longest Prefix Match

  1. Forwarding table(转发表)
  • link层转发,查找匹配,default是默认转发地址alt text
  1. Longest Prefix Match
    最长匹配转发表(防止无脑转发0.0.0.0/0此类默认端口)

018Quiz

alt text A.3 B.4 C.1 D.1 E.2

019Answer

A.3 B.4 C.1 D.1 E.2

020ARP(Address Resolution Protocol)

参考博客

ARP(Address Resolution Protocol)是一个用于将IP地址映射到物理网络地址(MAC地址)的协议。在计算机网络中,每个设备都有一个唯一的MAC地址和IP地址,而ARP协议允许设备通过IP地址找到对应的MAC地址,以便进行通信。

  • ARP协议的作用是将网络层(IP层)的地址映射到数据链路层(MAC层)的地址,以确保数据包能够正确地传递。

    1. 当一个设备需要与另一个设备通信时:

    2. 首先使用ARP协议在本地网络中查找目标设备的MAC地址。

      1. 如果目标设备的MAC地址已知,则数据包将直接发送到该地址。

      2. 如果目标设备的MAC地址未知,则ARP协议将广播一个请求,以请求目标设备回复其MAC地址。

    3. 一旦ARP请求得到答复(单播),设备就可以使用该MAC地址进行通信。

alt text ![alt text](./CS144学习/image-17.png)
  • 硬件类型(Hardware type):为1表示以太网地址。

  • 协议类型(Protocol type): ARP协议的上层协议为IP协议,值为0x0800。

  • 硬件地址长度(Hardware size):MAC地址的长度,以字节为单位,该值为6。

  • 协议地址长度(Protocol size):IP地址的长度,以字节为单位,该值为4。

  • OP(Opcode):操作码,表示该数据包为ARP请求或ARP应答。1表示ARP请求,2表示ARP应答。

  • 源MAC地址:发送端的硬件地址。

  • 源IP地址:发送端的协议(IP)地址,如 192.168.1.102。

  • 目的MAC地址:接收端的硬件地址,在ARP请求时由于不知道接收端MAC地址,理论上该字段为广播地址,即48’hff_ff_ff_ff_ff_ff。但实际上通过ILA抓取ARP请求数据可知,该地址为0,可能是目的主机不会解析该数据吧,具体值是多少也就无所谓了。

  • 目的IP地址:接收端的协议(IP)地址,如 192.168.1.10。

alt text

021The Internet and IP(Summary)

alt text

022

聊天课(水水得了)

023

Unit 2 Transcation

024TCP-Service

参考博客:TCP协议详解 (史上最全)-CSDN博客

image-20240908160411494
  1. 数据输出↓

    • 应用层生成所要传输的数据

    • 传输层接受本地的应用层上层数据,使用TCP协议,封装TCP头

    • 网络层接受本地的传输层上层数据,使用IP协议,封装IP头

    • 链接层接受本地的网络层上层数据,封装Link Frame(链接帧)–含MAC地址

  2. 数据接收↑(TODO)

    1. 交换机

      • 链接层接受远程的数据,拆除Link Frame(链接帧)–含MAC地址

      • 网络层接受本地的传输层上层数据,使用IP协议,封装IP头

      • 传输层接受本地的应用层上层数据,使用TCP协议,封装TCP头

      • 应用层生成所要传输的数据

    2. 主机

      • 链接层接受远程的数据,拆除Link Frame(链接帧)–含MAC地址

      • 网络层接受本地的传输层上层数据,使用IP协议,封装IP头

      • 传输层接受本地的应用层上层数据,使用TCP协议,封装TCP头

      • 应用层生成所要传输的数据

e54b722ab1bb22360a71733ecd969c30

Connection setup 3-way handshake(三次握手)

image-20240908164946617
  1. A->B Syn信号(synchronise同步消息)
  2. B->A Syn-Ack信号(synchronise+Acknowledge接受消息)
  3. A->B Ack信号(Acknowledge应答消息)

Connection teardown(四次挥手关闭连接)

  1. A->B Fin信号(Finish关闭A->B的信息传输)
  2. B->A (Data+)Ack信号:可能含有未传输的数据
  3. B->A Finish信号(关闭B->A的信息传输)
  4. A->B Ack信号(应答确认关闭)

TCP功能特性

image-20240908191007117

TCP协议格式

1dfea10f4e949615b62704b6fee37b5c
  1. 源端口号

源端口号表示报文的发送端口,占16位。源端口和源IP地址组合起来,可以标识报文的发送地址。

Service Name and Transport Protocol Port Number Registry (iana.org)

  1. 目的端口号

目的端口号表示报文的接收端口,占16位。目的端口和目的IP地址相结合,可以标识报文的接收地址。

Service Name and Transport Protocol Port Number Registry (iana.org)

TCP协议是基于IP协议的基础上传输的,TCP报文中的源端口号+源IP,与TCP报文中的目的端口号+目的IP一起,组合起来唯一性的确定一条TCP连接。

  1. 序号(Sequence Number)

TCP传输过程中,在发送端出的字节流中,传输报文中的数据部分的每一个字节都有它的编号。序号(Sequence Number)占32位,发起方发送数据时,都需要标记序号。

序号(Sequence Number)的语义与SYN控制标志(Control Bits)的值有关。根据控制标志(Control Bits)中的SYN是否为1,序号(Sequence Number)表达不同的含义:

  • 当SYN = 1时,当前为连接建立阶段,此时的序号为初始序号ISN((Initial Sequence Number),通过算法来随机生成序号;

  • 当SYN = 0时在数据传输正式开始时,第一个报文的序号为 ISN + 1,后面的报文的序号,为前一个报文的SN值+TCP报文的净荷字节数(不包含TCP头)。比如,如果发送端发送的一个TCP帧的净荷为12byte,序号为5,则发送端接着发送的下一个数据包的时候,序号的值应该设置为5+12=17。

在数据传输过程中,TCP协议通过序号(Sequence Number)对上层提供有序的数据流。发送端可以用序号来跟踪发送的数据量;接收端可以用序号识别出重复接收到的TCP包,从而丢弃重复包;对于乱序的数据包,接收端也可以依靠序号对其进行排序。

  1. 确认序号(Acknowledgment Number)

确认序号(Acknowledgment Number)标识了报文接收端期望接收的字节序列。如果设置了ACK控制位,确认序号的值表示一个准备接收的包的序列码,注意,它所指向的是准备接收的包,也就是下一个期望接收的包的序列码。

举个例子,假设发送端(如Client)发送3个净荷为1000byte、起始SN序号为1的数据包给Server服务端,Server每收到一个包之后,需要回复一个ACK响应确认数据包给Client。ACK响应数据包的ACK Number值,为每个Client包的为SN+包净荷,既表示Server已经确认收到的字节数,还表示期望接收到的下一个Client发送包的SN序号,具体的ACK值如下图左边的正常传输部分所示。
97d4dbe47868bcae1662d69afabd31b2

图:传输过程的确认序号(Acknowledgment Number)值示例图

在上图的左边部分,Server第1个ACK包的ACK Number值为1001,是通过Client第1个包的SN+包净荷=1+1000计算得到,表示期望第2个Client包的SN序号为1001;Server第2个ACK包的ACK Number值为2001,为Client第2个包的SN+包净荷=2001,表示期望第3个Server包的SN为2001,以此类推。

如果发生错误,假设Server在处理Client的第二个发送包异常,Server仍然回复一个ACK Number值为1001的确认包,则Client的第二个数据包需要重复发送,具体的ACK值如上图右边的正常传输部分所示。

只有控制标志的ACK标志为1时,数据帧中的确认序号ACKNumber才有效。TCP协议规定,连接建立后,所有发送的报文的ACK必须为1,也就是建立连接后,所有报文的确认序号有效。如果是SYN类型的报文,其ACK标志为0,故没有确认序号。

  1. 头部长度

该字段占用4位,用来表示TCP报文首部的长度,单位是4bit位。其值所表示的并不是字节数,而是头部的所含有的32bit的数目(或者倍数),或者4个字节的倍数,所以TCP头部最多可以有60字节(4*15=60)。没有任何选项字段的TCP头部长度为20字节,所以其头部长度为5,可以通过20/4=5计算得到。

  1. 预留6位

头部长度后面预留的字段长度为6位,作为保留字段,暂时没有什么用处。

  1. 控制标志

控制标志(Control Bits)共6个bit位,具体的标志位为:URG、ACK、PSH、RST、SYN、FIN。6个标志位的说明,如下表所示。

表:TCP报文控制标志(Control Bits)说明

标志位 说明
URG 占1位,表示紧急指针字段有效。URG位指示报文段里的上层实体(数据)标记为“紧急”数据。当URG=1时,其后的紧急指针指示紧急数据在当前数据段中的位置(相对于当前序列号的字节偏移量),TCP接收方必须通知上层实体。
ACK 占1位,置位ACK=1表示确认号字段有效;TCP协议规定,接建立后所有发送的报文的ACK必须为1;当ACK=0时,表示该数据段不包含确认信息。当ACK=1时,表示该报文段包括一个对已被成功接收报文段的确认序号Acknowledgment Number,该序号同时也是下一个报文的预期序号。
PSH 占1位,表示当前报文需要请求推(push)操作;当PSH=1时,接收方在收到数据后立即将数据交给上层,而不是直到整个缓冲区满。
RST 占1位,置位RST=1表示复位TCP连接;用于重置一个已经混乱的连接,也可用于拒绝一个无效的数据段或者拒绝一个连接请求。如果数据段被设置了RST位,说明报文发送方有问题发生。
SYN 占1位,在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1。 综合一下,SYN置1就表示这是一个连接请求或连接接受报文。
FIN 占1位,用于在释放TCP连接时,标识发送方比特流结束,用来释放一个连接。当 FIN = 1时,表明此报文的发送方的数据已经发送完毕,并要求释放连接。

在连接建立的三次握手过程中,若只是单个SYN置位,表示的只是建立连接请求。如果SYN和ACK同时置位为1,表示的建立连接之后的响应。

  1. 窗口大小:

长度为16位,共2个字节。此字段用来进行流量控制。流量控制的单位为字节数,这个值是本端期望一次接收的字节数。

  1. 校验和:

长度为16位,共2个字节。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,接收端用于对收到的数据包进行验证。

  1. 紧急指针:

长度为16位,2个字节。它是一个偏移量,和SN序号值相加表示紧急数据最后一个字节的序号。

以上十项内容是TCP报文首部必须的字段,也称固有字段,长度为20个字节。接下来是TCP报文的可选项和填充部分。

  1. 可选项和填充部分

可选项和填充部分的长度为4n字节(n是整数),该部分是根据需要而增加的选项。如果不足4n字节,要加填充位,使得选项长度为32位(4字节)的整数倍,具体的做法是在这个字段中加入额外的零,以确保TCP头是32位(4字节)的整数倍。

最常见的选项字段是MSS(Maximum Segment Size最长报文大小),每个连接方通常都在通信的第一个报文段(SYN标志为1的那个段)中指明这个选项字段,表示当前连接方所能接受的最大报文段的长度。

由于可选项和填充部分不是必须的,所以TCP报文首部最小长度为20个字节。

至此,TCP报文首部的字段,就全部介绍完了。TCP报文首部的后面,接着的是数据部分,不过数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据,比如在处理超时的过程中,也会发送不带任何数据的报文段。

总体来说,TCP协议的可靠性,主要通过以下几点来保障:

  • 应用数据分割成TCP认为最适合发送的数据块。这部分是通过MSS(最大数据包长度)选项来控制的,通常这种机制也被称为一种协商机制,MSS规定了TCP传往另一端的最大数据块的长度。值得注意的是,MSS只能出现在SYN报文段中,若一方不接收来自另一方的MSS值,则MSS就定为536字节。一般来讲,MSS值还是越大越好,这样可以提高网络的利用率。

  • 重传机制。设置定时器,等待确认包,如果定时器超时还没有收到确认包,则报文重传。

  • 对首部和数据进行校验。

  • 接收端对收到的数据进行排序,然后交给应用层。

  • 接收端丢弃重复的数据。

  • TCP还提供流量控制,主要是通过滑动窗口来实现流量控制。

025UDP-Service

User Datagram Protocol用户数据报协议

UDP协议深度解析:从原理到应用全面剖析-CSDN博客

UDP格式

image-20240908195745890

UDP协议端格式是指UDP数据包的结构和组成部分。UDP协议端格式主要包括以下几个部分:

  1. 源端口号(Source Port):这是一个16位的字段,用于标识发送方的应用程序所使用的端口号。通过这个端口号,接收方可以准确地知道是哪个应用程序发送的数据。
  2. 目的端口号(Destination Port):同样是一个16位的字段,用于标识接收方的应用程序所使用的端口号。这确保了数据能够准确地被目标应用程序接收和处理。
  3. 长度(Length):这也是一个16位的字段,它指示了UDP数据报的总长度,包括UDP头部和数据部分。这个长度信息对于接收方来说非常重要,因为它需要知道数据报的确切大小以便正确地进行接收和处理。
  4. 校验和(Checksum):校验和是一个用于检测UDP数据报在传输过程中是否出现错误的16位字段。发送方会计算数据报的校验和,并将其附加在数据报中。接收方在接收到数据报后,会重新计算校验和,并与发送方提供的校验和进行比较,以检测数据报是否在传输过程中发生了错误。
  5. 数据(Data):这是UDP数据报的可变长度部分,它包含了应用程序要传输的实际数据。数据的长度可以根据实际需求进行变化,最大可以达到65535字节(因为长度字段是16位,可以表示的最大数值是65535,减去头部8字节后,数据部分最大为65527字节)。

值得注意的是,UDP协议是一种无连接的协议,这意味着在发送数据之前,发送方和接收方之间不需要建立连接。因此,UDP协议相对简单且高效,适用于那些对实时性要求较高且可以容忍少量数据丢失的应用场景,如实时音视频传输、在线游戏等。然而,由于UDP协议不提供可靠传输机制(如序号、确认、重传等),因此它并不适用于那些需要确保数据完整性和可靠性的应用场景。

UDP特性

image-20240908195441026

026ICMP Service

Internet Control Message Protocol

image-20240908200423106 image-20240908200553323

ICMP的报文格式

  • ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。
  • 一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。
  • 当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。

b5c177f8875b34440d1f8a2795f77df9

字段说明:

类型 说明
类型 占一字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文
代码 占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
校验和 这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错(其计算方法与在我们介绍IP报头中的校验和计算方法是一样的)

ICMP大概分为两类报文:
一类是通知出错原因 ;一类是用于诊断查询
类型及含义如下:

类型TYPE 代码CODE 用途|描述 Description 查询类Query 差错类Error
0 0 Echo Reply——回显应答(Ping应答) x ****
3 0 Network Unreachable——网络不可达 x
3 1 Host Unreachable——主机不可达 **** x
3 2 Protocol Unreachable——协议不可达 x
3 3 Port Unreachable——端口不可达 **** x
3 4 Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 **** x
3 5 Source routing failed——源站选路失败 x
3 6 Destination network unknown——目的网络未知 x
3 7 Destination host unknown——目的主机未知 x
3 8 Source host isolated (obsolete)——源主机被隔离(作废不用) x
3 9 Destination network administratively prohibited——目的网络被强制禁止 x
3 10 Destination host administratively prohibited——目的主机被强制禁止 x
3 11 Network unreachable for TOS——由于服务类型TOS,网络不可达 x
3 12 Host unreachable for TOS——由于服务类型TOS,主机不可达 x
3 13 Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 **** x
3 14 Host precedence violation——主机越权 x
3 15 Precedence cutoff in effect——优先中止生效 x
4 0 Source quench——源端被关闭(基本流控制)
5 0 Redirect for network——对网络重定向
5 1 Redirect for host——对主机重定向 ****
5 2 Redirect for TOS and network——对服务类型和网络重定向
5 3 Redirect for TOS and host——对服务类型和主机重定向
8 0 Echo request——回显请求(Ping请求) x ****
9 0 Router advertisement——路由器通告
10 0 Route solicitation——路由器请求
11 0 TTL equals 0 during transit——传输期间生存时间为0 **** x
11 1 TTL equals 0 during reassembly——在数据报组装期间生存时间为0 x
12 0 IP header bad (catchall error)——坏的IP首部(包括各种差错) **** x
12 1 Required options missing——缺少必需的选项 x
13 0 Timestamp request (obsolete)——时间戳请求(作废不用) x
14 Timestamp reply (obsolete)——时间戳应答(作废不用) x
15 0 Information request (obsolete)——信息请求(作废不用) x
16 0 Information reply (obsolete)——信息应答(作废不用) x
17 0 Address mask request——地址掩码请求 x
18 0 Address mask reply——地址掩码应答

常见的ICMP报文

  • 相应请求

我们用的ping操作中就包括了相应请求(类型字段值为8)和应答(类型字段值为0)ICMP报文。
过程:
一台主机向一个节点发送一个类型字段值为8的ICMP报文,如果途中没有异常(如果没有被路由丢弃,目标不回应ICMP或者传输失败),则目标返回类型字段值为0的ICMP报文,说明这台主机存在。

  • 目标不可达,源抑制和超时报文

这三种报文的格式是一样的。

  1. 目标不可到达报文(类型值为3)在路由器或者主机不能传递数据时使用。
    例如:我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回类型字段值3、代码字段值为3的ICMP报文。
    常见的不可到达类型还有网络不可到达(代码字段值为0)、主机不可达到(代码字段值为1)、协议不可到达(代码字段值为2)等等。
  2. 源抑制报文(类型字段值为4,代码字段值为0)则充当一个控制流量的角色,通知主机减少数据报流量。由于ICMP没有回复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。
  3. 无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定的时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文(类型字段值为11)的代码域有两种取值:代码字段值为0表示传输超时,代码字段值为1表示分段重组超时。
  • 时间戳请求

时间戳请求报文(类型值字段13)和时间戳应答报文(类型值字段14)用于测试两台主机之间数据报来回一次的传输时间。
传输时,主机填充原始时间戳,接受方收到请求后填充接受时间戳后以类型值字段14的报文格式返回,发送方计算这个时间差。
(有些系统不响应这种报文)