一、从发出http请求到服务器应答的主要过程
1.连接:向服务器发送请求之前需要建立连接,通过DNS服务器创建套接字、建立连接、收发数据等操作查询ip地址,再建立socket连接。
2.请求:连接成功后,向Web服务器发送http消息格式的请求,包括get、post等命令。
3.应答:web服务器收到请求后,从它的文档空间中搜索子目录index的文件index.html,并把其传送给web服务器,再将具体信息传递回浏览器。
4.关闭连接:Web浏览器与Web服务器断开,以保证其他Web浏览器能与Web服务器建立连接。
二、客户端发出请求到服务器做出相应经历的步骤
- 浏览器解析URL
将输入的网址进行解析,拆分出服务器的名字以及路径名。
(2)通过DNS查询IP地址
Socket 库提供查询 IP 地址的功能,用于调用网络功能的程序组件集合,通过socket、协议栈、网卡和DNS服务器查询IP地址,委托协议栈发送消息时通过①创建套接字②将管道连接到服务器端的套接字上③收发数据④断开管道并删除套接字。
(3)向服务器发送请求
浏览器确定了 Web 服务器和文件名,再根据这些信息来生成 HTTP 请求消息,使用get或post方法等发送请求。
(4)服务器接收操作
①网卡将接收到的信号转换成数字信息, MAC 模块将网络包从信号还原为数字信息,校验 FCS,并存入缓冲区,网卡驱动会根据 MAC 头部判断协议类型,并将包交给相应的协议栈。
②IP模块会进行接收操作,协议栈的IP模块会检查 IP 头部,判断是不是发给自己的并且判断网络包是否经过分片,再将包转交给 TCP 模块或 UDP
模块。
③TCP模块处理连接包和数据包,收到的是发起连接的包时,则TCP模块会确认TCP头部的控制位SYN,检查接收方端口号,为相应的等待连接套接字复制一个新的副本,记录发送方 IP 地址和端口号等信息。
收到数据包时TCP模块会根据收到的包的发送方IP地址、发送方端口号、接收方 IP 地址、接收方端口号找到相对应的套接字,将数据块拼合起来并保存在接收缓冲区中,向客户端返回ACK。
④当数据收发完成后,便开始执行TCP模块便开始执行断开操作。
(5)服务器解释请求并作出响应
将请求的 URI 转换为实际的文件名,再运行 CGI 程序最终返回响应消息。
(6)浏览器接受相应并显示内容
Web服务器调用Socket库的write,将响应消息交给协议栈,协议栈会将数据拆分成多个网络包最终到达客户端,判断响应消息中的数据属于哪种类型,最终根据数据类型调用用于显示内容的程序。
三、数据的http请求过程所经历的层次
客户端的应用层——客户端的传输层——客户端的网络层——客户端的链路层——物理——服务器的链路层——服务器的网络层——服务器的传输层——服务器的应用层
(Ps:对上述层次连接的理解可能有不准确的地方)
- 应用层:应用层是网络服务与使用者程序间的一个接口,每次都请求都会经过客户端的应用层(http协议)。
过程:确定发送数据的内容,将这些数据放到一个缓冲区,然后形成应用层的报文data。
- 传输层:向高层提供可靠的端到端的网络数据流服务,请求从应用层到客户端的传输层(tcp或udp协议)。
过程:数据是通过传输层发送,这些数据在传输层被打上包头,主要包含端口号以及tcp的各种制信息,组成了tcp的数据传送单位segment。
3.网络层:网络层负责在源和终点之间建立连接。
过程:将数据打包,包头内含有源及目的地的ip地址。
4.链路层:数据链路层通过物理网络链路提供数据传输。
过程:将MAC地址及链路控制信息加到数据包里形成Frame。Frame在链路层协议下,完成了相邻节点间的数据传输,完成连接建立。
5.物理层:负责最后将信息编码成电流脉冲或其它信号用于网上传输。
过程:负责该数据以bit为单位从主机传输到下一目的地。