计算机网络:网络层(1):IP协议

网络层协议

  • IP:网际协议 Internet Protocol
  • ARP:地址解析协议
  • ICMP:网际控制报文协议

文章目录

  • 网络层协议
  • IP地址
    • 一、IP地址的分类
    • 二、注意:
  • IP数据报内容
    • 一、首部的字段
  • IP数据报的分组转发
    • 一、路由表
    • 二、默认路由
    • 三、转发流程
  • 子网划分
    • 一、基本思路
    • 二、子网掩码
    • 三、使用子网时的分组转发
  • 超网
    • 一、无分类编址CIDR
    • 二、CIDR分配案例
    • 三、最长前缀匹配
  • 总结

IP地址

IP地址是互联网上的每一台主机(或者路由器)的每一个接口分配一个在全世界范围内是唯一的32位识符,4字节

一、IP地址的分类

将IP地址划分为若干个固定类,每一类地址由两个固定长度的字段组成,分别为

  • net-id(网络号):标志主机所连接到的网络,整个互联网范围必须唯一
  • host-id(主机号):标志主机,在网络号所指的所属网络范围内必须唯一
    I P = { < n e t − i d > , < h o s t − i d > } IP = \{ , \} IP={<netid>,<hostid>}

IP地址划分为A,B.C.D.E五类地址,其中A,B,C类地址为单播地址

  • A,B,C类地址的网络字段号分别为1,2,3个字节,网络号字段前面有1-3位的类别位,分别为0,10,110
  • D类地址前四位为1110,用于多播
  • E类地址保留为后用
    计算机网络:网络层(1):IP协议_第1张图片

二、注意:

  • A类地址网络字段只有7位可以使用,但可指派的网络号位( 2 7 − 2 2^7-2 272)个:1-126

    • 全0的IP地址为保留地址
    • 127(011111111)保留为本地软件测试,用于本主机之间的进程通信,不是网络地址。
  • A类地址的主机号占三个字节,每个A类网络中的最大主机数是 2 24 − 2 2^{24}-2 2242:

    • 全0的主机号字段表示IP地址是本主机所连接到的单个网络地址,也只用来表示网络地址
    • 全1表示网络上所有主机,子网广播地址
  • B类地址:

    • B类最小网络地址:128.1.0.0,B类地址的可指派网络数为 2 14 − 1 2^{14}-1 2141
    • 最大主机数: 2 16 − 2 2^{16}-2 2162需要除去全0和全1的主机号
  • C类地址:

    • C类最小网络地址:192.0.1.0,可指派的网络总数为 2 21 − 1 2^{21}-1 2211
    • C类可指派的最大主机数 2 8 − 2 2^{8}-2 282,需要除去全0和全1的主机号

总结
计算机网络:网络层(1):IP协议_第2张图片


IP数据报内容

一、首部的字段

  • 版本:4位,指IP协议的版本,通信双方使用的版本必须一致,如IPV4,IPV6
  • 首部长度: 四位,最高(1111)标识15,但是对应于32位字即4字节,首部固定长度有20字节,所以最小为5
  • 区分服务
  • 总长度:首部和数据长度之和,字段总长度为16位,单位为字节,最大位65535字节
  • 标识:当IP数据报需要分片的时候,这个标识字段的值会被拷贝到所有数据报文的标识字段中,相同标识字段的值使分片后的各数据报最后能重组为原来的数据报,与序列号无关
  • 标志,占3位,只有前两位有意义:
    • 最低位 MF = 1:标识后面还有分片
    • 中间位 DF = 1:不允许分片;为 0允许分片
  • 片偏移:分组之后,某片在原分组中的相对位置,是相对于用户数据的起点,该片(的起点)从何开始。片偏移以8个字节为单位,所以分片长度一定是8字节(64位的整数倍)
  • 生存时间:TTL,又叫跳数,指数据报在互联网中至多可以经过多少个路由器,每次转发这个值减一;8位,最多255;若初始值设为1,则只能在本局域网传送
  • 协议:占8位,指出此数据报携带的数据使用的是何种协议,以便目的主机的IP层知道应该将数据部分上交给哪个协议进行处理
  • 首部检验和:只检验首部数据
  • 可变部分:为了增加IP数据报的功能,一般不用
    计算机网络:网络层(1):IP协议_第3张图片

IP数据报的分组转发

一、路由表

当需要在互联网中转发数据报时,我们可以通过IP数据包首部确认目的IP地址和发送的源地址,但是问题需要知道达到这个网络需要的经过的路径,或者说经过哪些路由器进行转发,这个时候路由表的作用就体现出来了。路由表存储的主要信息就是 ( 目 的 网 络 地 址 , 下 一 跳 地 址 ) (目的网络地址,下一跳地址) ()

二、默认路由

当对应的网络找不到路由表中的下一跳路由时,使用默认路由完成,路由表中默认路由标为0.0.0.0
计算机网络:网络层(1):IP协议_第4张图片

三、转发流程

我们可以通过目的网络地址确定下一跳的路由器的IP地址,而当前路由器处于目的网络时,便可以交付给目的主机,整个流程总结如下:

  1. 从数据报首部提取目的主机IP地址D,得出目的网络地址N
  2. 若N直接和路由器相连,则进行直接交付(通过ARP协议找到MAC地址,把数据报封装为以太网帧,利用链路层进行转发);否则执行3
  3. 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中指明的下一跳路由器,否则执行4
  4. 若路由表中有到达网络N的路由,则把数据报传送给路由表中指明的下一跳路由器
  5. 若路由表中有默认路由,则交给默认路由器,否则执行6
  6. 报告转发错误

