本章介绍IP分组的结构和基本的IP处理过程,包括输入,转发和输出。下图显示了IP层常见的组织形式。
在之前的文章中,我们看到了网络接口如何把到达的IP分组放到IP输入队列ipintrq中去,并如何调用一个软件中断,如下图所示:
因为硬件中断的优先级比软件中断的要高,所以在发生一次软件中断之前,有的分组可能会被放到队列中。在软件中断中,ipintr
函数不断从ipintrq中移走和处理分组,直到对垒为空。在最终的目的地,IP把分组重装为数据包,并通过函数调用把该数据包直接
传给适当的运输层协议。如果分组没有到达最后的目的地,并且如果主机被配置成一个路由器,则IP把分组传给ip_forward。传输
协议和ip_forward把要输出的分组传给ip_output,由ip_output完成ip首部,选择输出接口以及在必要时对分组分片。最终的分组
被传给合适的网络接口输出函数。
当产生差错时,IP丢弃该分组,并在某些条件下向分组的源站发出一个差错报文,这些报文是ICMP的一部分。
1.IP分组
我们把传输层协议交给IP的数据称为报文。典型的报文包含一个传输层首部和应用程序数据。下图所示的传输协议时UDP。IP在报
文的首部前加上它自己的首部形成一个数据包。如果在选定的网络中,数据报长度太大,IP就把数据包分裂成几个分片,每个分片
包含它自己的IP首部和一段原来的数据报的数据。