浏览器输入www.google.com执行过程
1. 查询DNS,获取域名对应的IP地址
-
浏览器搜索自身的DNS缓存
-
操作系统缓存
- 读取hosts文件
-
如果不在,向DNS服务器发起一个DNS查询请求
2. 浏览器获得域名对应的IP地址后,打开TCP连接,三次握手
-
第一次握手:主机A发送位码SYN=1,随机产生sequence number=x的数据包到服务器,主机B由SYN=1知道,A要求建立连接
- 第二次握手:主机B收到请求后要确认联机信息,向A发送acknowledge number=x+1,ACK=1,并随机产生sequence number=y的包
-
第三次握手:主机A收到后检查acknowledge number是否正确,即第一次发送的x+1,以及位码ACK是否为1,若正确,主机A会再发送acknowledge number=y+1,ACK=1,主机B收到后确认acknowledgenumber值与ACK=1则连接建立成功
-
完成三次握手,主机A与主机B开始传送数据
3. TCP/IP连接建立后,浏览器就可以向服务器发送HTTP请求了
1 GET http://google.com/ HTTP/1.1 2 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 3 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0 4 Accept-Encoding: gzip, deflate 5 Connection: Keep-Alive 6 Host: google.com 7 Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]
4. 服务器接受到这个请求,根据路径参数经过后端的一些处理生成HTML页面代码返回给浏览器
1 HTTP/1.1 200 OK 2 Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 3 Expires: Thu, 19 Nov 1981 08:52:00 GMT 4 Pragma: no-cache 5 Content-Encoding: gzip 6 Content-Type: text/html; charset=utf-8 7 Connection: Keep-Alive 8 Content-length: 1215 9 Date: Fri, 30 May 2014 08:10:15 GMT