1、浏览器地址栏输入 URL,浏览器解析 URL,从而生成发送给 web 服务器的请求信息。
2、浏览器查看浏览器缓存系统缓存路由缓存, 如有存在缓存, 就直接显示。 如果没有, 接着第3步。
3、域名解析(DNS)获取相应的 IP。
4、浏览器向服务器发起 tcp 连接, 与浏览器建立 tcp 三次握手。
三次握手举例,将通信的两端用字母A和B替代。A要往B发数据,A要确定两件事:
1. B在“那儿”,并且能接受数据 —— B确实存在,并且是个“活人”,能听得见
2. B能回应 —— B能发数据,能说话
为了消除这两个不确定性,所以必须有前两次握手,即A发送了数据,B收到了,并且能回应——“ACK”。
同样的,对于B来说,它也要消除以上两个不确定性,
通过前两次握手,B知道了A能说,但是不能确定A能听,这就是第三次握手的必要性。
当然你可能会问,增加第四次握手有没有必要?
从信息论的角度来说,已经不需要了,因为它的增加也无法再提高确定性。
为什么要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。
当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:A 和 B 打电话,通话即将结束后。
A 说“我没啥要说的了”。
B回答“我知道了”。
但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,
最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
5、握手成功, 浏览器向服务器发送 http 请求, 请求数据包。
6、服务器请求数据, 将数据返回到浏览器。
7、浏览器接收响应, 读取页面内容, 解析 html 源码, 生成 Dom 树。
8、解析 css 样式、 浏览器渲染, js交互。
|