计网——网络层IP、ICMP协议重点


  在网络层中有两个较为重要的协议:IP协议和ICMP协议,其中IP协议是TCP/IP协议族的核心,也是构成互联网的基础,IP位于TCP/IP的网络层,对上可载送传输层各种协议的信息,(TCP、UDP),对下可将IP信息包放到链路层,通过以太网等技术传送。
  在了解IP协议前要先了解IP地址: IP地址(Internet Protocol Address),他是IP协议提供的一种统一的地址格式,IP地址为互联网上的每一个网络和每台主机分配到一个逻辑地址,以此来屏蔽物理地址的差异。由于在单局域网网段中计算机之间可使用网络访问层所提供的MAC地址进行通信,但在路由式网络中,由于MAC地址不能跨路由接口运行,因此MAC地址传输变得非常麻烦,为了统一的数据传输,则与要引进逻辑化、层次化的寻址方式对网络组织,也就是IP地址。在linux下可用 ifconfig命令查询自己网卡的IP地址。

IP协议

IP地址的格式和分类

  每个IP地址包括两个标识码(ID),网络ID和主机ID。网络ID用于辨识主机所在的网络,网络ID的位数直接决定了可分配网络数量;主机ID用于辨识网络中的主机,主机ID的位数决定了网络中最大的主机数量。
  为了满足实际不同需求,网络需要使用一种方法判断IP地址中那一部分是网络ID,哪部分是主机ID。IP地址为32位,被分为4个8位段,将IP地址分为三类:

  • A类:前8位表示网络ID,后24位表示主机ID,该类地址主要是政府机关单位使用;
  • B类:前16位表示网络ID,后16位表示主机ID;该类地址主要给中等规模企业使用;
  • C类:前24位表示网络ID,后8位表示主机ID,该地址主要分配给所需的人使用。

 此外还包含下两类隐藏地址,D类和E类:

  • D类:不分网络ID和主机ID;该地址用于多播;
  • E类:不分网络ID和主机ID;该类地址用于实验。

 为了更好地区分地址的类型,将每类地址的开头部分设置为固定类型: 如下图所示:

在这里插入图片描述
  每类地址的区别如下:

  • A类:网络 ID 的第一位以 0 开始的地址,其地址范围为:0.0.0.0~127.255.255.255;
  • B类:网络 ID 的第一位以 10 开始的地址,其地址范围为: 128.0.0.0~191.255.255.255;
  • C类:网络ID的第一位以 110 开始的地址,其地址范围为: 192.0.0.0~223.255.255.255;
  • D类:地址以 1110 开始的地址,其地址范围为:224.0.0.0~239.255.255.255;
  • E类:地址以 11110 开始的地址,其地址范围为240.0.0.0~255.255.255.254。
      数据在网络中进行传输通过识别IP地址中的网络ID,将数据发送到正确的网络中,然后再根据主机ID将数据发送到目标主机上。为了满足实际需求,需要进行子网划分,将网络划分为更小的网络,即将IP地址的主机ID部分划分为子网ID和主机ID,其中子网ID用来寻找网络的子网,主机ID用来寻找子网中的主机。这需要借助子网掩码,起作用就是指明地址中多少位用于子网 ID,保留多少位用于实际的主机 ID。

IP数据报格式

  在TCP/IP协议中使用IP协议传输数据的包被称为 IP 数据包,每个数据包都包含 IP 协议规定的内容,其被称为 IP 数据报文(IP Datagram)或者 IP 数据报。IP数据报文由首部报头)和数据两部分组成,首部前一部分为固定长度,共20个字节,每个数据报必有的,在首部的固定部分后是一些可选字段其长度为可变的。IP数据报头字段如下图所示:
