今天有位小伙伴在论坛里说面试问这个问题,那他的回答是:
- 客户端通过DNS解析域名得到服务器IP地址
- 客户端向服务器TCP连接请求,通过TCP三次握手建立socket连接
- 建立连接后,客户端发起一个http请求获取网页内容
- 网络层进行ip寻址,数据链路层封装成帧,物理层的利用物理介质传输
- 服务器收到请求后调用自身服务处理请求并返回http响应包
- 关闭TCP连接
- 客户端收到服务器响应内容后就开始渲染页面
哎哟喂?这不就是我辛辛苦苦准备的答案么?网上博客到的答案?在这里,我要diss一些所谓的“大牛”博客主,你写的东西就是垃圾,你抄我,我抄你,你自己写的东西都不看,然后误导别人,流下的愤青的泪水,这。。。。不扯了,看看到底怎么回答才对
按下“ g”键
以下各节说明了物理键盘操作和操作系统中断。当您按下键“ g”时,浏览器会接收到该事件,并且自动完成功能会启动。根据浏览器的算法以及您是否处于私密/隐身模式,是否会在下方的下拉菜单中为您提供各种建议网址栏。这些算法大多数都基于整个网络中的搜索历史,书签,Cookie和热门搜索对结果进行排序和优先级排序。在您输入“ google.com”时,会运行许多代码块,并且每次按键都会完善建议。在您完成输入之前,它甚至可能会建议“ google.com”。
“输入”键触底
要选择零点,让我们选择键盘上敲击范围底部的Enter键。此时,回车键专用的电路(直接或电容性)闭合。在这种情况下,这允许少量电流流入键盘的逻辑电路,该逻辑电路扫描每个键开关的状态,消除快速间歇性闭合开关的电噪声,并将其转换为键码整数13.然后,键盘控制器对键码进行编码,以传输到计算机。现在,这几乎普遍通过通用串行总线(USB)或蓝牙连接进行,但历史上一直通过PS / 2或ADB连接进行。
对于USB键盘:
- 键盘的USB电路由计算机USB主机控制器通过针1提供的5V电源供电。
- 生成的键码由内部键盘电路存储器存储在称为“端点”的寄存器中。
- 主机USB控制器每隔约10毫秒(由键盘声明的最小值)轮询一次“端点”,因此它将获取存储在其上的键码值。
- 该值进入USB SIE(串行接口引擎),以转换为遵循低级USB协议的一个或多个USB数据包。
- 这些数据包通过D +和D-引脚(中间2个)上的差分电信号以最大1.5 Mb / s的速度发送,因为HID(人机接口设备)设备始终被声明为“低速设备”。 (符合USB 2.0)。
- 然后,该串行信号在计算机的主机USB控制器上解码,并由计算机的人机接口设备(HID)通用键盘设备驱动程序进行解释。然后将密钥的值传递到操作系统的硬件抽象层。
对于虚拟键盘(如在触摸屏设备中):
- 当用户将手指放在现代电容式触摸屏上时,少量电流会转移到手指上。这通过导电层的静电场完成了电路,并在屏幕上的该点产生了电压降。在
screen controller
随后引发中断报告按键的坐标。 - 然后,移动操作系统会在其GUI元素之一(现在是虚拟键盘应用程序按钮)中向当前关注的应用程序通知按下事件。
- 虚拟键盘现在可以引发软件中断,以将“按键被按下”消息发送回操作系统。
- 该中断通知当前关注的应用程序“按键”事件。
中断触发[不适用于USB键盘]
键盘在其中断请求线(IRQ)上发送信号,该中断请求线interrupt vector
由中断控制器映射到(整数)。CPU使用Interrupt Descriptor Table
(IDT)将中断向量映射到interrupt handlers
内核提供的函数()。当中断到达时,CPU用中断向量索引IDT并运行适当的处理程序。这样就进入了内核。
(在Windows上)一条WM_KEYDOWN
消息发送到该应用程序
HID传输将密钥按下事件传递给KBDHID.sys
驱动程序,该驱动程序将HID用法转换为扫描代码。在这种情况下,扫描代码为 VK_RETURN
(0x0D
)。该KBDHID.sys
驱动程序与KBDCLASS.sys
(键盘类驱动程序)接口 。该驱动程序负责以安全的方式处理所有键盘和小键盘输入。然后,它调用 Win32K.sys
(可能在将消息通过安装的第三方键盘过滤器传递之后)。这一切都发生在内核模式下。
Win32K.sys
通过GetForegroundWindow()
API 找出哪个窗口是活动窗口 。该API提供了浏览器地址框的窗口句柄。然后,主Windows“消息泵”会调用 SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, lParam)
。lParam
是一个位掩码,指示有关按键的更多信息:重复计数(在这种情况下为0),实际扫描代码(可以取决于OEM,但通常不用于VK_RETURN
),是否扩展键(例如alt,shift,ctrl)也被按下(没有),以及其他一些状态。
Windows SendMessage
API是一种简单易用的功能,可将消息添加到特定窗口句柄(hWnd
)的队列中。稍后,将调用WindowProc
分配给的主要消息处理功能(称为)hWnd
以处理队列中的每个消息。
hWnd
处于活动状态的窗口()实际上是一个编辑控件, WindowProc
在这种情况下,它具有消息的消息处理程序WM_KEYDOWN
。该代码在传递给SendMessage
(wParam
)的第3个参数内查找,因为它VK_RETURN
知道用户已按ENTER键。