<再看TCP/IP第一卷>关于网络层及协议细节---IP协议
说到关于IP协议,就必须先说IP协议的两个特性:
(一)不可靠性(unreliable)
不可靠性的意思是它不能保证IP数据报能成功地到达目的地,IP所能做的只是提供最好的传输服务,IP有一个简单的错误处理算法:丢弃该数据,然后发送ICMP消息报给信源端,任何的可靠性就必须由上一层的协议来提供。
(二)无连接性(connectionless)
无连接性的意思是IP并不维护任何关于后续的数据报(datagram)的状态信息,数据报之间是平行的互不干涉,IP不维护后续的状态信息。
IP数据报的格式如下图所示:
IP数据报的传输使用的是大尾方式,大尾方式即人们写数据的正常方式,但是在计算机看来这是不正常的,如果你接触过一些机器语言或者一些二进制码的改写就会知道计算机中一般储存数据的方式都是小尾方式,小尾方式通俗地讲即从右向左按字节读/写,更多资料自行百度。
TOS字段分为两个部分3bit的优先权子字段和4bit的服务类型字段和一个1bit的未用位但必须得置0,4bit的TOS分别代表:1.最小时延 2.最大吞吐量 3.最高可靠性和最小费用。4bit中只能置其中的1bit。如果所有的4bit都为0那么就意味着是一般的服务。
总长度字段是指的整个IP数据报的长度,以字节为单位,利用首部长度字段和总长度字段,就可以知道整个IP数据报中包裹的内容的具体的位置和长度。由于该字段的总位数为16,所以IP数据报的长度可达65535字节,IP数据报在链路层因MTU的影响而分片时,该字段的值也就随之变化。标识符字段和分片有关,以后再作详细论述。
总长度字段的必要性:尽管以太网的最小帧的长度为46字节,但是IP数据可能会更短需要填充一些数据来达到最小的长度,如果没有总长度字段,IP层就不会知道46字节中有多少的字节是IP数据报的内容。
TTL是数据报可以经过的路由器的最多数目,他指定了数据报的生存时间,TTL的初始值一般由主机设置,一旦经过一个路由它的数目就将要减去1,当该字段等于0时,数据报就会被丢弃,并发送ICMP报文通知源主机,这也就是IP协议错误检查的简单算法。
首部检验和字段是根据IP首部计算的检验和码,并不对后面的数据进行计算。
IP路由的选择
如果目的主机和源主机直接相连或者都在一个共享网络上(以太网或者令牌环网)那么IP数据报就直接送到目的主机上,否则主机把数据报发往默认路由器上,由该路由器来进行转发,大多数的主机都是采用的这种简单的机制。当今大多数的用户系统包括几乎所有的unix系统,都以配置成一个路由器,我们可以为它指定主机或者简单的路由算法。本质上的区别在于主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。内含的路由器功能的主机应该从不转发数据报,除非它被设置成那样。
在一般的体制中,IP可以从TCP,UDP,ICMP和IGMP接受数据报(即在本地生成的数据报)并进行发送,或者从一个网络接口接受数据报并进行发送,IP层在内存中有一个路由表。当接受到一份数据报并继续发送的时候,它都要对该表搜索一次,当数据来自某一个网络接口的时候,IP首先检查目的地址是否为本机的IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。如果数据报的目的地址不是这些地址,则:(1)当IP层被设置为路由器的功能,那么就对数据报进行转发(2)否则数据包就直接被丢弃。
路由表中的每一项都包含下面的这些信息:
(1)目的IP地址,它既可以是一个网络地址,也可以是一个完整的主机地址。
(2)下一站路由器的IP地址
(3)标志,其中一个标志指明IP地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器。
IP路由的选择是逐跳地完成地,从这个路由表信息可以看出。IP并不知道到达任何目的的完整路径。所有的IP路由选择只为数据报传输提供下一站路由器的IP地址,它假定下一站的路由器比发送数据报的主机更接近目的,而且下一站路由器于该主机是直接相连的。
IP路由选择主要完成以下这些功能:
(1)搜索路由表,寻找能与目的IP地址完全匹配的表目,如找到,则把报文送给该表目指定的下一站或直接连接的网络接口。
(2)搜索路由表,寻找能与目的网络号完全匹配的表目,如果找到,就把报文发送给该表目指定的下一站路由器或直接相连的网络接口。目的网络上的所有的主机都可以通过这个表目来进行寻径。
(3)搜索路由,寻找标为“default”的表目,如果找到,则把报文发送给该表目指定的下一个路由器。
(4)如果以上的步骤都没有成功,那么该数据报就不能被传送,会向生成该数据报的应用程序返回一个主机不可达或者网络不可达的错误。