计算机网络复习


计算机网络复习

IP协议

多HTTP请求问题

  1. 收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?

答:
前提条件:从HTTP/1.1开始,TCP连接是默认持续连接的,首部字段Connection:keep-alive,关闭时请求中写明Connection:close。

HTTP/1.1支持了管道传输pipeline,即在同一个TCP连接内,客户端可以发起多个请求,但是服务器会按请求的顺序响应。如果前面的请求处理的慢,会造成队头阻塞,性能一般。

如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP/2:

  • 如果能则使用 Multiplexing 在该连接上进行多路传输(不过未必所有挂在该域名的资源都使用同一个 TCP 连接获取,但 Multiplexing 很可能被用到);
  • 如果不能使用 HTTP/2,或者使用不了HTTPS (因为HTTP/2都是在HTTPS上实现的),则即为HTTP/1.1,HTTP/1.1的每个TCP连接在同一时刻只处理一个请求,则浏览器会在一个Host上建立多个TCP连接,连接的最大数量取决于浏览器设置。这些TCP连接会在空闲的时候被浏览器用来发送新的请求,若所有的TCP连接都在占用,则只能等待。

HTTP/2 的改进

  • HTTP/2基于HTTPS,安全性有保障。
  • 头部压缩:如果同时发出多个请求,它们的头一样或者相似的话,HTTP/2协议会消除重复。
    • HPACK算法:在Client和Server同时维护索引表,分为静态索引表与动态索引表,静态索引表来定义常用的HTTP Header,请求时只需发送索引位置即可。不在静态表中的值用动态索引表,通过huffman编码动态缓存到索引来压缩头部。动态表与静态表共通组成了索引表的索引空间。 https://www.jianshu.com/p/f44b930cfcac
  • 采用了二进制形式,头和数据题都是二进制,统称为帧 frame。二进制对计算机友好,增加了数据传输效率。
  • 多路复用:HTTP/2同一个TCP连接中可并发多个请求或响应,不会产生队头阻塞。

  • 数据流:HTTP/2同一个TCP连接中可并发多个请求或响应,每个数据包可能属于不同的请求或响应。

    • 每个请求或响应对应的数据包,称一个数据流 Stream,每个Stream有独立编号,其中客户端发送的为奇数,服务器发送的为偶数。
    • 客户端可以指定数据流的优先级。
  • 服务器推送:Server主动向Client发送消息。

HTTP/2 的缺陷

多个HTTP请求复用一个TCP连接,下层的TCP协议不知道有多少个HTTP请求,一旦发生丢包,就会触发TCP的重传机制,阻塞所有HTTP请求。

HTTP/3 的改进

把 TCP 改成了 UDP ,UDP 本身不管顺序、丢包,是不可靠传输。
但基于 UDP 的 QUIC协议 实现类似 TCP 的可靠传输。

  • 当某个流丢包,只阻塞该流,其他流不受影响。
  • 使用了 TLS/1.3 和头部压缩算法 QPack
  • QUIC建立连接减少了交互次数。

QUIC是新协议,很多网络设备不支持,还在普及。


文章作者: Yu Yang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Yu Yang !
 上一篇
进程与线程-转载 进程与线程-转载
本文由 简悦 SimpRead 转码, 原文地址 https://mp.weixin.qq.com/s?__biz=MzIwNTc4NTEwOQ==&mid=2247487913&idx=1&sn=8c3f042c
2020-03-06
下一篇 
Java中是值传递 Java中是值传递
Java中只有值传递 今天看了一篇博客,对java中的参数传递有了进一步的认识。 之前的错误认识:传递的参数如果是普通类型,就是值传递;如果是对象,就是引用传递。 值传递与引用传递 值传递:调用函数时将实参复制一份传递给函数,如果
2020-02-21
  目录