经典五层模型:
物理层主要作用是定义物理设备如何传输数据,机器的硬件,网卡端口,网线等。
数据链路层在通信的实体间建立数据链路连接,比如最基础的数据传输数据流,可以自己选择二进制或者ASCII码形式等。
网络层为数据在结点之间传输创建逻辑链路,比如输入百度,网络层会为我们找到百度的网址,如何寻找到的过程就是网络层要做的事。
传输层:向用户提供可靠的端到端(end-to-end)服务;传输层向高层屏蔽了下层数据通信的细节(比如一个post请求,如何分片如何发送使服务端很好接收到,这个规则由传输层实现,应用层的HTTP不用关心这些,但是适当理解对HTTP更好地使用是很有帮助的)。
应用层:为应用软件提供了很多服务,帮我们实现了HTTP协议,我们只要按照规则去使用HTTP协议;它构建于TCP协议之上;屏蔽了网络传输相关细节。
http的发展历史:
最早定义的HTTP版本是0.9,它只有一个命令GET,没有HEADER等描述数据的信息,服务器发送完毕,就关闭TCP连接。这里注意TCP连接对应多个HTTP请求,一个HTTP请求一定是在某一个TCP连接里面发送的。
然后是HTTP/1.0,增加了很多命令,增加了status code和header,增加了对多字符集支持、多部分发送、权限、缓存等。
HTTP/1.1,在HTTP/1.0基础上增加了持久连接,原来是发送一个HTTP,就建立一个TCP连接,当发送端接收到以后,就关闭这个TCP连接,这样的成本是比较高的,而现在可以持久连接,不关闭,一直在这个连接中发送,性能有了很大提高;服务端增加了pipline,发送多个HTTP请求,服务端需要处理多个HTTP请求,这里就有一个串行和并行的关系,在HTTP2中有很大改善;增加了host和其他一些命令。
HTTP2中,所有数据以二进制(最小数据单位是帧)传输,HTTP/1.1中大部分数据通过字符串的形式;同一个连接里面发送多个请求不再需要按照顺序来;头信息压缩以及推送等提高效率的功能。
http的三次握手:
正常的请求需要创建一个tcp的链接来作为http请求的通道。tcp的这个创建需要进行三次握手来建立这个链接
三次握手的时序图:
我们可以使用抓包工具来展示三次握手。比如wireshark等等。