服务器如何获得有关 HTTP 请求的通知?

raj*_*ous 8 tcp http ip

我对HTTP 的工作原理有基本的了解。我了解客户端(Web 浏览器)发出请求,服务器响应请求。但是,我不明白的是 Web 服务器如何知道客户端何时发出请求?

如果有人打电话给我,我的电话就会响起,我会收到通知。同样,网络服务器如何获得有关请求的通知?

Lua*_*aan 28

这有很多层次。重要的是,其中许多是可以互换的。

例如,您可以在物理层使用同轴电缆网络、以太网或 Wi-Fi。HTTP 在所有这些之上工作,但它们中的每一个对正在发送的有效负载的处理略有不同。

HTTP 在另一个称为 TCP 的协议之上运行,而 TCP 又或多或少运行在另一个称为 IP 的协议之上(现在主要有两种变体 - IPv4 和 IPv6)。

因此,HTTP 服务器向操作系统注册一个 IP 地址(如184.38.45.1,或最常见的“任何”),以及一个 TCP 端口(80是 HTTP 的默认端口,但通常是从1到 的任何内容65535)。现在,HTTP 服务器告诉操作系统在数据(或其他消息)到来时对其执行 ping 操作。操作系统知道这种情况何时发生,因为网络接口卡驱动程序会告诉它这一点。而网卡驱动是由网卡本身告诉的,网卡本身其实有自己的软件来解释网线上的电信号(或者空中的无线信号等等,你懂的)。

旁注

如果您想更多地了解 NIC 如何启动与驱动程序/操作系统的通信,您可能需要查找有关硬件中断的一些基本信息 - 基本上,CPU 当前正在执行的任何操作都已停止,并且程序流切换到中断处理程序 - 一段非常简单的代码,负责通知系统,然后立即将控制权返回给 CPU 正在执行的原始操作。事实上,它可能会回答你很多关于操作系统内部工作原理和计算机本身的问题——比如操作系统如何从运行的应用程序中“窃取”CPU,并在同时运行的不同应用程序之间调整 CPU 资源,即使他们不合作。

回到业务:

在您的手动电话类比中,假设您的电话实际上并未响铃。要知道您是否正在尝试拨打电话,您必须定期查看屏幕并进行检查。为了使 HTTP 服务器更易于管理(因为已经有很多层在执行定期检查),您实际上可以阻止检查尝试。

因此,与其检查,看到那里没有任何东西并再次检查,您基本上一直在看屏幕。但是,您基本上有一个完整的独立系统来处理这个问题(在您的情况下,听力中心,它检查空气振动以获得有用的信息,戒指),因此它实际上不需要您的注意力(CPU 时间)。

允许您一次监视多个连接 (IOCP) 的技术进一步改进了这一点。这离电话响铃系统越来越近了——你有一个拥有一万部电话的房间,但你只关心此刻正在响铃的那些,其他人没有注意到你。

  • @DhiwakarRavikumar:是的,端口只是数字。它们由程序或操作系统组成,它们不对应于硬件中的任何东西。 (2认同)

j-g*_*tus 9

计算机使用称为“端口”的概念,类似于电话交换机的“扩展”:客户端不仅“调用”服务器 IP 地址,还将请求发送到该服务器上的特定端口。

有数千个端口(维基百科列表),例如端口 80 是 HTTP 的默认端口。

诀窍是一个程序,例如一个网络服务器,可以注册自己以侦听特定端口。然后操作系统会将进入该端口的任何请求传递给该程序。

拥有多个端口的意义在于,您可以在同一台服务器上同时运行多个服务,通过使用不同的端口,它们不会相互干扰。