内容简介:1、使用DNS域名解析;2、发起TCP的3次握手3、建立TCP连接后发起http请求;
1、使用DNS域名解析;
2、发起TCP的3次握手
3、建立TCP连接后发起http请求;
4、服务器响应http请求,浏览器得到返回response;
5、浏览器解析response,并请求其它的资源(如js、css、图片等);
6、浏览器对页面进行渲染。
举个:chestnut:
访问一个网址的时候,例如www.baidu.com,具体流程如下
- 对www.baidu.com这个网址进行DNS域名解析到IP
- 通过IP,使用ARP地址解析协议,找到对应的服务器,发起TCP三次握手
- 建立TCP请求后,发起HTTP请求(例如TOMCAT部署的springMVC程序)
- 服务器响应HTTP请求,返回RESPONSE
- 游览器解析response,并请求其它的资源文件(js、css等)
- 游览器进行渲染界面
注:DNS域名解析采用的是 递归查询 的方式,软考时有考过,先从本地的DNS缓存中查找--->缓存中没有的话就去找根域名服务器—-->根域名服务器找不到继续找下一级,这样递归查找到再返回给游览器。
具体细节
域名解析
1)首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容·和他们纳1000条缓存) 2)如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的DNS缓存 3)如果还没有找到,那么尝试从 hosts文件里面去找 4)在前面三个过程都没获取到的情况下,就递归地去域名服务器去查找,
TCP连接
到了大家都非常熟悉的三次 和四次:wave:流程
正常的QA:
Q: 为什么连接的时候是三次握手,关闭的时候却是四次握手?
A: 因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
Q: 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
A: 一方面是为了等待这个客户重新连接的时候可以进行复用,另一方面必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
Q: 如果TCP连接丢失了第三个ACK包怎么办?
A: 如果丢失了ACK包,SERVER端将该TCP连接的状态为SYN_RECV,并且依次等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。如果超过设定的次数,将会断开连接。但是Client认为这个连接已经建立,如果Client端向Server写数据,Server端将以RST包响应,方能让Client感知到Server的错误。
参考资料
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- HTTP完整请求过程
- HTTP请求的整个过程
- django从请求到响应的过程
- Laravel 打印请求过程中的所有 SQL
- Express 源码分析1-(服务启动和请求服务过程)
- dubbo源码解析(四十六)消费端发送请求过程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法导论(原书第2版)
[美] Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein / 潘金贵 等 / 机械工业出版社 / 2006-9 / 85.00元
这本书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。本书的设计目标全面,适用于多种用途。涵盖的内容有:算法在计算中的作用,概率分析和随机算法的介绍。书中专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。此书还介绍了对强连通子图......一起来看看 《算法导论(原书第2版)》 这本书的介绍吧!