1.画出TCP三次握手,四次挥手图
三次握手完成----连接建立完成,client相当于已经完成net.dail()函数的调用。server已经完成listener.accept()函数的调用。
ps:为什么握手是三次,挥手的四次?
握手如果是两次,那么仅仅是客户端知道自己发出去的消息被服务器收到了,但是服务器并不知道自己发出去的消息能不能被客户端收到,所以需要三次握手,确保数据安全可靠。
因为四次挥手中主动方发出FIN关闭连接请求,被动方此时处于半关闭状态。被动方需要将ack 应答传输完成,被动方再提出FIN关闭请求。而在三次握手中服务器却是将SYN和ACK一起发送给客户端。
2.浏览器输入www.cnblogs.com后,直到浏览器显示页面,这中间经历了什么?
根服务器简易图:
解析IP地址过程图:
总体流程:
一.把该域名解析为IP地址
(1)、浏览器会首先查看本地 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
(2)、如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地的DNS服务器 。
(3)、DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就直接返回结果。如果没有,本地DNS服务器向根DNS服务器进行查询。
(4)、根DNS服务器注意到其com后缀,于是向本地DNS服务器返回.com域服务器的IP地址。
(5)、然后本地DNS服务器向.com域服务器发出请求,.com域服务器告诉本地DNS服务器,你得向cnblog.com域服务器查询才能知道答案,给出cnblog.com域服务器的IP地址。
(6)、最后,本地DNS服务器向cnblog.com域服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还会把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
二. 拿到IP地址后,浏览器和服务器进行TCP三次握手,建立连接。
三.与服务器建立了连接后,浏览器向服务器发送http请求。
四.服务器给浏览器进行一个301永久重定向响应。
IP对应的服务器很可能是代理服务器,比如输入“http://baidu.com”,而不是“http://www.baidu.com”,这两个网址对应的是同一个网页,因此通过代理服务器的方式进行重定向响应,让这两个网址访问的同一个网页。 浏览器根据重定向地址再次进行HTTP请求。
五.服务器处理请求并返回处理结果。
Web服务器通常通过监听80端口来获取客户端的HTTP请求,Web服务器收到客户端发来的数据,并通过HTTP解码,将响应数据返回给浏览器。
六.浏览器对数据解析渲染并将页面呈现给用户。
浏览器收到响应内容之后,生成主页框架,同时向服务端继续发送请求,请求的内容是主页里的一些资源,比如说图片、视频等。 对于静态的页面内容,浏览器通常进行缓存,对于动态的内容通常不缓存,缓存的时间也是有期限的。浏览器向服务器发送异步请求,因为有些页面显示完成之后客户端仍需要与服务端保持联系。 整个过程结束之后,浏览器关闭TCP连接。
七.进行TCP四次挥手,关闭TCP连接。