linux网络编程(十六)SIP网络协议栈
SIP网络协议钱是SimpleIP Stack的简称,是基于应用层实现的一个简单的网络协议栈模型。SIP网络协议梭的目的用于展示网络协议校的架构,向读者介绍网络协议的细节部分,使读者有一个可以参考的简单网络协议核模型。通过对SIP网络协议梭的了解可以更深入地了解网络协议、了解网络协议核实现时的一些问题。
1. 解网络协议、了解网络协议核实现时的
SIP网络协议栈符合网络协议的标准,主要是对RFC标准的兼容。能够对网络数据进行解析,实现所定义功能。SIP网络协议栈主要包含如下几个部分的协议支持。
- 以太网的支持: SIP 网络协议核能够支持以太网数据的接收和发送,对接收到的以太网数据进行解释后分发给之后的各个网络层,上层发送的数据增加以太网的头部数据后发送。
- ARP协议的支持: SIP 网络协议核能够对 ARP 协议进行支持,对发送数据的目的方能够根据 IP 地址查找对应网卡的硬件地址;接收到网络数据后能够更新 ARP 映射表而不必再次重新查询 IP 对应的硬件地址;对网络上其他主机的 ARP 请求能够合法地响应,提供本机的硬件地址。
- IP协议的支持: SIP 网络协议栈能够判断接收网络数据 IP 层的正误判断,支持IPv4;能够根据IP层判断上层协议的类型进行转发;对发送的网络数据能够进行IP头部的填充;SIP 网络协议核对四层的数据支持发送数据的分片处理和接收数据的组包操作。
- ICMP协议支持: SIP 网络协议核支持 ICMP协议的处理,支持回显类型的ICMP协议。
- UDP 协议的支持: SIP 网络协议枝支持 UDP 协议,提供 UDP 协议的基本函数接口,支持 UDP 的校验。
- 协议抽象层的支持: SIP 网络协议栈支持多个协议,在协议抽象层进行分类,按照
- 不同的协议进行不同类型的处理,可以便于协议的增加和扩展。
- 用户接口的支持: SIP 网络协议栈提供基本的用户操作接口,包括IO接口和控制接口。
2. SIP网络协议栈的分层功能描述
SIP 网络协议栈采用逻辑上的分层结构,相邻两层之间会有互相调用的关系,间隔的各层之间没有明显的联系。这种设计方式一方面能够将网络协议的层间结构和实现比较容易地对应起来;更重要的是架构设计和实现的时候容易完成,容易测试和调试软件容易,即使某个层出现问题,也不会将问题扩散到其他各层上,造成软件开发的极大困难,如图19.l所示。 SIP 网络协议枝分为如下几层结构。
- 以太网虚拟层: 模拟以太网网卡的数据接收和数据发送动作。
- ARP层:维护IP地址和网卡硬件地址之间的对应关系。
- IP层: 对 IP 层数据进行处理。
- UDP 和 ICMP 层:这是两个不同的模块,UDP 层处理 UDP 协议数据。
- 应用层接口: 用户编写应用程序时的接口。
3. SIP网络协议栈的用户接口功能描述
SIP 网络协议校提供用户应用层接口 API 函数,这些应用层 API 函数可以满足用户基本的网络程序设计需要,可以进行基本的网络连接的初始化、 建立、数据的接收、数据的发送、简单的连接控制等,如表 19.1 所示。SIP 网络协议栈提供给用户的 API 函数可以分为以下3类。
- 基本用户接口函数:用于网络连接的初始化、建立、关闭、绑定等操作,包含 socket、close、bind、connect 等类似函数。
- 用户 IO 接口函数:提供用户数据 IO 操作接口,可以通过这些函数进行数据的接收、发送等操作, 例如 recv/recvfrom、send/sendto 和 select 等类似函数。
- 连接和协议梭的控制类函数: 通过这些函数可以获得协议校的状态对协议校和网络连接进行基本的控制,例如获得以太网网卡的 MAC 地址、设置套接字的接收超时时间等,包含类似于 fcntl 和 ioctl 的函数。

4. SIP 网络协议找的架构
SIP 网络协议校是一个在应用层实现的网络协议栈,为了能够达到这个目标,有两个方面的影响:
- 为了方便协议栈的实现,使用 SIP 网络协议栈的应用程序必须和 SIP 位于同一个进程,也就是说,应用程序和 SIP 网络协议栈是同一个进程中的多个线程之间的关系。采用多线程的实现方式,可以省略应用程序和 SIP 网络协议栈之间的进程通信的麻烦,使设计的重点集中到网络协议栈本身的实现。
- 为了能够实现应用层的网络协议栈而又能利用现有的系统,不必重新编写网卡的驱动程序,SIP 网络协议栈的以太网层采用了一个虚拟的网卡,使用 SOCK_PACKET,对 Linux 内核网络协议栈的网卡数据直接操作。
从使用 SIP 网络协议栈的角度看,可以分为 3 个 部分:SIP网络协议栈、Linux 系统的内核网络协议栈、使用 SIP网络协议栈的应用程序。其中,网络应用程序使用 SIP 网络协议栈的用户接口调用 SIP 网络协议栈的相关功能,而 SIP 网络协议栈的网络数据的接收和发送则和内核中网络协议栈中的网卡程序直接通信。 SIP 网络协议栈的架构如图·19.2所示。

浙公网安备 33010602011771号