在这里插入图片描述
  IP报头最小长度为20字节,上图中的每个字段含义如下:

  • 版本version):占4位,表示IP协议的版本,通信双方使用IP协议版本必须一致,例如版本号为4就是IPV4;
  • 首部长度网际报头长度IHL):占4位,可表示的最大十进制为15,其中的十进制中1bit标识数代表了首部为4个字节长,所以1111可对应60字节长,普通的IP首部长为20个字节长,所以这个标识符值为5即可,60为最大字节长,数据部分永远在4字节的整数倍开始,这样实现IP协议较方便,若不为4的整数倍则要用最后的填充字段填充。
  • 区分服务tos):也被称为服务类型占8位,用来获取更好的服务,只有在使用区分服务时,这个字段才起作用;
  • 总长度(totlen):首部和数据之和,单位为字节,总长度字段为16位,因此数据报最大长度为2^16-1=65535字节;
  • 标识identification):用来标识数据报,占16位,IP协议在存储器中维持一个计数器,每产生一个数据报则计数器加一,并将此值赋值给标识字段,当数据包长度超过网络的最大传输单元MTU时而必须分片时,这个标识字段的值将会被复制到所有数据报的标识字段中,具有相同标识字段的值的分片报文就会被重组成原来的数据报;
  • 标志flag):占3位,第一位未使用其值为0第二位称为DF(不分片)表示是否允许分片,取值为0时,表示允许分片,取值为1时表示不允许分片,第三位称为MF(更多分片)表示是否还有分片正在传输,设置为0时表示没有更多分片需要发送,或数据报没有分片。
  • 片移量offsetfrag):占13位,当报文被分片后该字段标记该分片在原报文的相对位置,片移量以8个字节位偏移单位,所以除了最后一个分片,其他分片的片移量都为8字节的整数倍;
  • 生存时间TTL):表示数据包在网络中的寿命,占8位,该字段由发出数据报的源主机设置,其目的是防止无法交付的数据报资源在网络中传输,从而消耗网络资源;路由器在转发数据报前先把TTL值减1,若TTL值减少到0,则丢弃这个数据报不再转发,因此,TTL 指明数据报在网络中最多可经过多少个路由器,求最大值位255,若其初值为1,则表示该数据报只能在本局域网传送;
  • 协议:表示该数据报文携带数据所使用的协议类型,占8位,该字段方便目的主机IP层知道按照什么协议来处理数据部分,例如TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1;
  • 首部检验和checksum):用于校验数据报的首部,占16位,数据报没经过一个路由器,首部字段可能会发生变化(TTL),所哟一需要重新校验,数据部分不会发生变化,因此不需校验;
  • 源地址:表示数据报的源IP地址,占32位;
  • 目的地址:表示数据报的目的IP地址,占32位,该字段用于校验发送是否正确;
  • 可选字段:该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的,这些选项包括严格源路由(数据报必须经过指定路由),网际时间戳(经过每个路由器的时间记录)和安全限制;
  • 填充:由于可选字段中的长度不是固定的,使用若干0填充该字段,可保证整个报头长度为32整数倍;
  • 数据部分:传输层数据,如保存TCP、UDP\ICMP或IGMP数据,数据部分长度不固定。

IP分片

  在链路层中的总结中我们了解了一个以太帧最大为1518个字节(其中头部的信息有14个字节,尾部校验和占了4个字节,MTU最大限制为1500个字节),但在实际的生活中,一个IP数据包可能大于这个限制:当路由器收到一个数据包时检查目的地址,确定出接口使用,检查该数据包是否超过了接口的MTU限制,若比MTU大且数据报头的不分段(DF)位被设为0,则路由器会对其进行分片,在IP数据报中有三个字段与数据报分片与重组有很大的关系:标识符、标志和片移量

例:由一组数据报总长为4820字节,首部20字节,数据4800字节,某一网络的MTU被设置为1420字节,则如何对其分片,如下图所示:
在这里插入图片描述
  例子来源:IP数据报的分片与重组

  分片通常发生在路由器上,上面说到过分片的偏移量是以8的倍数表示的八位组,因此数据报片大小必须为8的倍数,而且IP协议不会明确规定封装到物理帧的数据报应该为多大,源站可选择合适大小分片和重组将自动进行。

避免IP分片

  由于IP层没有超时重传,因此如果IP层对一个数据包分片后,刚好有一片丢失了,只能依赖传输层的协议进行重传(所有片),若要提高数据传输成功的效率,我们要避免IP分片。
对于UDP包我们需要在应用层中限制每个包的大小,一般不超过1472个字节(MTU通常1500字节,UDP首部8字节,IP首部20字节);
对于TCP包则不用应用层去限制,因为TCP是可靠的建立链接的协议,在三路握手的过程中,双方会互相告知MSS(Maximum Segment Size,最大报文段长度),其值一般为MTU - TCP首部20字节 - IP首部20字节,每次的数据不会超过MSS,因此也不会超过MTU从而避免了分片。

