3.1-引言
IP是TCP/IP协议族中最为核心的协议。
所有的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输。
如图:
但是IP协议有两大特点。
特点一,不可靠。它不能保证IP数据报能成功地到达目的地。IP有一个简单的错误处理算法:丢弃数据报,然后发送ICMP消息报给信源端。任何可靠性必须由上层来提供(如TCP)。
特点二,无连接。IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。每个数据报都是独立地进行路由选择,可能选择不同的路线,这也说明IP数据报可以不按发送顺序接收。
3.2-IP首部
普通的IP首部长20个字节,除非含有选项字段。
如图:
最高位在左边,记为0bit;最低位在右边,记为31bit。
4个字节的32bit值按下面的次序传输,首先是0-7bit,其次8-15bit,然后16-23bit,最后24-31bit。
这种传输次序称为big endian字节序。也称为网络字节序。
3..3-IP路由选择
IP路由选择是简单的。
如果目的主机与源主机直接相连或都在一个共享网络上,那么IP数据报就直接送到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。
当今的大多数用户系统,都可以配置成一个路由器。我们可以为它指定主机和路由器都可以使用的简单路由算法。区别是主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。
IP可以从TCP,UDP,ICMP,IGMP接受数据报(及本地生成的数据报)并进行发送,或从一个网络接口接收数据报并进行发送。
IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么(1)如果IP层被设置为路由器的功能,就对数据报进行转发,否则(2)数据报被丢弃。
路由表的内容翻书查。
IP路由选择主要完成以下这些功能:
1)搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(这取决于标志字段的值)。
2)搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给表目指定的下一站路由器或直接连接的网络接口(这取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。
3)搜索路由表,寻找标为“默认”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。
如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来之本机,一般会想生成数据报的应用程序返回一个“主机不可到达”或“网络不可到达”的错误。
3.4-子网寻址
现在所有的主机都要求支持子网编址。不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。这样做的原因是因为A类和B类地址为主机号分配了太多的空间,事实上,在一个网络中人们并不安排这么多的主机。
大多数的子网例子都是B类地址。其实,子网还可以用于C类地址,只是它可用的比特数比较少而已。
子网对外部路由器来说隐藏了内部网络组织的细节。在下面的网络例子中,所有的IP地址都有一个B类网络网络号140.252。但是其中有超过30个子网,多于400台主机分布在这些子网中。由一台路由器提供了Internet的接入。
如图:
在这个图中,我们把大多数的路由器编号为Rn,n是子网号。我们没有画出不同子网中的所有主机。
于30个C类地址相比,用一个包含30个子网的B类地址的好处是,它可以缩小Internet路由表的规模。B类地址140.252被划分为若干子网的事实对于所有子网以外的Internet路由器都是透明的。为了到达IP地址开始部分为140.252的主机,外部路由器只需要知道通往IP地址140.252.104.1的路径。这就是说,对于网络140.252只需要一个路由表目,而如果采用30个C类地址,则需要30个路由表目。因此,子网划分缩减了路由表的规模。
3.5-子网掩码
任何主机在引导时进行的部分配置是指定主机IP地址。大多数系统把IP 地址存在一个磁盘文件里供引导时读用。
除了IP地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程中通过子网掩码来确定的。
如图:
尽管IP地址一般以点分十进制方法表示,但是子网掩码却经常用十六进制来表示,特别是当界限不是一个字节时,因为子网掩码是一个比特掩码。
给定IP地址和子网掩码以后,主机就可以确定IP数据报的目的是:
(1)本机上的主机
(2)本网络中其他子网中的主机
(3)其他网络上的主机
知道本机IP地址,那么就知道它是否是A类,B类或C类地址,也就知道网络号和子网号之间的分界线。
而根据子网掩码就可以知道子网号与主机号之间的分界线。