IP 协议

IP是TCP/IP核心协议,所有的TCP,UDP,ICMP,IGMP数据都以IP数据报传输。IP协议提供不可靠,无连接的数据报传送服务。

  • 不可靠的意思是它不能保证IP数据报能成功的到达目的地,IP仅仅提供尽力而为的传输服务。
  • 无连接的意思是IP并不维护任何关于后序数据报的状态信息,每个数据报的处理是相互独立的。

IP 报文格式

IP 协议_第1张图片
IP报文格式.png
  • 4位版本
    IPV4还是IPV6

  • 4位首部长度
    (2^4 - 1) * 4=60。所以首部最长为60个字节

  • 8位服务类型

  • 16位总长度字段
    整个IP数据报的长度利用首部长度和总长度就可以是算出IP数据报中数据内容的起始地址。该字段长度为16Bit,所以IP数据报最长可达65535字节。

  • 标识字段
    每产生一个数据报,计数器就加1,这样就可以标识每一份数据报。当数据报被分片后,标识字段会被复制到所有数据报片中。(关于IP分片,参见UDP协议)

  • 标志字段
    3位中目前只有2位有意义:

    • MF:MF=1表示后面还有分片, MF=0表示已是数据报片中的最后一个。
    • DF:DF意思是“不能分片”, 只有当DF=0,才允许分片。
  • 片偏移
    用于IP分片中该片偏移原始数据报开始处的位置。

  • 生存时间TTL
    设置该数据报可以经过的最多的路由器数。指定了数据报的生存时间,经过一个路由器,它的值就减1,当该字段为0时,数据报就被丢弃,并发送一个ICMP报文通知源主机。

  • 首部检验和字段
    这个字段只检验数据报的首部,不包括数据部分。

  • 选项字段
    是一个可变长字段,选项字段一直以4字节作为界限。这样就可以保证首部始终是4字节的整数倍。

  • 源IP
    记录源IP地址

  • 目的IP
    记录目的IP地址

IP编址

IP地址的编址方法一共经历3个历史阶段

  • 分类的IP地址,最基本编址
  • 子网的划分,对基本编址的改进
  • 无分类编制(构成超网),新的无分类编址
分类的IP地址
IP 协议_第2张图片
分类.png
  • A类
    A类地址的网络号字段8位,第一位固定为0,于是只有7位可以供使用。于是总共有0.x.x.x ~ 127.x.x.x 有2^7 - 2 = 126个,为什么要减掉2个。原因是:

    • 网络号全为0表示本网络。
    • 01111111(127)表示本地软件的环回测试,若主机发送一个目的地址为该网络的IP数据报,不会把IP数据报发送到网络上。

    A类地址的主机号为24位,因此每一个A类网络中的最大主机数是2^24 - 2,减2的原因是主机号为0,表示该主机所连的网络,全1表示网络上所有的主机(广播地址)。

  • B类
    B类地址网络号字段有2字节,但前面2位已经固定,只剩下14位可以进行分配。因为不会存在全0或者011....所以不用减2。所以总共有128.1.x.x ~ 191.255.x.x(128.0.0.0不指派)即2^14 - 1个网络地址,主机地址2^16 - 2

  • C类
    C类地址指派范围是192.0.1.x ~ 223.255.255.x(192.0.0.x也是不指派的)即2^21 - 1个网络地址,主机数量是2^8 - 2

划分子网

划分子网主要是为了解决传统IP分类编制法的IP地址空间的利用率有时很低两级IP不够灵活的缺点。

划分子网的方式是从主机号借用若干单位作为子网号,划分子网属于一个单位内部的事情,对外仍然表现为一个网络。

                     IP地址 = {  < 网络号 > :< 子网号 > :< 主机号 >  }
  • 子网掩码
    从IP数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分,因为32位的IP地址本身以及数据报的首部都没有包含任何有关子网划分的信息。

    所以现在要得出网络号,我们必须知道这个网络的子网掩码(路由器在和相邻路由器交换路由信息时,会告诉自己所在网络(或子网)的子网掩码)。

    IP 协议_第3张图片
    案例.png

使用子网掩码的好处就是不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位相"与",就能立即得出网络地址出来。
因为有默认掩码的存在:
【1】 A类地址的默认掩码:255.0.0.0
【2】 B类地址的默认掩码:255.255.0.0
【3】 C类地址的默认掩码:255.255.255.0
这样即使没有划分子网,也能得出正确的网络号。

IP分组转发

在划分子网后,路由表必须包含以下3项内容:目的网络地址子网掩码下一跳地址

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

如图:

  1. 源主机H1向目的主机H2发送的分组的目的地址是H2的IP地址128.30.33.128。
  2. 源主机H1首先要进行的操作要判断:发送的这个分组,是在本子网上进行直接交付还是要通过本子网上的路由器进行间接交付?
  3. 源主机H1把本子网的"子网掩码255.255.255.128"与目的主机H2的IP地址128.30.33.128相与得出128.30.33.128,它不等于H1的网络地址(128.30.33.0)。这说明H2和H1不在同一个子网上。因此H1不能把分组直接交付H2,而必须交给子网上的默认路由器R1,由R1来转发。
  4. 路由器R1在收到一个分组后,就在其路由表中寻找有无匹配的网络地址。
  5. 先看R1路由表中的第一行,用这一行的"子网掩码255.255.255.128"和收到的分组的"目的地址128.30.33.138"相与,得出128.30.33.128,和目的网络地址128.30.33.0比较,并不相符合。
  6. 用同样的方法找下一行,发现匹配,于是就不再继续查找下去。 R1把分组从接口1直接交付主机H2。
无分类编制(构成超网)

划分子网在一定程度上缓解了因特网的问题,但仍然面临3个问题:

  • B类地址即将分配完
  • 因特网上主干网上的路由表项急剧增长
  • 整个IPV4的地址空间即将被耗尽

针对前2个问题,提出了无分类编制CIDR的思想(第3个问题有IPV6负责)

CIDR有2个主要特点:

  • CIDR消除了传统的A类,B类,C类地址以及划分子网的概念
  • CIDR把网络前缀都相同的连续IP地址组成一个CDIR地址块。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址快的起始地址和最大地址几个地址数。
IP 协议_第4张图片
CIDR.png

为了更方便的进行路由选择,CIDR使用32位的地址掩码,其中1的个数就是网络前缀的长度,也就是斜线记法中,斜线后面的数字。

你可能感兴趣的:(IP 协议)