应用层 - 网络

  1. 套接字
  2. 安全套接字层
  3. HTTP-Web 应用层协议
    1. 是否复用 TCP 连接:持续与非持续连接
      1. 往返时间:RTT
    2. HTTP2

应用层通过套接字使用传输层的服务。

笔记:《计算机网络 - 自顶向下(第七版)》

套接字

网络中两个应用程序的通信实际上是进程之间的通信。

  1. 进程通过一个称为 ** 套接字 socket** 的软件接口向网络发送报文或者从网络接收报文。
  2. 进程比作房子,套接字就是房门。一个进程与另一进程通信,把报文推出门,通过有运输功能的设施把报文传送到目的进程的门口,然后目的主机的进程通过进程的门(套接字)处理报文。

套接字就是应用程序(进程)和运输层协议之间的接口。

应用程序开发者可以控制套接字在应用层端的一切,但是开发者对该套接字的运输端几乎没有控制权。

安全套接字层

SSL,不是与 TCP 和 UDP 同一层次的第三种运输协议,只是对 TCP 的加强,强化是在应用层上实现的。
例如,一个应用程序要使用 SSL 服务时,需要在应用程序的客户端 & 服务器端同时使用 SSL 代码。
SSL 有专门的套接字:

  1. 发送报文的进程首先向 SSL 套接字传递明文数据
  2. 然后 SSL 代码加密数据,并将加密后的数据传递给 *TCP 套接字 *,发送到因特网
  3. 经过因特网后到达目的主机接收进程使用的 *TCP 套接字 *
  4. 该套接字再将加密数据传递给 SSL 解密
  5. 最后,SSL 将解密后的数据通过 SSL 套接字传递给接收进程

HTTP-Web 应用层协议

HTTP 客户端首先发起一个与服务器的 TCP 连接。
一旦连接建立,此客户端(浏览器)和服务器进程就可以通过各自的套接字访问 TCP。
如第一节套接字所述

  1. 客户端向自己的套接字接口发送 HTTP 请求报文,接收 HTTP 响应报文。
  2. 一旦向套接字发送了请求报文,该报文就完全脱离了客户端(浏览器)的控制,套接字将报文交由 TCP 控制。TCP 的可靠数据传输服务保证了这个请求报文可以完整地到达服务器。
  3. 服务器端也是如此

是否复用 TCP 连接:持续与非持续连接

客户端和服务器端可能需要长时间通信,通信的请求需要一个一个的发送,应用程序的开发者需要决定在这个客户端与服务器的通信中:

  • 非持续连接:每个请求与响应使用单独的 TCP
  • 持续连接:或者全部请求响应经过相同的 TCP

非持续连接:
例如,一个包含 3 个图片的 HTML 网页文档。

  1. 服务器是一直开着的,客户端要首先和服务器简历 TCP 连接
  2. 接着,客户端发送请求获得网页
  3. HTTP 服务器进程收到请求,封装网页发送给 TCP 套接字
  4. 发送完成后,HTTP 服务器进程会通知 TCP 断开此 TCP 连接(其实直到 TCP 确认客户端已经完整收到响应报文,它才会真正断开连接)。
  5. 客户端收到包含网页的报文后,与服务器的 TCP 连接就被关闭
  6. 之后的 3 张图片的请求需要重复 3 次这个过程。

一句话,每个 TCP 连接只传输一个请求报文和一个响应报文。

非持续连接缺点是:

  1. Web 服务器负担大。由于 TCP 连接太多,而每个 TCP 连接都需要缓冲区和变量进行维护连接,所以给 Web 服务器很大压力。
  2. 不必要的时延。因为建立 TCP 连接时,总需要一个 RTT 来创建 TCP,其后的一个 RTT 才是请求和接收 Web 数据。

持续连接:服务器在发送响应后,不会马上断开 TCP 连接,在后续同一客户端发送请求时,继续通过这个 TCP 连接进行传输。一般经过一定的时间未使用后,HTTP 才会关闭 TCP 连接。

往返时间:RTT

代表一个短分组从客户端到服务器端然后再返回客户端的时间。
一般三次握手的前两次所耗费的时间可以视为一个 RTT
客户端通常结合第三次握手,向该 TCP 连接发送一个 HTML 请求报文。一旦此请求报文到达服务器,服务器就在这个建立好的 TCP 连接上发送 HTML 文件。第三次握手和 HTML 响应报文到达客户端的事件就是另一个 RTT

HTTP2

二进制流
二进制的优势:

  1. 文本数据,与字符流无差别。而对于数字,二进制更节省空间。
  2. 图片和视频在存储时,是二进制的,使用时,转换为二进制流也更快捷。

HTTP2 相比之前的 1.X 版本,优点:

  1. 完全的二进制格式的数据传输,而 1.X 默认为文本格式。一般来说,相同的内容量,二进制流比文本流使用更少的字节既可以实现传输。
  2. 版本 2 使用 TCP 多路复用 ** 来降低网络请求连接建立和关闭的开销,多个请求可以通过一个 TCP 连接 ** 并行完成 *。多路复用是传输层完成的,而 1.X 的 keep-alive 是在应用层的连接复用,而且是 * 串行的 **,就是说,一个文件通过这个 TCP 连接传输完成后,下个文件才能开始复用这个连接。TCP 多路复用 ** 可以让不同文件的传输帧在一个 TCP 连接中一起同时进行流式传输。
  3. 版本 2 支持传输流的优先级和流量控制机制。例如,服务器可以直接设置,HTML 和 CSS 优先级高,而 JS 脚本优先级低,这样 JS 就可以不用写在 HTML 底部了。
  4. 支持服务器推送。服务器主动把资源推送给客户端。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。
我的空间