经典网络五层模型

物理层主要作用是定义物理设备如何传输数据,机器的硬件,网卡端口,网线等。

数据链路层在通信的实体间建立数据链路连接,比如最基础的数据传输数据流,可以自己选择二进制或者ASCII码形式等。

网络层为数据在结点之间传输创建逻辑链路,比如输入百度,网络层会为我们找到百度的网址,如何寻找到的过程就是网络层要做的事。

传输层:向用户提供可靠的端到端(end-to-end)服务;传输层向高层屏蔽了下层数据通信的细节(比如一个post请求,如何分片如何发送使服务端很好接收到,这个规则由传输层实现,应用层的HTTP不用关心这些,但是适当理解对HTTP更好地使用是很有帮助的)。

应用层:为应用软件提供了很多服务,帮我们实现了HTTP协议,我们只要按照规则去使用HTTP协议;它构建于TCP协议之上;屏蔽了网络传输相关细节。

最早定义的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中大部分数据通过字符串的形式;同一个连接里面发送多个请求不再需要按照顺序来;头信息压缩以及推送等提高效率的功能。

下面附上TCP三次握手的时序图:

最常见的client就是浏览器,然而其实只要能实现了一个发送一个http请求报文和解析返回的工具就叫做client。这里我们再敲入,curl -v www.baidu.com,-v表会列出详细的头信息。

curl与浏览器不同是,浏览器还会帮助我们渲染html代码,从而呈现出页面,而curl就是一个简单的发送接收的客户端工具。所以说http不仅仅是用在浏览器里面,像这个curl,或者自己写的爬虫程序,自己发送http请求,然后分析接受的数据,就可以说叫做client。

你可能感兴趣的:(经典网络五层模型)