- 浏览器根据主机名去操作系统的
Hosts
文件中查找主机名对应的IP
地址 - 浏览器如果在操作系统的
Hosts
文件中没有找到对应的IP
地址,就去互联网上的DNS
服务器上查找对应的IP地址 - 浏览器查找到对应的IP地址后,就使用IP地址连接到Web服务器(三次握手)
- 第一次握手: 建立连接时,客户端发送
syn
包(syn=j)到服务器,并进入SYN_SENT
状态,等待服务器确认; - 第二次握手: 服务器收到
syn
包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV
状态; - 第三次握手: 客户端收到服务器的
SYN+ACK
包,向服务器发送确认包ACK(ack=k+1)
,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态, 完成三次握手。
- 第一次握手: 建立连接时,客户端发送
- 浏览器连接到web服务器后,就使用http协议向服务器发送请求,发送请求的过程中,浏览器会向Web服务器以
Stream
(流)的形式传输数据,告诉Web服务器要访问服务器里面的哪个Web应用下的资源 - 浏览器等待服务器返回信息
- 服务器解析浏览器的请求,并以流的形式返回
- 浏览器用收到的数据渲染页面
- 关闭TCP连接(四次挥手)或继续保持连接
- 第一次挥手:当客户端确认发送完数据且知道服务器已经接收完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给服务器,
- 第二次挥手:服务器收到客户端发送的FIN,表示收到了,就会发送ACK回复(考虑到服务器可能还有数据要发送,所以服务器发送FIN放到第三次握手),
- 第三次挥手:服务器发完数据后,发送FIN请求断开连接,
- 第四次握手:客户端返回ACK表示同意,并等待2MSL以后,没有收到服务器传来的任何消息,知道服务器已经收到自己的ACK了,客户端就关闭链接,服务器也关闭链接了。
- MSL(Maximum Segment Lifetime)指的是:一段TCP报文在传输过程中的最大生命周期。2MSL即是服务器端发出为FIN报文和客户端发出的ACK确认报文所能保持有效的最大时长
- 如果客户端在2MSL内,再次收到了来自服务器端的FIN报文,说明服务器端由于各种原因没有接收到客户端发出的ACK确认报文。客户端再次向服务器端发出ACK确认报文,计时器重置,重新开始2MSL的计时
- 否则客户端在2MSL内没有再次收到来自服务器端的FIN报文,说明服务器端正常接收了ACK确认报文,客户端可以进入CLOSED阶段,完成“四次挥手”
↑客户端比服务器端晚进入CLOSED阶段的原因