HTTP:超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言文档从web服务器传送到客户端的浏览器。HTTP协议是构建在TCP/IP协议之上的,是TCP/IP协议的一个子集。 |
初识HTTP
HTTP:超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言文档从web服务器传送到客户端的浏览器。HTTP协议是构建在TCP/IP协议之上的,是TCP/IP协议的一个子集。
TCP/IP族:TCP/IP协议是一系列与互联网相关联的协议集合的总成,分层管理是TCP/IP协议的重要特征。TCP/IP族通常由应用层、传输层、网络层以及数据链路层构成的系统。
应用层:应用层一般是编写的应用程序,决定向用户提供什么应用服务。可以通过系统调用与传输层进行通信,比如:FTP、DNS、HTTP等。
传输层:传输层是通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能。传输层具有两个不同性质的协议:TCP和UDP。TCP是面向连接的,可靠的,效率低。UDP是无连接的,可靠性低,效率高
网络层:网络层是用于处理在网络上流动的数据包,而数据包是网络传输的最小数据单位。此层规定了通过什么路径(传输路线)到达对方对方计算机,并把数据包传输给对方。
链路层:链路层用于处理连接网络的硬件部分,包括控制操作系统、硬件设备驱动、NIC网络适配器以及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围内。
HTTP的传输过程
在发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。而接收端接收数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除。
在下图中,当你想在浏览器查看某个页面时,会在应用层发起一个HTTP请求,通过传输层的TCP协议进行分割HTTP报文,并为每个报文打上标记序号、端口号等信息后发送到网络层。在网络层通过IP协议为每个报文增加作为通讯目的地的MAC地址,然后转发给链路层,接收端的服务器在链路层接收请求的HTTP数据。在服务器返回到浏览器的流程则是相反的。
TCP的三次握手
使用TCP协议进行通信的双方必须先建立连接,然后才能开始传输数据。为了确保连接双方的可靠性,在双方建立连接时,TCP协议会采用三次握手策略。
第一次握手:客户端发送带有SYN标志的连接请求报文段,然后进入SYN_SEND状态,等待服务端的确认。
第二次握手:服务端接受到客户端的SYN报文段后,需要发送ACK信息对这个SYN报文段进行确认,同时还要发送自己的SYN请求信息。服务端会将上述的信息放到一个报文段(SYN+ACK报文段)中,一并发送给客户端,此时服务端将会进入SYN_SEND状态。
第三次握手:客户端接收到服务端的SYN+ACK报文段后,会向服务端发送ACK确认报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED状态,完成TCP三次握手。
讲到这里,通常会有疑问:为什么TCP协议要进行三次握手而不是两次呢?
这是因为要建立可靠的通信,首先客户端和服务端都得确保对方具有完整的收发能力。第一次握手客户端发送请求报文给服务端,服务端可以确认客户端的发送能力是正常的以及服务端的接收能力是正常的;第二次握手客户端接收到服务端返回的报文信息,可以确认服务端的收发能力是正常的,同时客户端的收发能力是正常的;第三次握手客户端再次向服务端发送确认信息,此时服务端可以确认客户端的接收报文的能力和服务端的发送能力是正常。最后能够确认双方的收发能力是正常的,因此需要进行三次握手,而两次握手是不能彼此确认双方的收发能力是否正常。
DNS域名解析
在上面的知识点中,我们知道与HTTP有着密切联系的TCP/IP协议,而DNS服务与HTTP协议也有着密不可分的关系。
比如说你要访问百度www.baidu.com,可以使用主机名100.100.10.10或者域名www.baidu.com进行访问,但是相比于一串纯数字的IP地址而言,使用域名更容易让人记住和访问。要知道在计算机网络中TCP/IP协议使用的就是IP地址进行访问,因此需要通过一种机制将域名转换为IP地址。而 DNS服务正是用于解决这个问题的,可以提供域名到IP地址之间的解析服务,其实就像我们打电话时查阅通讯录一样。
如图所示,当我们在浏览器输入www.baidu.com时,具体细节如下:
① TCP/IP协议会先去访问本地域名解析器,当搜索到对应的IP地址则直接返回到客户端,客户端则直接向服务端发起HTTP请求;而当没有搜索到www.baidu.com对应的IP地址时,则向上溯源,查找上一级域名解析器
② TCP/IP协议访问根域名服务器搜索对应的IP地址,若同样的搜索通过则沿原路返回到客户端;若没有搜索到则继续溯源搜寻
③ TCP/IP协议一直溯源搜寻直至顶级域名服务器,搜寻沿原路返回,否则则告知客户端没有此域名
HTTP事务处理过程
当客户端访问WEB站点时,首先会用过DNS服务查询到域名对应的IP地址,返回到客户端生成HTTP请求,通过TCP/IP协议发送给WEB服务器。WEB服务器接收到请求后,会根据请求生成相应内容,并通过TCP/IP协议返回到客户端。