需编辑。。。
假设我们刚刚把电脑启动完成,然后立即浏览百度首页.(这样做的用意是提供一个DNS 缓存表为空的环境)
在我们输入www.baidu.com (编者注:www.baidu.com 准备地来说是网站的域名) 使浏览器访问的时候,它会先把域名转换到IP 地址(即:解析,用gethostbyname() 函数实现) .此时WinSock 会从本地的DNS (用于解析域名和IP 地址的协议)缓存表(在本机里面的一张专门存放域名和对应的IP 地址的数据块) 中寻找www.baidu.com 的IP 地址.由于主机是刚刚启动的,所以DNS 缓存表还是一片空白.WinSock 从DNS 缓存表中找不到对应的IP 地址,于是就向DNS 服务器发送查询域名请求(即:DNS 指针查询).DNS 服务器接收到该请求后会在本地查询该域名,假如该DNS 服务器没有该域名和对应的IP 地址的话,那该DNS 服务器便会向比它更高级的DNS 服务器提交查询,一直到查询结果得到为止.成功则返回查询成功数据包,如果还是查询不到的话DNS 服务器会返回查询失败数据包. [该过程为域名转换到IP 过程,用专业的语言来说就是:域名解析过程]
有了IP 地址,浏览器就向它发送TCP 连接请求,接下来就是三次握手过程.连接成功建立后,浏览器会向百度的服务器发送获取http://www.baidu.com/index.html (编者注:www.baidu.com/index.html 的意思是百度首页的index 索引网页的.HTML 文件(网页代码文件))的源代码.随后,百度服务器返回索引网页的源代码,并且主动关闭TCP 连接.最后浏览器便根据这里面的源代码逐一显示在程序的网页浏览控件上.
思考题:请你联系该文章所讲述到的知识认真地想一想系统是怎么样去一步步实现的呢?
与主题无关的相关知识:
*程序启动过程:
在我们双击程序时,Explorer.exe 会调用CreateProcess() 运行该程序.CreateProcess() 立即读取程序文件(即: .EXE 文件) 的PE (PreInstallation Environment ,预安装环境.这个是Windows 特有的程序结构,它的用意是告诉Windows 系统在运行程序之前需要先做哪些东西.详细请见:http://baike.baidu.com/view/3326.htm?fromId=8358 Windows PE 结构 - 百度百科) 结构,Windows 系统会根据.EXE 的需求先做一些相关的工作,比如:程序需要加载到哪一个内存位置?程序代码的入口点在哪儿?系统加载完成后,就将这个程序从硬盘中把程序文件映射到内存中 (内存映射).接下来CreateProcess() 会给该程序分配堆栈,最后再创建线程来执行该程序.假如我们运行的是.INK 文件(即:快捷方式),Explorer.exe 会解析.INK 文件,从中获取到目的程序的运行路径.
*VB 程序运行细节:
由于VB 程序在设计窗口界面的时候完全使开发者避免怎么样用代码把控件一个个创建.读者们可以联系下Win32 窗口程序的开发.首先,在WinMain() (即:Win32 应用程序入口点) 的时候程序就开始注册->创建窗口了.在创建窗口完成后(注意,此时窗口只是空白的!),Windows 系统会向该窗口发送WM_PRINT 消息通告窗口开始画控件.
Q:既然说刚刚创建窗口的时候是空白的,那为什么我们没有先看到空白的窗口再看到程序一步步在窗口上面画控件呢?
A:因为处理器执行代码的速度太快了,所以它在绘画的过程中只使用了非常短的时间,以至于人类的眼晴不能接收到这些图像.
*内核处理按键过程:
在我们输入完成网址后按下键盘的Enter 键,键盘会主动向处理器引发中断事件.由于计算机系统中中断种类太多,而且对于不同的中断有不同的处理方法,于是人们把各个不同的中断处理程序的入口地址储存在中断程序入口表.这是键盘所引发的中断,那处理器接收到这个中断的时候立即跳出当前正在运行的程序,转而去运行键盘中断程序,当键盘中断程序执行结束后,处理会继续执行原先的暂停运行的代码.
这个被按下的按键在处理器里面是用ASCII 码来保存的,并且它也会从最底层驱动一直上传到应用程序.应用程序是通过系统发来的WM_KEYDOWN 消息然后来获取按下的键值的.