您当前的位置:五五电子网电子知识电子知识资料网络技术采用对Windows TCP/IP协议栈进行一种简化设计 正文
采用对Windows TCP/IP协议栈进行一种简化设计

采用对Windows TCP/IP协议栈进行一种简化设计

点击数:7777 次   录入时间:03-04 11:43:36   整理:http://www.55dianzi.com   网络技术

    2.4 协议驱动

    在应用程序中,对同一个线程环境下的文件句柄的读,写等,映射到内核中的IRP I/O堆栈的内核文件对象File()bject是同一个File()bject,这样可以用内核文件对象作为纽带作用。在协议驱动的设备扩展NDISPROT_OPEN_CONTEXT结构体内,建立一个File Port链表,如图3所示。链表的每个节点包含有内核文件对象、接收数据缓冲区、发送数据缓冲区、端口号、接收数据缓冲区大小、发送数据缓冲区大小等儿部分。内核文件对象用来标识是哪一个用户Socket句柄;接收、发送数据缓冲区用来存放Socket的接收、发送的数据;端口号的作用是让网络数据包可以知道提交到哪个内核文件对象下的接收缓冲区;接收、发送数据缓冲区大小指明接收、发送缓冲区最大的长度。如果缓冲区队列满,而这时候又有数据过来,则该数据应被丢弃。在协议驱动程序里面,利用这个FilePort链表,可以实现收发数据,设置接收、发送缓冲区的大小等操作。

    需要注意的是在NDISPROT_OPEN_CONTEXT结构体内,需创建一个NPROT_LOCK类型的锁,用来对FilePort链表进行互斥访问。

    2.4.1 端口号的绑定

    在协议驱动设备扩展中需要建立一张表,里面存放已默认分配的端口号以及用户绑定的端口号,端口号是从小到大按序排列,表的作用是当用户应用程序绑定端口号操作时,首先会通过二叉查找法查找这张表,看该端口号是否存放在该表中,如果找到,则要返回给应用程序绑定失败,如果没有找到,则把该端口号插入到适当位置,并返回给应用程序绑定成功。用户应用程序通过调用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链表,找到相应的节点,再把节点接收缓冲区里面的数据拷贝到用户缓冲区里面。

    c.JPG

   



上一页  [1] [2] 


本文关键字:Windows  IP协议  网络技术电子知识资料 - 网络技术

《采用对Windows TCP/IP协议栈进行一种简化设计》相关文章>>>