IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输
IP协议的不可靠性和无连接性:
- 不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。
IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。
任何要求的可靠性必须由上层来提供(如TCP)
- 无连接(connectionless)这个术语的意思是IP并不维护任何关于后续数据报的状态信息。
每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的目标发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
IP首部详解
普通的IP首部长为20个字节,除非含有选项字段。
最高位在左边,记为0bit;最低位在右边,记为31 bit。
- 目前的协议版本号是4,因此IP有时也称作IPv4。
2. 首部长度指的是首部占32 bit字的数目,包括任何选项。
3. 服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略),4bit的TOS子字段和1bit未用位但必须置0。
4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。
如果所有4bit均为0,那么就意味着是一般服务。
4. 总长度字段是指整个IP数据报的长度,以字节为单位。
利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。
由于该字段长16比特,所以IP数据报最长可达65535字节。(回忆图2-5,超级通道的MTU为65535。这不是一个真正的MTU—它使用了最长的IP数据报)
尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分片。而且,主机也要求不能接收超过576字节的数据报。由于TCP把用户数据分成若干片,因此一般来说这个限制不会影响TCP。
UDP的应用(RIP,TFTP,BOOTP,DNS,以及SNMP),它们都限制用户数据报长度为512字节,小于576字节。但是,事实上现在大多数的实现(特别是那些支持网络文件系统NFS的实现)允许超过8192字节的IP数据报。
5. 标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。
6. TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。
TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
7. 协议字段,根据它可以识别是哪个协议向IP传送数据
8. 首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。
ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。
9. 每一份IP数据报都包含源IP地址和目的IP地址。它们都是32 bit的值。
10. 最后一个字段是任选项,是数据报中的一个可变长的可选信息。
• 安全和处理限制(用于军事领域,详细内容参见RFC 1108[Kent 1991])
• 记录路径(让每个路由器都记下它的IP地址,见7.3节)
• 时间戳(让每个路由器都记下它的IP地址和时间,见7.4节)
• 宽松的源站选路(为数据报指定一系列必须经过的IP地址,见8.5节)
• 严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。
IP路由选择
对于主机来说的IP路由选择:
1. 如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。
2. 否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。
IP层既可以配置成路由器的功能,也可以配置成主机的功能。
本质上的区别在于主机从来不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。
内含路由器功能的主机应该从不转发数据报,除非它被设置成路由功能。
主机处理IP数据报文的流程
IP可以从TCP、UDP、ICMP和IGMP接收数据报(即在本地生成的数据报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。
IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。
当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。
如果确实是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。
如果数据报的目的不是这些地址,那么:
(1)如果IP层被设置为路由器的功能,那么就对数据报进行转发(也就是说,像下面对待发出的数据报一样处理);
(2)否则,数据报被丢弃。
路由表中每一项的结构:
1. 目的IP地址。
2. 下一站(或下一跳)路由器(next-hop router)的IP地址,或者有直接连接的网络IP地址。
3. 标志。
其中一个标志指明目的IP地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口。
4. 为数据报的传输指定一个网络接口。
IP路由选择是逐跳地(hop-by-hop)进行的。IP并不知道到达任何目的的完整路径(当然,除了那些与主机直接相连的目的)。
所有的IP路由选择只为数据报传输提供下一站路由器的IP地址。
IP选路的流程:(主机路由—>网段路由—>默认路由—>不可达)
1. 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。
2. 搜索路由表,寻找能与目的网络号相匹配的表目。
3. 搜索路由表,寻找标为“默认(default)”的表目。
4. 如果上面这些步骤都没有成功,那么该数据报就不能被传送。