【TCP/IP协议栈】3. 网络层协议(IP、ARP、RARP、ICMP)
参考资料:
https://www.yuque.com/u41716106/ni1clp/ggeoi3p3mr0zegb9?singleDoc# 《【学习】3. 网络层协议(IP、ARP、RARP、ICMP)》
前言:
总结:
【TCP/IP 协议族】网络层协议(IP、ARP、RARP、ICMP)
协议森林03 IP接力赛 (IP, ARP, RIP和BGP协议) - Vamei - 博客园
网络层简介
网络层(network layer)是实现互联网的最重要的一层。正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet。更高层的协议,无论是TCP还是UDP,必须通过网络层的IP数据包(datagram)来传递信息。操作系统也会提供该层的socket,从而允许用户直接操作IP包。
IP数据包是符合IP协议的信息(也就是0/1序列),我们后面简称IP数据包为IP包。IP包分为头部(header)和数据(Data)两部分。
数据部分是要传送的信息,头部是为了能够实现传输而附加的信息(这与以太网帧的头部功能相类似,如果对帧感到陌生,参看协议森林02 小喇叭开始广播 (以太网与WiFi协议) - Vamei - 博客园一文)。
网络层
中数据包(帧头/首部+应用数据)
叫做:数据报(datagram)
【IP 数据报】
【网络层】IP协议
网络-IP协议详解(报文格式、分类、NAT、子网、CIDR、抓包分析)_nat报文-CSDN博客
IP协议详解-CSDN博客
IP 协议定义
- IP协议是TCP/IP协议族中最为核心的协议,TCP、UDP、ICMP、IGMP数据都以IP数据报格式传输(IPv4、IPv6)
- 与IP协议配套使用的还有三个协议:ARP、ICMP、IGMP协议
IP 协议功能
- 寻址与路由
-
- 寻址:IP寻址。对某个设备的IP地址定位
- 路由:路由选择。查看路由表确认路标(根据对方的IP地址,寻找最佳路径传输信息)
- 传递服务
-
- ① 不可靠(IP协议只是尽自己最大努力去传输数据包),可靠性由上层协议提供(TCP协议);
- ② 无连接;(事先不建立会话);
- 数据包的分片和重组
-
- 分片:数据包切割。大于MTU,分片处理
- 重组:数据包组合。对分片进行组合处理
IP 协议报文格式(IPv4/IPv6)
字段 | 作用 | 存储大小 (Bit/位) | 解释 |
版本号 (version) | 指IP协议的版本 | 占4位 | 通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4),以后要使用IPv6(即版本6的IP协议)。 |
头部长度 (header length) | 可表示的0~15,单位是4B | 占4位 | 因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5(即二进制表示的首部长度是0101)。而当首部长度为最大值1111时(即十进制数的15),就表明首部长度达到最大值15个32位字长,即60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始。首部长度限制为60字节的缺点是有时可能不够用,但这样做是希望用户尽量减少开销。最常用的首部长度是20字节(即首部长度为0101),这时不使用任何选项。 |
服务类型 (Type Of Service) | 用来获得更好的服务 | 占8位 | 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置0). 4位TOS(最小延时, 最大吞吐量, 最高可靠性, 最小成本),只能选其一. ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要 这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(DifferentiatedServices)。只有在使用区分服务时,这个字段才起作用,在一般的情况下都不使用这个字段。 |
总长度 (total length) | 指首部和数据之和的长度,单位为字节 | 占16位 | 总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节 |
标识 (identification) | 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id是相同的 | 占16位 | IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。 |
标志 (flag) | 第一位保留,第二位置为1表示禁止分片, 这时候如果报文长度超MTU, IP模块就会丢弃报文. 第三位表示”更多分片”, 如果分片了的话, 最后一个分片置为1, 其他是0 目前只有低两位有意义 | 占3位 | 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。标志字段中间的一位记为DF(Don't Fragment),意思是“不能分片”。只有当DF=0时才允许分片。 |
分片偏移 (framegament offset) | 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置 注意:发送数据报过大,就要对其数据报分片处理,每一个分片都会含有一个标识(IP地址 + 标识),到达目的地要对其所有的分片进行重新组装; 重点:片偏移计算过程;首部分大题的内容是一样,因为都属于同一个数据报文! | 占13位 | 片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,除了最后一个分片,长度一定是8字节(64位)的整数倍,最后一个分片可能是8字节(64位)的整数倍。 |
生存时间 (Time To Live, TTL) | 生存时间字段常用的英文缩写是TTL(Time To Live),表明这是数据报在网络中的寿命 数据报到达目的地的最大报文跳数 | 占8位 | 由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈子(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1),因而白白消耗网络资源。最初的设计是以秒作为TTL值的单位。每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值减为零时,就丢弃这个数据报。 |
协议 | 表示上层协议的类型 | 占8位 | 协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。 至少记住TCP和UDP(腾讯安全工程师笔试题) |
头部校验和 | 这个字段只检验数据报的首部,但不包括数据部分 | 占16位 | 使用CRC进行校验, 来鉴别头部是否损坏 这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。 |
源地址 | 发送端 | 占32位 | |
目的地址 | 接收端 | 占32位 | |
选项字段 | 用来支持排错、测量以及安全等措施 | 0~40 位 不定长, 最多40字节 | |
填充 | 全0,把首部补成4B的整数倍 | 不定长 |
IP 抓包分析
IPv4 地址
IPv4 地址分类
IP地址表示如下:
IP地址::={<网络号>,<主机号>}
A 类范围,二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110)
二进制对于人类来说很难记忆,所以我们将IP地址分为上面的4个部分,每个部分8位(0-255),使用.分隔,就是点分十进制。
分类 | 地址范围 |
A类 | 0.0.0.0到127.255.255.255 |
B类 | 128.0.0.0到191.255.255.255 |
C类 | 192.0.0.0到223.255.255.255 |
D类 | 224.0.0.0到239.255.255.255 |
E类 | 240.0.0.0到247.255.255.255 |
补充:
A类是7位,应该是0-127呀,为什么是1-126呢?因为一些规定,有些ip作为了特殊ip,不能作为A类地址的网络。
- 以下特殊IP需要单独记忆一下
- 除去特殊ip后
网络号全0表示本网络
主机号全为0表示指向本网,主机号全为1表示广播地址,16777214是2^24-2,去掉全0和全1,其他同理。
私有IP也需要注意一下, 私有IP就是本地网络的IP,路由器不会转发目的地址是私有地址的数据报。
- 我们平常用的大多是C类的,如果在使用电脑,可以打开命令窗口查看一下,Windows是使用ipconfig、Linux是使用ifconfig。
【网络层】ARP(地址解析协议)
ARP协议详解 ------- 一看就懂-CSDN博客
ARP协议报文格式及ARP表_熟悉arp报文格式和数据封装方式。-CSDN博客
补充
- 认识 MAC 地址,去看上面的 MAC 地址
ARP 协议定义
- 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
将IP地址转换为相应物理地址
- ARP协议就是根据目标IP地址以广播方式获取相应的MAC地址,并将MAC地址存入ARP缓存表
ARP 协议作用
- 在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
- 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。
- 所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
ARP 协议工作流程
假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:
- 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
- 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。
ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址为主机B的IP地址、目标MAC地址字段为全0
但以太网帧头的目标MAC地址为广播地址(FF:FF:FF:FF:FF:FF)
由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
- 主机B比较自己IP地址和ARP请求报文中的 目标IP 地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。
之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
- 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
ARP 协议报文格式
- ARP 报文格式:
硬件类型
:占两字节,表示ARP报文可以在哪种类型的网络上传输,值为1时表示为以太网地址。上层协议类型
:占两字节,表示硬件地址要映射的协议地址类型,映射IP地址时的值为0x0800。MAC地址长度
:占一字节,标识MAC地址长度,以字节为单位,此处为6。IP协议地址长度
:占一字节,标识IP得知长度,以字节为单位,此处为4。操作类型(OP)
:占2字节,指定本次ARP报文类型。1标识ARP请求报文,2标识ARP应答报文。源MAC地址
:占6字节,标识发送设备的硬件地址。源IP地址
:占4字节,标识发送方设备的IP地址。目的MAC地址
:占6字节,表示接收方设备的硬件地址,在请求报文中该字段值全为0,即00-00-00-00-00-00,表示任意地址,因为现在不知道这个MAC地址。目的IP地址
:占4字节,表示接受方的IP地址。
- ARP 帧格式:以太网帧头 + ARP 报文
ARP报文不是直接在网络层上发送的,它还是需要向下传输到数据链路层,所以当ARP报文传输到数据链路层之后,需要再次进行封装。以以太网为例,ARP报文传输到以太网数据链路层后会形成ARP帧。ARP帧如下图所示,他就是在ARP报文前面加了一个以太网帧头。
以太网帧头(14 字节)的三个字段说明(详细去看网络接口层的以太网部分)
目的MAC地址
:占 6 字节,如果是ARP请求帧,因为它是一个广播帧,所以要填上广播MAC地址(FF-FF-FF-FF-FF-FF),其目标主机是网络上的所有主机。(因为不知道这个 IP 的 MAC 地址,所以就通知所有 IP,让该 IP 自己认领,如何应答)源MAC地址
:占 6 字节,这是发送ARP帧的节点MAC地址。以太网帧类型
:占 2 字节,这里用来标识帧封装的上层协议,因为本帧的数据部分是ARP报文,所以直接用ARP的协议号0x0806表示就可以了。
ARP 协议抓包分析
圈中一对ARP请求和ARP应答
- ARP 请求报文
- ARP 应答报文
ARP 映射表
设备通过ARP解析到目的MAC地址后,将会在自己的ARP表中增加IP地址到MAC地址的映射表项,以用于后续到同一目的地报文的转发。
无论是主机,还是交换机都会有一个用来缓存同一网段设备IP地址和MAC地址的ARP映射表,用于数据帧的转发。设备通过ARP解析到目的MAC之后,将会在自己的ARP映射表中增加IP地址到MAC地址的映射表,以用于后续到同一目的地数据帧的转发。ARP表项分为动态ARP表项和静态ARP表项。
动态ARP表项
动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。当到达老化时间、接口down时会删除相应的动态ARP表项。
静态ARP表项
静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。
配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。
短静态ARP表项
在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的相应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接受ARP响应报文的接口加入该静态表项中,之后就可以用于IP数据包的转发了。
长静态ARP表项
在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表所对应的VLAN(虚拟局域网)和出接口。也就是长静态ARP表项同事绑定了IP地址、MAC地址、VLAN和端口,可以直接用于报文转发。
免费ARP
免费ARP指主机发送ARP查找自己的IP地址,通常发生在系统引导期间进行接口配置时。与标准ARP的区别就是免费ARP分组的目的IP地址字段封装的是自己的IP地址,即向所在网络请求自己的MAC地址。
【网络层】RARP(反向地址解析协议)
【TCP/IP详解】ARP报文格式 | RARP报文格式_0x8035-CSDN博客
RARP 协议定义
- 允许局域网的物理机器从网关服务器的ARP 表或者缓存上请求其IP 地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。可以使用于以太网、光纤分布式数据接口及令牌环 LAN。
RARP 协议报文格式
RARP分组的格式与ARP分组基本一致
它们之间主要的差别:
- 是RARP请求或应答的帧类型代码为0x8035
- 且RARP请求的操作代码为3,应答操作代码为4。
- 以太网帧头/首部:
-
以太网目的地址
:接收方设备的硬件地址(48bit,目的地址全为1的特殊地址是广播地址)。以太网源地址
:发送方的硬件地址以太网帧类型
:表示后面数据的类型(其中,0x0806表示后面的数据是属于ARP包的,0x8035表示后面的数据属于RARP包)。
- RARP 报文格式:
-
硬件类型
:表示硬件地址的类型(其中,值为1表示以太网地址,其他还可能表示令牌环地址)。协议类型
:表示要映射的协议地址类型(其中,0x0800表示IP地址,其他还可能是ICMP/IGMP)。硬件地址长度
:指出该报文中硬件地址的长度(ARP报文中,它的值为6)。协议地址长度
:指出该报文中协议地址的长度(ARP报文中,它的值为4)。op
:操作字段,共有4种类型(1.ARP请求,2.ARP应答,3.RARP请求,4.RARP应答)
。发送端以太网地址
:发送方设备的硬件地址。发送端IP地址
:发送方设备的IP地址。目的以太网地址
:接收方设备的硬件地址。目的IP地址
:接收方设备的IP地址。
【网络层】ICMP(互联网控制消息协议)
ICMP协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。
因此我们需要ICMP协议来完成这样的功能
为什么需要ICMP协议?
- IP 协议本身不提供差错报告和差错控制机制来保证数据报递交的有效性,
- 例如:数据报在网络中被丢弃了,源主机更希望等到该数据报递交过程中的异常信息。
- IP 协议不能进行主机管理与查询机制
- 例如:不知道对方主机或者路由器的活跃,对于不活跃的主机和路由器就没有必要发送数据报。
所以ICMP协议就是为了补充IP协议的这两个缺点而设计的,配合IP协议使用
为了更有效地转发IP数据报和提高交付成功机会!
互联网控制报文协议 (ICMP) 简明指南:基础小白必读-CSDN博客
ICMP协议以及报文讲解(ICMP查询报文、ICMP差错报文)_icmp报文-CSDN博客详细
ICMP 协议定义
- 互联网控制报文协议(Internet Control Message Protocol, ICMP),主要用来在网络设备间传递各种差错、控制和查询等消息(在收集网络信息、诊断、排查故障等方面具有重要的作用)
当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
我们可以通过Ping命令发送ICMP回应请求消息并记录收到ICMP回应回复消息。通过这些消息来对网络或主机的故障提供参考依据
- ICMP是网络层协议,协议号为1
- ICMP是互联网的标准协议(RFC792),并作为IP数据报的一部分发送。
ICMP 协议功能
ICMP协议的功能主要有:
-
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
我们需要注意几点:
-
- ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议
- ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6
ICMP 协议报文格式
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。
一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。
ICMP 报文是 IP 数据报的组成部分主要有两种主要类型:
-
- 差错报告报文和询问报文。
IP 数据报 = IP 首部 + ICMP 报文
类型 | 说明 |
Type 类型 | 占一字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类(不知道准不准)
|
Code 代码 | 占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型 |
Checksum 校验和 | 这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错 (其计算方法与在我们介绍IP报头中的校验和计算方法是一样的) |
ICMP 协议报文类型
通过Type和Code定义ICMP的报文类型,ICMP报文主要分为查询报文和差错报文两大类:
- 查询报文:主要用于在主机和路由器之间传输控制信息,也用来探测网络连通性和路径等信息
- 差错报文:用于报告数据传输过程中的错误
ICMP 差错报文格式
用于检测IP数据报在传输过程的异常信息(目的不可达、源站抑制、重定向、超时、参数错误)
ICMP 报文类型 Type | 代码值 Code | 描述 |
3 (目的不可达报文) | 0 | 网络不可达(找不到地方) |
1 | 主机不可达(找到地方,找不到人) | |
2 | 协议不可达(找到地方且找到人,但口令对不上) | |
3 | 端口不可达(找到地方且找到人以及口令对上,但事情对不上) | |
4 | 需要分片但设置了不分片(发不了) | |
5 | 源站路由失败(速度慢了) | |
…… | …… | |
4 (源抑制报文) | 0 | 源端被关闭 |
5 (ICMP重定向报文) | 0 | 对网络重定向 |
1 | 对主机重定向 | |
2 | 对服务类型和网络重定向 | |
3 | 对服务类型和主机重定向 | |
11 (TTL为0报文) | 0 | 传输期间生存时间为0 |
1 | 数据报组装期间生存时间为0 | |
12 (报文格式问题) | 0 | 坏的IP首部 |
1 | 缺少必须的选项 |
ICMP 查询报文格式
主要用于在主机和路由器之间传输控制信息,也用来探测网络连通性和路径等信息
用于诊断两个网络设备之间彼此是否能够通信
ICMP 协议回显请求/应答报文(抓包分析)
作用
通过ping工具发送ICMP回显请求消息探测网络的连通性(对端回应ICMP回显应答请求)
通过tracert工具发送ICMP回显请求来探测去往某目的网路的路径信息(修改ICMP回显请请求的TTL的值,通过对端回应的Type为11的ICMP差错报文来得到路径信息)
报文格式
Type
8为请求
0为应答
Identifier
标识符,标识ICMP该回显应答对应的是哪个回显请求(通过该字段使得请求和应答一一对应)
BE和LE是通过不同的编码格式得到的值,解码后的信息都是一样的
可以理解为BE是针对于windows系统的编码格式,LE是针对于Linux系统的编码格式
Sequence Number
序列号,发送报文的序列号,每次发送序列号就+1
Data
可选,包含要发送的数据(回显应答通常返回与回显请求所收到的数据相同)
常见的 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的报文格式返回,发送方计算这个时间差。
(有些系统不响应这种报文)
基于 ICMP 的常见命令
- ping命令
用法如下:
注意, 此处 ping 的是域名,不是url,域名可以通过DNS解析成IP地址
ping命令的功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
那么如何验证的呢?
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。
问题:
telnet是23端口,ssh是22端口,那么ping是什么端口?
答:ping命令是基于ICMP,是在网络层。
而端口号,是传输层的内容。所以在ICMP中根本就不关注端口号这样的信息。
- traceroute
traceroute也是基于ICMP协议实现的。
功能:
打印出可执行程序主机,一直到目标主机之前经历多少路由器。
举例如下:
【网络层】解答
- 为啥ARP要做IP到MAC的映射?
-
- 数据封装与解封装
-
-
- 因为,你在应用层和运输层里,目的地址都写得是IP
- 不把IP转化为MAC,咋寻址啊?
- RARP 同理
-
- 那,局域网和公网怎么通信呢?
-
- 所以,NAT来了啊!!!