IP选路

  首先要介绍的是什么是IP的选路:IP选路即IP寻路,就是根据路由表中的记录,来决定当前数据报是否直接交付(目的地址属于当前局域网)还是发往下一跳路由。通常搜索匹配路由表的步骤如下:

  1. 搜索匹配的主机地址;
  2. 搜索匹配的网络地址;
  3. 搜索默认表项,通常为0.0.0.0;

  IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向那个网络接口发送分组,而不是像选路策略是一组决定将路由放入路由表的规则。
  我们可通过netstat -rn命令来查看本设备的路由表,其中-r为列出路由表选项,-n为以数字格式打印出IP地址选项:
在这里插入图片描述

  • Destination:目标网络地址;

  • Gateway:网关地址,要去目标网络,需要先走这条路;

  • Flags:此条路由记录的标志,可以设置的标志大致有:

    1、U Up,该路由可以被使用;
    2、G Gateway(重要),该路由是到一个网关(路由器),如果没有设置该标志,说明该条路由不是一个网关,是一条直接路由,Gateway列给出的是外出接口的IP地址,它的作用用来区分间接路由和直接路由,区别在于:发往直接路由的分组不但具有指明目的端的IP地址,还具有其链路层地址,发往间接路由时,IP地址指明的是最终目的地,但链路层地址指明的是网关(下一个路由器);
    3、H Host(重要),该路由是到一个主机,即Destination列给出的是一个完整的主机地址,如果没有设置该标志,说明该路由是到一个网络,而Destination列出的是一个网络地址:一个网络号,或者网络号与子网号的组合;
    4、D Dynamically,该路由是由ICMP重定向报文创建的;
    5、M Modified,该路由已被重定向报文修改;

参考:《TCP/IP详解 卷1:协议》

ICMP协议

  ICMP(Internet Control Message Protocol)即控制报文协议,他也是TCP/IP协议族的一个字协议,ICMP协议用于在IP主机和路由器间传递控制信息描述网络是否通畅主机是否可到达路由器是否可用等网络状态。
  数据包在发送到目标主机的过程中,通常会经过一或多个路由器,而数据包在传输过程中可能会遇到一些问题使不能到达目的主机,为了了解数据包在传输过程中遇到了那个为问题需要用ICMP协议跟踪,然后将信息反馈给源主机。

ICMP报文结构

  ICMP报文一般为8个字节,包括类型、代码、校验和和扩展内容字段,如下图所示:
在这里插入图片描述
类型表示ICMP的消息类型,代码表示对类型的进一步说明,校验和表示对整个报文的报文信息校验。常见的类型和代码组合含义如下:

类型 代码 含义
0 0 回显应答(ping 应答)
3 0 网络不可达
3 1 主机不可达
3 2 协议不可达
3 3 端口不可达
3 4 需要分片但设置不分片位
3 5 源站选路失败
3 6 目的网络未知
3 7 目的主机未知
3 9 目的网络被禁止
3 10 目的主机被禁止
3 11 由于服务类型 TOS,网络不可达
3 12 由于服务类型 TOS,主机不可达
3 13 由于过滤,通信被禁止
3 14 主机越权
3 15 优先中止失效
4 0 源端被关闭
5 0 对网络重定向
5 1 对主机重定向
5 2 对服务类型和网络重定向
5 3 对服务类型和主机重定向
8 0 回显请求(ping 请求)
9 0 路由器通告
10 0 路由器请求
11 0 传输期间生存时间为 0
11 1 在数据报组装期间生存时间为 0
12 0 坏的 IP 首部
12 1 缺少必须选项
13 0 时间戳请求
14 0 时间戳应答
17 0 地址掩码请求
18 0 地址掩码应答

  ICMP类型报文总的来说分为两类:

  1. 查询报文:
    (1)类型值为0或8时,表示回送(Echo)请求或应答
    (2)类型值为13或14时:表示时间戳(Timestamp)请求或应答

  2. 差错报告报文:
    (1)类型值为3时:表示终点不可达
    (2)类型值为4时:表示源点抑制
    (3)类型值为5时:表示改变路由(Redirect)
    (4)类型值为11时:表示超时
    (5)类型值为12时:表示参数问题

猜你喜欢

转载自blog.csdn.net/weixin_42647166/article/details/105765136