什么是数据包
数据包是指分块的传输数据,它被用于早期的计算机通信网的文献中,而目前则普遍使用“分组”一词。
数据包的传送
如果一个协议已选择了一个被坤(一个指向网络接口结构的指针)标识的接口,则协议就用以下的调用来传送一个完全格式化的网络层数据包。
网络接口的输出例程传送数据包m给dst中指定的协议地址,或返回一个错误号。事实上,传送可能不是立即进行或可能不是成功的。典型的情况是,输出例程验证目的地址,将数据包在发送队列进行排队,并且,如果接口不忙就预先准备好一个中断驱动例程来发送数据包。对于不可靠介质(如以太网),成功的传输仅意味着数据包被放到了电缆上而未遇上冲突。相反,一个X.25接口保证对每一条传输的消息提供正确的发送或提供一个出错指示。网络系统使用的模型并不保证对在一个网络接口出现的数据包进行正确传送,这与以太网是最为接近的。输出例程返回的出错信息只是那些能立即检测到的并且通常在实际上是微不足道的错误(网络崩溃、没有缓存空间、无法处理的地址格式等)。如果错误在调用返回之后被检测到,就不告知协议。
当传送消息时,每一个网络接口通常必须为每个传出的数据包格式化一个链路层地址e。网络接口层必须理解它所支持的每一种协议地址格式,以将其格式化为相应的链路层地址。每个协议族的网络层为每一条消息都选择一个目的地址,然后使用这个地址来选择要使用的合适的网络接口。把目标地址作为一个sockaddr结构传递给该接口的输出例程。假定该接口支持这种地址格式,那么该接口必须将目的协议地址映射到一个链路层协议地址,这个链路层协议与接口所支持的传输介质相关联。这个映射可以是一个简单的算法,它可能需要一个表查询,或者可能需要更多涉及的技术。
数据包的接收
网络接口接收数据包,并根据在链路层协议头部编码的信息,将数据包分派给合适的网络层协议。每一个协议族必须有一个或多个协议组成网络层。在这个系统中,每一个网络层协议都有一个分配给它的输入数据包队列。一个网络接口所接收的数据包在一个协议的输入数据包队列中排队,并发送一个软件中断来启动网络层处理,见图1-1。网络接口模块使用相似的队列来存储正等待传送的数据包。
图1-1 输入数据包被分派给协议的输入队列