大体分为以下过程:
1 执行DNS域名解析:根据域名查找ip地址
2 封装HTTP请求包
3 封装TCP请求包
4 建立TCP连接:三次握手
5 参数从客户端传递到服务器端
6 服务器得到参数进行处理并返回响应报文给客户端
7 浏览器解析渲染页面
8 断开连接:四次挥手
较为具体的过程:
1 用户在浏览器输入url地址
2 浏览器解析域名得到服务器ip地址(应用层进行DNS解析)
首先在浏览器缓存查找,若存在就直接取出响应IP地址,
若没有找到,在host文件查找,
若没找到在路由器缓存里查找,
最后到DNS服务器去找,没有到更高一级DNS服务器找,直到找到为止
(DNS服务器查找流程:到DNS服务器找,若找到要解析的地址则向客户端发出应答信息,若没有找到,将请求发送到根域名服务器,再由根域名一级级向下查询,直到找到要解析的地址,再向客户端所在网络发出应答信息,DNS服务器收到应答后先在缓存中存储,然后将解析结果发送给客户机,若没有找到,返回错误信息。)
3 应用层生成HTTP请求报文
生成针对目标Web服务器的请求报文, 包括请求行、首部(请求头)主体(请求正文)
4 传输层建立TCP连接
在发送数据包前,要进行三次握手建立连接保证可靠传输
(syn:同步报文段 ack:确认同步)
第一次握手:客户端---->服务器 (syn=1,seq=x) 客户端进入STN_SEND请求连接状态
第二次握手:服务器---->客户端 (syn=1,ACK=1,seq=y,ACKnum=x+1)服务期进入SYN_REVD(SYN派遣)状态
第三次握手:客户端---->服务器(ACK=1,ACKnum=y+1) 客户端进入ESTABLISED状态,当服务器接收到这个包时也进入ESTABLISHED状态,完成三次握手,进行数据传输
当数据传输完毕后 TCP会进行四次挥手断开连接,过程如下:
第一次挥手:客户端——》服务器(FIN=1,seq=u) 客户端状态转变为FIN_WAIT
第二次挥手:服务器——》客户端 (ACK=1,ACKnum=u+1,seq=v) 服务器状态转变为CLOSED_WAIT
第三次挥手:服务器——》客户端 (FIN=1,ACK=1,seq=w,ACKnum=u+1)服务器状态转变为LAST_ACK,等待来自客户端的最后一个ACK
第四次挥手:客户端——》服务器(ACK=1,ACKnum=w+1,seq=u+1) 客户端接受到来自客户端的关闭请求,发送确认包并进入TIME_WAIT状态,此时TCP未释放,等待2MSL(报文最大生存时间) 才会进入CLOSED状态
5 网络层使用IP协议来选择路线
处理来自传输层的数据端segment,将数据段装入数据包,添加源IP地址和目的ip地址,然后发送数据,在数据传输的过程中,ip协议负责选择传送的路线,称为路由功能
6 数据链路层实现网络相邻节点间可靠的数据通信
为保证数据的可靠传输,把数据包封装成帧,并按序传输 ,由于物理线路传输不可靠,为防止在传输过程中出错,于是为每个数据分块计算出CRC,并把crc添加到帧(尾)中,这样接收方就可以通过重新计算crc来判断数据的正确性,一旦出错就重传。帧头主要添加数据链路层的地址,即源MAC地址和目的MAC地址
7 物理层传输数据
数据链路的帧转化成二进制形式·的比特流,从网卡发送出去,在把比特转化成光/电信号在网络中传输
8 服务器处理反向传输
服务器接收到比特流,将比特流转化成帧格式,上传到数据链路层,当发现数据帧的目的MAC地址与本网卡MAC地址相同,服务器拆除数据链路的封装后,将数据包上传到网络层,服务器的网络层比较数据包中的IP地址,发现与本机地址相同,拆除网络层的包装,把数据分段上传到传输层,传输层对数据进行确认,排序,重组,保证数据的可靠性,数据最终上传传到服务器的应用层
9 服务器返回一个 HTTP 响应
由web服务器进行,根据http协议进行解析,并按站报文格式进一步封装成HTTP Request对象,供上层使用
响应报文包括 状态行,响应报头,响应报文
10 浏览器渲染
浏览器的parse模块解析主资源的内容,生成派生资源对应的DOM结构,然后根据派生资源的加载流程创建相应元素
197

被折叠的 条评论
为什么被折叠?



