一、简介
IP是TCP/IP协议族的核心协议。IP提供不可靠、无连接的数据报传送服务。
不可靠的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。任何要求的可靠性必须由上层来提供(如TCP)。
无连接的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。
二、IP首部
IP数据报格式如下图所示,IP首部长为20个字节。
如上图所示,最高位在左边,记为0bit,最低位在右边,记为31bit。
4个字节的32bit值以下面的次序传输:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称为大端字节序。其也可成网络字节序。在网络上传输数据前,需将首部转换为网络字节序。
协议版本号为4时代表IPv4。首部长度是指首部占32bit字的数目,包括任何选项。由于它是一个4bit字段,因此首部最长为60个字节。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。详细介绍见书中的P25。
总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度和总长度字段,就可以知道IP数据报中数据内容的其实位置和长度。由于此字段长16bit,所以IP数据报最长可达65535字节。
标识字段唯一的标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。
TTL生存时间字段设置了数据报可以经过的最多路由器数。TTL初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1.当该字段值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行校验。ICMP、IGMP、UDP和TCP在他们各自的首部中均含有同时覆盖首部和数据的校验和码。校验和主要采用16bit的反码求和方式进行。
源IP地址和目的IP地址都是32bit的IP值。
三、IP路由选择
如果目的主机与源主机直接相连(如点对点连接)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机。否则,主机把数据报发往一个默认路由器,由路由器来转发该数据报。大多数主机采用这个种简单机制。
IP层可以配置成路由器的功能,也可以配置成主机功能。
IP层在内存中有一个路由表,当收到一份数据报并进行发送时,它都要对该表搜索一次,当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或是IP广播地址,如果是,数据报就被送到由IP首部协议字段所指定的协议模块进行处理,如果IP数据报的目的地址不是这些,那么如果IP层被设置为路由器的功能,那么就对数据报进行转发,否则数据报被丢弃。
IP路由选择是逐跳地(hop-by-hop)进行的。从这个路由信息可以看出,IP并不知道到达任何目地的完整路径(除了那些直接相连的目的)。所有的IP路由选择只为数据传输提供一下站路由器的IP地址。
IP路由选择主要完成以下这些功能。
1、搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)
2、搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于路由表中的标志字段值)。目的网络上的所有主机都可以通过这个表目来处决。例如,一个以太网上的所有主机都是通过这个表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。
3、搜索路由表,寻找标为“默认(default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。
4、如果上面这些步骤都没有成功,那数据报就不能发送。如果不能发送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。
完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由。默认路由以及下一站路由器发送的ICMP间接报文是IP路由选择机制中功能强大的特性。为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是IP路由选择的另一个基本特性,这样做可以极大地缩小路由表的规模。
一般IP的路由选择过程如下:
1、主机和路由器都是用了默认路由;
2、数据报中的目的IP地址始终不发生任何变化;
3、每个链路层可能具有不同的数据帧首部,而链路层的目的地址始终指向下一站的链路层地址。
即
每当数据包发出后,IP头中的目的IP地址始终不会改变,改变的是链路层首部的目的地址(即MAC地址),MAC地址指向的始终是下一部路由的MAC地址(其中使用了ARP地址解析协议)。数据到达下一路由后在路由表中进行搜索,以确定下一部是否为目的地。如下一站地址是IP头部中的目的地址,则数据被传送到目的地。如最终找不到与IP头部中的目的地址相匹配的地址,则数据包被丢弃(数据的路由跨越是由TTL值指定的)。
四、子网寻址
所有的主机都支持子网编址,不是把IP地址看成由单纯的一个网络号和主机号组成,而是把主机号再粉城一个子网号和一个主机号。子网的划分缩减了路由表的规模。子网对于子网内部的路由器是不透明的。
五、子网掩码
主机除了配置主机IP地址外,还需要知道有多少比特用于子网号及多少比特用于主机号。这是引导过程中通过子网掩码确定的。掩码是一个32bit 的值,其中值为1的bit留给网络号和子网号,为0的比特留给主机号。
给定IP地址和子网掩码后,主机就可以确定IP数据报的目的是:
(1)本子网上的主机;(2)本网络中其他子网中的主机;(3)其他网络上的主机。
知道本机IP地址,就知道是A类、B类或者C类地址(从IP地址的高位就可以得知),也就知道网络号和子网号之间的分界线,进而根据子网掩码也就知道子网号和主机号之间的分界线。
六、ifconfig命令
ifconfig -a,查看当前所有子网接口的有关参数。可通过ifconfig后接网络接口名+IP地址+netmask+子网掩码来设置本机相应网络接口的基本IP地址和子网掩码。
七、netstat命令
netstat命令也提供系统上的接口信息。-i参数打印出接口信息,-n参数则打印出IP地址,而不是主机名。
此命令打印出每个接口的MTU、输入分组数、输入错误、输出分组数、输出错误、冲突以及当前的输出队列长度等信息。