ping与http 面试题

上一次听了我同事面试腾讯的录音,里面有一个关于计算机网络的题目,比较有意思,在此说一下个人理解,不一定正确哈,如果有错误请大佬们在留言区,赐教

题目

一台机器ping一台机器,耗时100ms,如果在浏览器中访问这台机器的web服务将会耗时多久,或者至少是多少倍。

一听确实被吓了一跳,还能这样计算时间嘛

分析过程

我第一反应,虽然不知道耗时,扯一扯分析的逻辑总没问题。
首先ping是测试2台机器网络是否连通,属于网络层协议

ping 是基于ICMP协议工作的。ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议,网络层协议。

一次ping,其实就相当于一次RTT(返时延)。
问题转换一次从浏览器访问服务器的需要多少次RTT。
浏览器访问,一个web服务有哪些过程呢?
首先这个肯定是http,或者https 应用层协议,为了方便假设是http,http下面还有传输层协议tcp协议。
由于第一次tcp连接,那么肯定是要三次握手,这个耗时不能免

tcp

如上提所示建立连接

  1. 客户端先发送:SYN,seq=x,给服务器
  2. 随后服务器作出相应:SYN,ack=x+1,seq=y
  3. 客户端再发送ACK,seq=x+1,ack=y+1

其中的响应阶段对应了,tcp中的状态,当客户端发送了ACK时,他就已经变成了ESTABLISHED,就可以发送数据到服务器去了,所以也就是消耗了一次RTT的时间建立tcp连接。
建立了tcp连接后,就可以发送数据给服务器。

如果是http通信则可以推断一定是大于2倍ping的时间。

但是如果是https,那可就又复杂了

https首次请求

HTTPS首次请求需要的网络耗时解释如下:

三次握手建立TCP连接。耗时一个RTT。

使用HTTP发起GET请求,服务端返回302跳转到https://。需要一个RTT以及302跳转延时。

大部分情况下用户不会手动输入https://来访问HTTPS,服务端只能返回302强制浏览器跳转到HTTPS。

浏览器处理302跳转也需要耗时。

三次握手重新建立TCP连接。耗时一个RTT。

302跳转到HTTPS服务器之后,由于端口和服务器不同,需要重新完成三次握手,建立TCP连接。

TLS完全握手阶段一。耗时至少一个RTT。

这个阶段主要是完成加密套件的协商和证书的身份认证。

服务端和浏览器会协商出相同的密钥交换算法、对称加密算法、内容一致性校验算法、证书签名算法、椭圆曲线(非ECC算法不需要)等。

浏览器获取到证书后需要校验证书的有效性,比如是否过期,是否撤销。

解析CA站点的DNS。耗时一个RTT。

浏览器获取到证书后,有可能需要发起OCSP或者CRL请求,查询证书状态。

浏览器首先获取证书里的CA域名。

如果没有命中缓存,浏览器需要解析CA域名的DNS。

三次握手建立CA站点的TCP连接。耗时一个RTT。

DNS解析到IP后,需要完成三次握手建立TCP连接。

发起OCSP请求,获取响应。耗时一个RTT。

完全握手阶段二,耗时一个RTT及计算时间。

完全握手阶段二主要是密钥协商。

完全握手结束后,浏览器和服务器之间进行应用层(也就是HTTP)数据传输。

取图来自http://blog.itpub.net/31557835/viewspace-2219412/