HTTP简介
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写
是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议
HTTP是一个基于TCP/IP通信协议来传递数据
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)在多个不同网络间实现信息传输协议簇
HTTP是一个属于应用层的面向对象的协议请求响应客户端服务器
主要特点
- 无连接:每次连接只处理一个请求
服务器处理完客户的请求,并收到客户的应答后,即断开连接
采用这种方式可以节省传输时间
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力
缺少状态意味着如果后续处理需要前面的信息,则它必须重传
这样可能导致每次连接传送的数据量增大
另一方面,在服务器不需要先前信息时它的应答就较快
TCP三次握手
基本思想 “让我知道你已经知道”了
3次握手:
- 1、听得到吗?
- 2、听得到,你呢?
- 3、我也听到了。然后才开始真正对话
4次挥手:
- 1、老师,下课了。
- 2、好,我知道了,我说完这点。
- 3、好了,说完了,下课吧。
- 4、谢谢老师,老师再见
建立链接
服务器监听请求,客户端发起连接请求(第一次连接),
请求在路上可能存在丢失的风险,所以当请求到了服务器后如果服务器同意建立连接会给客户端一个回信(第二次连接),告诉它:我已经收到请求,可以连接。
但是回信也存在一个问题,那就是回信能不能到客户端?它需要客户端给他一个回信说我已经收到批准通知了,如果客户端一直不回复的话意味着客户端没有收到批准通知。
因此客户端一收到批准通知就立马回复(第三次握手):OK老铁我收到你的批准通知了。
至此,三次握手结束。
一个很类似的例子就是投简历:先投简历,
然后对方公司会通知你通过简历筛选,
你收到这个通知后一般会回复一下我知道了。
这种“让我知道你已经知道了”的想法是一种约定俗成的可靠信息交互的基本方式,
基于此想法构建的信息交互框架叫做协议。
关闭释放链接
释放连接:客户端发起关闭连接的请求,关闭连接意味着客户端结束了自己的工作即发送数据,
但此时仍然处于数据传输的过程中,服务器可能未数据传输完毕,
因此当请求到服务器时服务器知道了这个请求,但服务器数据传输未完成无法关闭连接,
因此服务器先发送一个ack告诉客户端关闭请求已收到,
但老子正忙,一会再关,你再等一会。等服务器工作完成了,
就把fin信号发送给客户端,此时服务器要等着客户端给他一个回信,
让服务器知道客户端已经知道了。因此客户端收到后就给服务器一个回信,
为了防止回信丢失,客户端就再等2MSL个时间,之所以是2个,
是因为涉及到来回,第一个MSL中是回信在路上的最大时间,
第二个MSL是万一回信没到服务端,服务端重发的FIN确认在路上的时间(不知道这样理解对不对)。