《TCP/IP详解卷一》学习笔记(3)IP:网际协议

前言

IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。

IP协议的两个特点:

  • 不可靠。它不能保证IP数据报成功到达目的地。IP只提供尽力而为的服务,如果发生错误,就丢弃该数据报,然后发送ICMP消息给信源端。可靠性必须由上层提供。
  • 无连接。IP不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的,IP数据报可以不按顺序接收。

IP首部

《TCP/IP详解卷一》学习笔记(3)IP:网际协议

IP首部长20个字节,除非含有选项字段。

首部中最高位在左边(0 bit),最低为在右边(31bit)

4个字节的32比特值按下面的次序传输:首先0-7bit,然后8-15bit,16-23bit,24-31bit。这种传输次序称为大端字节序,也称网络字节序。

  • 协议版本号是4,代表IPv4
  • 首部长度是首部占32bit字的数目。首部最长60字节。
  • 服务类型包括3bit的优先权子字段,4bit的TOS子字段和1bit未用位必须置0
  • 总长度字段是指整个IP数据报的长度,以字节为单位。最长可达65535字节。
  • 标识字段唯一标识主机发送的每一份数据报
  • TTL生存时间字段设置了数据报可以经过的最多路由器数。一旦经过一个处理它的路由器,它的值就减去1
  • 协议字段标识是哪个协议向IP传送数据
  • 首部校验和是根据IP首部计算的校验和,不对首部后面的数据进行计算。
  • 每一份数据报都包含源IP地址和目的IP地址

IP路由选择

对于主机,IP路由选择的简单机制:

    如果目的主机和源主机直接相连,或在一个共享网络上(如以太网),那么IP数据报就直接送到目的主机上。否则,主机把数据报发往一默认的路由器上,有路由器来转发该数据报。

IP层既可以配置成路由器的功能,也可以配置成主机的功能。区别在于,主机从不把数据报从一个接口转发到另一个接口,而路由则需要转发数据报。

在一般的情况中,IP可以从TCP、UDP、ICMP和IGMP接收数据报并进行发送,或者从一个网络接口接收数据报并进行发送。IP层在内存中有一个路由表。每收到一份数据报进行发送时,它都要对该表搜索一次。

当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果是,数据报就被送到由IP首部协议字段所指定的协议模块处理。如果不是,那么如果IP层被设置为路由器的功能,那么就对数据报转发,否则,就丢弃。

路由表每一项包含的信息:

  • 目的IP地址。可以是完整的主机地址,也可以是一个网络地址,由标志字段来决定。
  • 下一站路由器的IP地址,或者直连的网络IP地址。
  • 标志。一个标志指明目的IP地址是网络地址还是主机地址。另一个标志指明下一站路由器是否是真正的下一站路由器还是一个直连的接口
  • 为数据报的传输指定一个网络接口

IP路由选择主要完成以下功能:

  • 搜索路由表,寻找与目的IP地址完全匹配的表目。如果找到,把报文发送给该表目指定的下一站路由器
  • 搜索路由表,寻找能与目的网络号匹配的表目。如果找到,把报文发送给指定的下一站路由器或直连的网络接口。
  • 搜索路由表,寻找标为“默认”的表目。如果找到,把报文发送为指定的下一站路由器。
  • 如果以上步骤都没有成功,那么数据报不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用回一个“主机不可达”或“网络不可达”的错误。

子网寻址

什么是子网?

    不把IP地址看成单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。

为什么要有子网?

    A类和B类地址为主机号分配了太多的空间,但在实际使用中人们并不安排这么多的主机。子网可以避免这种浪费,充分利用IP地址。

从InerNIC获得网络号后,由系统管理员进行分配,并决定是否建立子网,以及多少位分给子网号和主机号。

子网对外部路由器来说隐藏了内部的网络组织,子网的划分缩减了路由器的规模。

子网掩码

除了IP地址外,主机还需要知道由多少比特用于子网号和主机号。这是通过子网掩码来确定的。

子网掩码是一个32bit 的值,为1的bit为给网络号和子网号,为0的bit留给主机号。

《TCP/IP详解卷一》学习笔记(3)IP:网际协议

给定IP地址和子网掩码后,主机就可以确定IP数据报的目的是:

  • 本子网上的主机
  • 本网络中其他子网的主机
  • 其他网络上的主机

特殊情况的IP地址

《TCP/IP详解卷一》学习笔记(3)IP:网际协议

0表示所有比特全为0;-1表示所有比特全为1