文章摘录自《Windows内核原理与实现》一书。
我们植到,Winsock以网络协议为基础来访问网络,比如TCP/IP和IPX/SPX等,其相应的内核驱动程序为afd.sys。那么,像 afd.sys这样的网络 API 驱动程序在接收到针对特定协议的网络请求时,如何将请求转交给相应的协议驱动程序呢?它如何适应不同网络协议的实现差异呢? Windows 在网络 API驱动程序与协议驱动程序之间规定了一个接口标准,称为传输驱动程序接口(TDI,Transport Driver Interface),从而使网络 API 驱动程序可以按照 TDI 接口来调用更低层的协议驱动程序。
定义 TDI 带来的好处是显而易见的,它消除了网络 API 与底层的传输协议之间的紧耦合关系。按照TDI接口来实现的传输协议可以被多个 TDI 客户使用。例如, TCP/IP 协议驱动程序为 tcpip.sys, 即可以被 Winsock 的驱动程序 afd.sys使用,也可以被 netbt.sys驱动程序( NetBT 代表 NetBIOS over TCP/IP)使用。符合 TDI接口的传输协议驱动程序被称为 TDI 传输器 (TDI Transport)。
在TDI层上,网络API的内核驱动程序是 TDI 客户,而协议驱动程序则是 TDI 传输器。网络 API 驱动程序接收各种形式的网络请求,例如, 名称解析、建立连接、发送或接收数据等, TDI 使得这些网络请求被统一描述,因而各种传输协议只要按照TDI的规范实现,就可以被网络 API 使用。另外,由于 TDI传输器也是内核驱动程序,它接收的请求一定是IRP数据结构,所以,本质上,TDI是将各种网络请求转变成一种规范的IRP描述。
在Windows中,内核模块tdi.sys 提供了一组支持函数,从而将 TDI 客户和 TDI传输器联系起来。这些支持函数,以及TDI 客户和传输器在通信时用到的一些数据结构和宏定义,构成了 TDI 接口。为了便于理解TDI ,表9.1 列出了 TDI 为传输器定义的一组控制码 (TDI IOCTL),这可以看作是 TDI 在 I/O 管理器定义的 I/O 模型基础上扩展的 I/O 控制码。通过这一组 I/O 控制码,我们可以大略地理解,TDI

Windows的TDI(传输驱动程序接口)是网络API驱动程序与协议驱动程序间的标准接口,消除了两者之间的紧耦合。它允许网络API如Winsock通过统一的TDI调用来使用不同的传输协议。TCP/IP协议驱动程序tcpip.sys实现了TDI接口,提供连接和无连接的通信模型。此外,IPSec、NAT和IP过滤等功能的驱动程序也能通过TDI与其他组件交互,增强网络安全性与功能。
最低0.47元/天 解锁文章
4249

被折叠的 条评论
为什么被折叠?



