微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 对Windows TCP/IP协议栈的一种简化设计

对Windows TCP/IP协议栈的一种简化设计

时间:05-22 来源:互联网 点击:

扩展中需要建立一张表,里面存放已默认分配的端口号以及用户绑定的端口号,端口号是从小到大按序排列,表的作用是当用户应用程序绑定端口号操作时,首先会通过二叉查找法查找这张表,看该端口号是否存放在该表中,如果找到,则要返回给应用程序绑定失败,如果没有找到,则把该端口号插入到适当位置,并返回给应用程序绑定成功。用户应用程序通过调用bind()函数实现绑定Socket套接字,其含义就是用端口号来惟一标识用户线程下的Socket,让网络数据包提交给正确的Socket,在bind函数里面可以通过封装DeviceIo Control函数调用来实现。

2.4.2 发送数据过程

用户应用程序发送的IRP写请求(WriteFile()函数),传递到协议驱动程序后,调用派遣函数NdisProtWrite,通过IRP I/O堆栈里面的内核文件对象循环遍历FilePort链表找到对应的节点,然后把用户应用程序的数据通过缓冲区读写设备的方式拷贝到NDISPROT_OPEN_CONTEXT结构的相应的Priority SendQueue优先级队列中。如图3所示,发包线程的工作主要有,从Priority SendQueue优先级队列中提取数据,如何提取按照多级反馈队列调度算法处理,经过简化的TCP/IP协议栈,然后再调用NdisSendPackets函数发送给网卡驱动程序。在TCP/IP协议栈中,把该数据的优先级值赋值给IP首部的服务类型(TOS)字段中,使收包的时候根据此字段的优先级值把包放进相应的收包优先级队列中。

2.4.3 接收数据过程

协议驱动从网卡驱动程序接收网络数据包,这些数据包是打包封装好的,首先存放在NDISPROT_OPEN_CONTEXT结构的收包优先级队列Pri ority RecvQueue中,这样可以接收到高速上传过来的底层数据。如图3所示,需要建立一个收包处理线程,它的主要工作是,从收包优先级队列提取数据,具体算法根据上面的多级反馈队列调度算法,然后经由TCP/IP协议栈的处理,如果是UDP,TCP的数据包则通过包的目的端口号,遍历FilePort链表找到对应的节点,然后把剩下的净数据提交给节点(目标Socket)的收包缓冲区中。值得注意的是,因为NDIS封装数据用的是NDIS_PACKET结构,NDIS_PACKET结构里面包含一个NDIS_BUFFER结构的链表,在每个NDIS_BUFFER里面才真正指向数据的首地址,这里说的提交,并没有拷贝数据,只是把净数据的首地址再次链接到FilePort链表中。当用户应用程序通过Receive()函数接收数据的时候,会调用ReadFile()函数,发出读IRP请求,IRP到达协议驱动后,调用NdisProtRead()派遣函数处理,NdisProtRead()会通过IRP I/O堆栈里面的内核文件对象,遍历FilePort链表,找到相应的节点,再把节点接收缓冲区里面的数据拷贝到用户缓冲区里面。

3 测试与分析

3.1 测试环境和方法

测试时,使用2台主机分别作为客户机和服务器。硬件和操作系统都是相同的配置,操作系统是Microsoft Windows XP Professional Service Pack 3,Pentium(R)Dual-Core CPU,主频2.70 GHZ,内存2 GB,网卡Realtek RTL8102E/RTL8103E,交换机为朗讯Lucent Cajun P116T。测试的主要目的是分析简化后的网络相对于原来系统而言,在通讯延迟方面有何改进。测试的方法采用如下方案:在局域网内,采用UDP数据报进行通信测试,从客户机向服务器发送数据,数据长度为300 B,即ping-pong测试,客户端取1 000次的往返时间作为测试参数,对没有简化TCP/IP协议栈之前的客户端与简化之后的客户端进行相同的测试,记录次数15次。

3.2 结果分析

从图4中可以看出,经过对协议栈简化后,传输时间明显大大减少。经计算,简化前平均耗时1.241 s,而简化后的平均耗时为0.072 s,减少了94.198%,简化前耗时的样本标准差为0.038 2,简化后耗时的样本标准差为0.004 9,显然简化后的稳定性要更好。测试结果表明,经过简化后的这种设计,耗时和稳定性能都能到达很好的效果。

4 结语

本文讨论了一种简化现有的Windows系统TCP/IP协议栈的一种方法,减少了驱动结构层次,使用户应用程序的数据能较快提交给协议驱动程序,协议驱动程序通过封装Socket,并且设置多级优先级队列以及采用零拷贝技术。通过这些技术的使用,能使数据提交给网卡的系统开销减少,使数据发送时间延迟减少,能满足一定的实时性能需求。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top