Windows 实现的 OSI 七层模型结构图

对网络编程感兴趣的朋友可能都听过 OSI 七层模型,下面一张便是在 Windows 下实现的整个协议的结构图。

  1.                  Windows 下的 OSI 七层模型的实现结构  
  2.   
  3.   
  4.                   +-------------------------------+  
  5.                   |           Ws2_32.dll          |  
  6.                   +-------------------------------+  
  7.  UserMode                   |           |  
  8.                   +-------------------------------+  
  9.                   |           msafd.dll           |  
  10.                   +-------------------------------+  
  11.                           |   System Call  |  
  12.                           | File Operation |  
  13. ----------------------------------------------------------------------  
  14.                           |                |  
  15.                   +-------------------------------+  
  16.                   |           afd.sys             |  
  17.                   |         \Device\Afd           |  
  18.                   +-------------------------------+  
  19.  Kernel Mode              | File Operation |  
  20.                           |      IRP       |  
  21.               +----------------------------------------+  
  22.               |                tcpip.sys               |       ( Tdi layer )                --- 传输层  
  23.               | \Device\Tcp \Device\Udp \Device\RawIp  |       ( Ndis Protocol )            --- 网络层  
  24.               +----------------------------------------+  
  25.                           |   Ndis lib     |  
  26.                           |                |  
  27.                   +-------------------------------+  
  28.                   |           k57xp32.sys         |            ( Miniport )                 --- 链路层  
  29.                   +-------------------------------+  
  30.                   |       Net Interface Card      |                                         --- 物理层  
  31.                   +-------------------------------+  
                 Windows 下的 OSI 七层模型的实现结构


                  +-------------------------------+
                  |           Ws2_32.dll          |
                  +-------------------------------+
 UserMode                   |           |
                  +-------------------------------+
                  |           msafd.dll           |
                  +-------------------------------+
                          |   System Call  |
                          | File Operation |
----------------------------------------------------------------------
                          |                |
                  +-------------------------------+
                  |           afd.sys             |
                  |         \Device\Afd           |
                  +-------------------------------+
 Kernel Mode              | File Operation |
                          |      IRP       |
              +----------------------------------------+
              |                tcpip.sys               |       ( Tdi layer )                --- 传输层
              | \Device\Tcp \Device\Udp \Device\RawIp  |       ( Ndis Protocol )            --- 网络层
              +----------------------------------------+
                          |   Ndis lib     |
                          |                |
                  +-------------------------------+
                  |           k57xp32.sys         |            ( Miniport )                 --- 链路层
                  +-------------------------------+
                  |       Net Interface Card      |                                         --- 物理层
                  +-------------------------------+

        简单来讲, Windows 对网络部分的实现分为两部分,用户态部分和内核态部分。用户态部分为标准的 socket 调用,一般情况下可以认为有 ws2_32.dll 和 msafd.dll 组成,msafd.dll 为一个服务提供者,主要完成 socket 用户层的代码实现, 在内核态 socket 的实现由 afd.sys 实现,它主要创建设备 \Device\Afd 来与 msafd.dll 进行交互,完成

socket 的创建等其它操作。

        tcp/ip 协议的传输层和网络层实现是在 tcpip.sys 里完成的,它主要完成两部分工作,传输层实现和网络层实现,在传输层部分完成 TCP, UDP, RawIp 的绑定,连接等功能,主要服务于 afd.sys 发下来的 TDI 命令,然后进入到网络层,来完成路由以及 IP 包的构成,网络层部分相当于一个 Ndis 协议驱动,一般来讲它会绑定所有的网卡来监听和发送 IP 包。

        链路层在笔者的电脑上是由 k57xp32.sys 驱动完成,不同的网卡此驱动可能不同,它相当于一个 Ndis Miniport 驱动,和 Ndis 协议驱动一样,都是运行在 Ndis 库营造的一个运行环境中,主要完成例如以内网数据包的构成,操作网卡发送数据包,以及注册中断接收数据包以及其它信息的工作。

        物理层,当然由网卡硬件来实现。

        有了上面清晰的结构之后,我们要开发一些业务就会非常明白的知道它工作在哪里,比如 TDI 防火墙,就可以直接附加到 tcpip.sys 创建的几个命名设备对象上面,就可以监听到 afd.sys 发下来的 TDI 命令,进而可以拦截,一些 socket 创建,绑定,发送和接收的命令,从而完成防火墙的功能。当然,如果别人直接注册一个协议驱动,然后直接进行发包,那么这个防火墙就不能对这样的操作对待监控,比如直接发 ARP 包到局域网中,就可以造成攻击。但是如果你的防火墙工作在链表层上面,即注册一个中间层驱动来完成防火墙的功能,那么就又可以拦截掉我刚才假设的那种操作,所以如果一个 Ndis 中间层驱动来完成防火墙功能,那么就可以有更大的监控范围。再比如,想实现一个虚拟网卡,那么就可以完成一个 Ndis 小端口驱动,来让其它协议对你进行绑定,一些应用程序就可以直接选择这张网卡进行数据处理,便可完成一些特殊工作了。

        总之,有多灵活的思路,就可以完成多灵活的功能。

转载: 点击打开链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值