用户输入 URL(地址链接)(http://www.baidu.com:80/tools.html) 客户端获取到端口及主机名后, 客户端利用 DNS 解析域名, 首先客户端的浏览器会先找自身的缓存, 如果有解析结束, 如果没有客户端会去找 host 文件, 如果 host 文件没有的话, 客户端会去找本地的 DNS 缓存服务器, 本地的 DNS 缓存服务器没有的话, 缓存服务器会去找根域, 根域没有, 会返回一个. com. 然后本地缓存服务器会去找顶级域, 顶级域没有的话会返回 baidu.com., 然后本地缓存服务器会去找二级域, 二级域解析完后会返回客户端. 客户端解析到 IP 地址后会通过 TCP 的三次握手与服务器建立连接, 首先客户端向服务器发送请求连接报文, SYN=1 初始序号 seq 为 x, 这时客户端进入 SYN-SENT 状态, 服务器确认请求报文 ACK=1,SYN=1, 确认序号 ACK=X+1, 服务器产生的初始序号 seq=y, 回复客户端确认连接, 此时服务器进入 SYN-RCVD 状态, 客户端接受后确认报文 ACK=1,ACK=y+1, 客户端又重组序号为 x+1.TCP 连接已经建立, 客户端进入 ESTABLISHED 状态, 当服务器收到客户端的确认后, 也会进入 ESTABLISHED 状态. 客户端连接到 IP 地址, 发送 httpGET 的请求, 从服务器读取 http 响应.
之后断开连接时, 需要通过 TCP 的四次挥手完成, 客户端向服务器发送断开连接请求报文, FIN=1,ACK=1, 序号为 u,pc1 处于 FIN-WAIT-1(终止等待 1) 状态, 服务器确认报文 ack=1, 确认序号为 ack=u+1, 服务器的序号为 v, 回复客户端, 服务器服务端处于 CLOSE-WAIT(关闭等待) 状态, 客户端接受确认报文 ack=1, 确认序号 ack=v+1, 客户端重组序号为 u+1, 客户端处于 FIN-WAIT-2(终止等待 2) 状态, 然后服务器也想让客户端断开连接, 就发送了断开连接请求, FIN=1,ack=1, 服务器重组序号为 w, 服务器服务端处于 LAST-ACK(最后确认) 状态, 客户端接受后确认报文 ack=1. 确认序号为 ack=w+1,pc1 序号为 u+1, 客户端进入 CLOSED(时间等待) 状态, 等待最长报文段寿命 2*MSL, 服务器确认后, 立即进入关闭状态. 然后进行关闭连接.
来源: http://www.bubuko.com/infodetail-3190347.html