路由表只是指明下一个路由器的IP地址,并没有完整的路径,所以转发过程需要逐层查找执行;同时转发给下一个路由器实际上也需要用到以太网协议,即需要知道目的路由器的MAC地址,这个也是通过ARP协议实现的


子网划分

一、基本思路

  1. 把一个IP地址下面划分为多个子网,外部网络看不见这个网络由多少个子网组成,对外表现依然为一个网络
  2. 二级IP地址为 < n e t − I D , h o s t − I D > <netID,hostID>三级IP地址为 < n e t − I D , s u b n e t − I D , h o s t − I D > <netID,subnetID,hostID>
  3. 其它网络发完本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。路由器收到IP数据报后,按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机
    计算机网络:网络层(1):IP协议_第5张图片

二、子网掩码

用于解决到达路由器后,路由器如何把它转发到子网上的问题。

子网掩码组成为连续的1(网络号有多少位就有多少个1),连续的0(主机号);不划分子网的网络也需要子网掩码,通过子网掩码和IP地址进行与运算可以不用查找地址类别就知道是哪一类的IP地址

  • A类地址的默认子网掩码为255.0.0.0, 或0xFF000000
  • B类地址的默认子网掩码为255.255.0.0, 或0xFFFF0000
  • C类地址的默认子网掩码为255.255.255.0,或0xFFFFFF00

以下图为例,分析子网掩码和子网数的关系

  1. 网络号不能全为0或1,所以当子网数为二的时候,需要2位子网号的位数
    01,10来标识子网,对应子网掩码为0xFFFFC000
  2. 网络号不能全为0或1,子网数位w和子网号的位数n的关系是 w = 2 n − 2 w=2^n-2 w=2n2
    计算机网络:网络层(1):IP协议_第6张图片
    可以发现,子网号划分的位数越多,对应的子网所能连接的主机数目越少,反之则主机数越多

三、使用子网时的分组转发

流程如下:

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

超网

一、无分类编址CIDR

  1. CIDR消除了传统的A、B、C类地址划分和子网划分的概念;CIDR把32位IP地址划分为前后两个部分,分别为网络前缀和主机号 ,CIDR使得IP地址从三级编址又回到了两级编址,但这是无分类的两级编址,记为: { < n e t − p r e f i x > , < h o s t − i d > } \{, \} {<netprefix>,<hostid>}在这里插入图片描述
    20是网络前缀的位数
  2. 网络前缀相同的连续IP地址组成一个CIDR块,知道一个块中的任何一个地址,就可以知道这个地址块的起始地址和最大地址;用地址掩码来标识CIDR块,将地址掩码和IP按位与就可以得到CIDR块号
  3. 路由表中利用CIDR来查找目的网络,这种地址的聚合叫做路由聚合

计算机网络:网络层(1):IP协议_第7张图片
计算机网络:网络层(1):IP协议_第8张图片
和IP划分位A,B,C类最大的区别在于,划分位ABC类的操作,实际上依然是通过子网掩码,划分出一个一个网络和子网进行管理,CIDR就直接一步到位,你IP的前缀相同,后面不管你是ABC类地址,我都不进行划分,都把你当成一个块进行管理,里面可能有很多个地址,我们转发都当成一个相同的大类进行处理

二、CIDR分配案例

某ISP有地址块206.0.64.0/18,相当于在前十位固定的情况下,拥有后14位的分配资格,当一个大学需要申请800个IP地址,该ISP可以给该大学分配206.0.68.0/22,即1K个IP地址,在各系下有可以进一步划分这个IP地址。

对比不应用CIDR的情况,如果没有使用CIDR技术,则该ISP相当于拥有64个C类地址,则所有需要转发给该ISP的路由器都不得不含有64个项目,当使用路由聚合后,只需要通过206.0.64.0/18就可以唯一确定该ISP;同理,该大学有四个系,每个系对应若干个C类地址,如果要进行转发(不使用CIDR),同样会面对路由器中项目过多的问题,用CIDR路由聚合可以解决这个问题

计算机网络:网络层(1):IP协议_第9张图片

三、最长前缀匹配

针对路由表中,使用CIDR进行路由聚合的路由块,有时会出现多个表项均满足转发标准,这个时候需要选择前缀最长(即主机最少,网络最具体)的表项进行操作。例如,设D=206.0.71.130, 在ISP的路由表中,有大学=206.0.68.0/22和四系=206.0.71.128/25,当ISP收到数据报,且目的IP地址为D时,有
在这里插入图片描述
在这种均匹配的情况下,选择前缀最长的表项,转发给对应路由器(路由器管理多个块)


总结

原来的ABC两级IP地址结构导致的缺陷就是,网络号固定为8,16,24位,扩展(变长变短)困难。尤其是当我需要新增一个网络时,按照两级结构,我需要先申请一个网络地址,然后再接入。增加了子网划分后,带来的好处主要有两个,一个是在同一网络号下,可以划分子网,灵活对主机分开管理(两级IP要分开管理就得再申请);另一个就是可以更方便的接入网络。子网掩码的作用,是告诉外面外面要进来的IP数据报,你的目的网络地址和我的网络号是否匹配;如果一个网络是传统的ABC类网络,子网掩码就是默认的子网掩码,子网掩码是本网络的标识特征之一

但是子网掩码本身是为了增加网络号设计的,带来了一个问题就是路由表项的数目迅速增加(路由表本身就是 目的网络 + 子网掩码 + 下一跳路由器),因此需要对路由器来说,需要减负,具体的操作就是CIDR的操作。根据网络前缀来集中管理,网络前缀相同,就当作一个网络地址块进行管理;一个网络块下面划分很多子网络,这个时候进一步路由就是下一级路由器的任务。路由表中用CIDR来查找地址,使得路由表中的一个项目能标识数千个原来的网络路由

你可能感兴趣的:(计算机网络,网络协议)