我正在尝试更深入地了解 IIS 的工作原理。
我理解的 http.sys 是它的主要组成部分之一。但是,我一直无法找到易于理解的有关它的信息。在我听说 WSK 之前,我无法建立一个好的心理模型,然后我认为这一切都到位了。
通过大量随机谷歌搜索和一些实验,这是我目前对它存在的原因以及它是如何工作的高级理解。
为什么:
端口共享和更高性能的缓存。
如何:
用户模式进程使用 WinSock api 打开一个侦听端口的套接字以访问网络子系统,例如 tcp/ip。内核模式软件(如 http.sys 驱动程序)使用 Winsock 内核套接字 (WSK) api 使用与 WinSock api 相同的 TCP 端口号池来实现相同的目的。
IIS、Web 服务或任何想要使用 http 的东西都会使用唯一的 url/端口组合向 http.sys 注册自己。http.sys 使用 WSK 在此端口上打开一个套接字(如果它还没有用于具有相同端口的另一个 url/端口组合)并进行侦听。
当传输层 (tcpip.sys) 将 ip 数据包负载重构回客户端发送的 http 请求时,它通过请求中的端口将其提供给 http.sys。Http.sys 使用 url/端口号将其发送到适当的进程,该进程可以随意解析它。
我知道这似乎是在回答我自己的问题,但我对此真的不太确定,我希望有一些结束,这样我就可以继续做更有趣的事情了。
我接近了吗?