IP地址

IP地址分类

IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。分类如下:

  • A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;
  • B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;
  • C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。
  • D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通信);
  • E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。

注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。

广播地址

广播地址通常称为直接广播地址,是为了区分受限广播地址。
广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。

组播地址

D类地址就是组播地址。

255.255.255.255

该IP地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本地广播,也可跨网段广播。

0.0.0.0.0

常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。

回环地址

127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。

A、B、C类私有地址

私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。

  • A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
  • B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
  • C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255

子网掩码及网络划分

划分子网的原因:

  1. IP地址空间的利用率低,例如有的单位申请一个B类地址,可是连接的主机数并不多,但又由于拓展性不愿意申请C类网络,导致了浪费
  2. 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏
  3. 两级IP地址不够灵活

划分子网的基本思路:

  1. 对外仍表现为一个网络
  2. 在本地内部变为三级IP地址:网络号,子网号和主机号
  3. 凡是从其他网络发送给本单位某个主机的IP数据包,仍是根据目的网络号找到连接在本单位网络上的路由器,但此路由器收到报文后,再按目的网络号和子网号找到目的子网,把IP数据报交付目的主题

子网掩码

子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中.
ABC类IP地址的默认子网掩码如下图所示

无分类编址CIDR(构成超网)

特点如下:

  1. 取消ABC分类和划分子网的概念,由网络前缀(网络号)和主机号构成,并且使用斜线记法(斜线后协商网络前缀所占的位数)
  2. 为了更方便的路由选择,使用32位的地址掩码,这个概念类似子网掩码,为了兼容以前的子网划分和子网掩码

IP帧格式

  • 版本:长度为4bit,表示IP报文版本信息。该字段值为0x4,表示是IPv4报文,该字段值为0x6,表示是IPv6报文。

  • 首部长度:长度为4bit,用来表示IP包的头部长度(单位4字节)。如果不带可选字段,则为20字节,最长为60字节。

  • 服务类型(DS域):长度为8bit,只有在有QoS差分服务要求时这个字段才起作用,用来区分报文的转发优先级。

  • 总长度:长度为16bit,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。在进行分片时,总长度为分片后的每一片的IP首部和数据长度的总和。

  • 标识:长度为16bit,用于IP报文的分片和重组。主机每发一个报文该标识加1,因为IP是无连接服务,不存在按序接收问题,所以该序号仅用于IP分片时,在数据报长度超过MTU必须分片时,将该序号复制到所有的数据分片的标识字段中,相同的标识字段代表这些分片属于同一数据报

  • 标志:长度为3bit,用于IP报文的分片和重组

    • Bit 0: 保留位,必须为0
    • Bit 1: DF(Don’t Fragment),能否分片位,0表示可以分片,1表示不能分片
    • Bit 2: MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有
  • 片偏移:长度为13bit,用于IP报文的分片和重组。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。

  • 生存时间(TTL):长度为8bit,可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。数据报每过一个路由器前将TTL值减1,若TTL减小到0,则丢弃这个数据报,不再转发,防止无法交付的数据报无限制的浪费网络资源(若将其设置为1,则代表该数据报只能在本局域网中传输)。

  • 协议类型:长度8bit,指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。

    注意:这里的IP标识特殊的IP数据报-IP数据报再封装到IP数据报中

  • 头部校验和:长度为16bit,用来对IP报文的头部进行差错校验。只检验数据包的首部,不检验数据部分。这是因为数据报每经过一个路由器均需要重新计算头部校验和(一些字段如TTL,标识、片偏移都有可能发生变化),不校验数据可减少工作量,且这里不采用CRC检验码,而采用简单的计算方法:将IP数据报首部划分为许多16位字的序列,并将校验和字段置0.用反码算数运算把所有16位字相加后,得到的和的反码即为校验和。如下图所示

    反码算数运算:由低位到高位逐列计算,0和0相加是0,0和1相加是1,1和1相加是0,但产生一个进位1,加到下一列,若最高位相加后产生进位,则最后得到的结果要加1

  • 源IP地址:长度为32bit,表示产生并发送该IP报文的设备接口的IP地址。
  • 目的IP地址:长度为32bit,表示该IP报文的目的接口的IP地址。
  • 选项/长度填充:选项字段长度可变,从1字节到40字节不等,取决于所选项的功能。填充字段全为0。

分片重组

IP数据报长度超过MTU时,需要进行IP分片,接收端需要重组,通过对IP帧的学习后,可参考如下例子理解:
例:一个数据报的总长度为3820,其数据为3800字节,IP头为20字节,需要分片为长度不超过1420字节的数据报片,所以每片数据长度不能超过1400字节,于是分为3个数据报片,其数据长度分别为1400,1400,1000,如图所示

IP头中的相关字段填充值如下,其中标识的字段值是任意给定的(12345):

现在假定数据报片2经过某个网络时还需要分片,划分为2-1(携带数据800字节)和数据报片2-2(携带数据600字节),则这两个数据报片的总长度、标识、MF、DF和片偏移分别为:820,12345,1,0,175;620,12345,1,0,275

注意:分片数据长度必须是8字节对齐的