路由表聚集、IP包、ICMP

0x00.路由表的聚集

概念:

将2、4、8、16……(2^n)条路由信息合并成一条

示例1

210.31. 0110 0100 .0/24   E0(出口)   219.30.19.21 下一跳入口
210.31. 0110 0101 .0/24   E0(出口)   219.30.19.21 下一跳入口
*合并*
210.31.0110 0100.0/23   E0(出口)   219.30.19.21 下一跳入口

示例2

210.31.0110 0100.0/24   E0(出口)   219.30.19.21 下一跳入口
210.31.0110 0101.0/24   E0(出口)   219.30.19.21 下一跳入口
210.31.0110 0110.0/24   E0(出口)   219.30.19.21 下一跳入口
210.31.0110 0111.0/24   E0(出口)   219.30.19.21 下一跳入口
*合并*
210.31.0110 0100.0/22   E0(出口)   219.30.19.21 下一跳入口

作用:

路由表的聚集可简化路由表,提高路由器的转发效率,在路由表中进行。

0x01.IP报头

IPV4报头是把上一层的数据(传输层)加上了源IP地址和目标IP地址等数据,结构详见如下:

长度

IP包的长度(最大传输单元):

MTU=IP报头长度+传输层报头长度+DATA长度

单位:字节。

下图是各种数据链路(不同种类的局域网)的MTU(Maximum Transmission Unit)

资源访问出错

IP报头结构

版本

4 bit

首部长度

4 bit

服务类型(TOS)

8 bit

总长度(字节数)

16 bit

标识

16 bit

标志

3 bit

片偏移

13 bit

生成时间(TTL)

8 bit

协议

8 bit

首部检验和

16 bit

源IP地址

32 bit

目的IP地址

32 bit

选项(可选)

数据(填充项)

  • 版本:4位
  • 报头长度:4位
  • 服务类型(TOS: Type Of Service):8位,IP服务的类型与质量,由应用程序设定,现在不用。可以设定数据包的优先级(实时语音和视频,视频,普通包),无线网中使用。
  • 包的总长度(Total Length ):长度16位,单位:字节,IP包的长度即:MTU
  • 标识(identification):16位。IP软件在内存中维持一个计数器,每产生一个IP包,计数器就加一,但这不是包的序号,因为IP是无连接的服务,数据包存在不按顺序接受的问题,当IP包的长度超过MTU时,一个IP包要分为若干个小包,同一大包分出来的小包的这个标识一样。
  • 标志(flag):共3位
    • MF(more fragment )=1:不是最后一个小包;
    • MF(more fragment )=0 :分过包的最后一个小包;
    • DF(Don,t Fragment)=1:不能分包;
    • DF(Don,t Fragment)=0:能分包;

另一位没有使用

  • 片位移:13位;小包在大包中的相对位置,单位:8字节,每一个小包的长度是8字节的整数倍;
  • 生存时间(TTL:time to live):8位,数据包每过一个路由器TTL减1,减到0就丢弃该包,说明目标不可达;初值是15。
  • 协议:上层(传输层)协议的类型(8位)
    • 协议名 ICMP IGMP TCP EGP IGP UDP IPv6 OSPF
      字段值 1 2 6 8 9 17 41 89
  • 报头检查和(报头检查和) 16位。将校验和的内容设为“0”,然后将报头的内容转换为一系列16位比特(按16位分组),分别求反码,求和,和的反码即:校验和。在接收端,对接收到的IP报头(校验和与其它内容一样看待),执行同样的运算,结果为“0”,说明数据正确。
  • 源IP与目标IP:(各32位)
  • 可选项:长度可变,不是必需的,在测试与调试时使用。
  • 填充项(padding):如果报头长度不是32位的整数倍在此用“0”填充。凑数用。

0x02.ICMP互联网控制消息协议(主机路由器之间联络的数据包)

ICMP协议详解

ICMP协议是一个网络层协议。
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。
所以我们就需要一种协议来完成这样的功能–ICMP协议。

ICMP协议的功能
ICMP协议的功能主要有:

  1. 确认IP包是否成功到达目标地址
  2. 通知在发送过程中IP包被丢弃的原因

如下图所示:

资源访问出错

我们需要注意几点:

  1. ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议
  2. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6

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

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

类型(十进制) 内容
0 响应应答(echo reply)
3 不能到达目的地(destination unreachable)
4 开始点抑制(sourch quench)
5 重新导向(redirect)
8 响应请求(echo request)
9 路由器通知(router advertisement)
10 路由选择(router selection)
11 超过时间(time exceeded)
17 地址掩码请求(address mask request)
18 地址掩码应答(address mask reply)
  • ICMP重新导向消息(类型5)当路由器检测到发送端使用的不是最佳路由时,通知发送端改道发送,在该消息中包含最佳的路由消息和原来的数据报。

  • ICMP超时消息(类型11)在IP包中含(TTL :time to live ),每过一个路由器减一,当TTL=0时,路由器将该包丢弃,并向发送端发送超时消息包

  • ICMP响应消息(类型0,8)对ping命令的应答包,判断网络连通的。Ping 127.0.0.1 环回地址。

  • ICMP开始点抑制消息(类型4)在低速广域网线路上,路由器为了缓解拥挤状态,通知发送端加大发送间隔。

  • ICMP选择路由器消息(类型9,10)当一台主机想知道哪一个路由器与自己相连,发送类型10的ICMP包,路由器返回类型9的ICMP包

  • ICMP地址掩码消息(类型17,18)ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。

ICMP协议应用

我们经常使用的ping命令以及追踪网络路径的 traceroute(windows下是tracert)这两个命令就是基于ICMP协议。

  • ping:

    1. ping命令会先发送一个 ICMP Echo Request给对端
    2. 对端接收到之后, 会返回一个ICMP Echo Reply
    3. 若没有返回,就是超时了,会认为指定的网络地址不存在。
  • traceroute:打印出可执行程序主机,一直到目标主机之前经历多少路由器。

欢迎请我喝奶茶(*゜ェ゜*)
---这篇文章到头了---感谢您的阅读-------------