1 HTTP

1.1 HTTP 与 HTTPS的区别

  • 端口不同:HTTP(80),HTTPS(443)
  • HTTP明文传输,HTTPS加入了SSL,有了加密和认证机制
  • HTTPS由于加密解密会带来更大的CPU和内存开销;
  • HTTPS通信需要证书,一般需要向证书颁发机构(CA)购买

    1.2 HTTP 状态码

    | 1 | 通知信息 | | —- | —- | | 2 | 成功 | | 3 | 重定向,需要进一步的操作以完成请求 | | 4 | 客户端错误 | | 5** | 服务器错误 |

  • 100 继续,101 切换协议

  • 200 请求成功,206 服务器成功处理了部分GET请求
  • 301 永久重定向,302 暂时重定向
  • 400 客户端语法错误,401 要求身份认证,403 权限不够,408 超时
  • 500 服务器内部错误,503超载或系统维护,504 网关超时

    1.3 HTTP 2.0

    与HTTP/1相比,提高了传输效率和吞吐量。

  • 建立动态表提高编码效率,节省带宽资源

  • 实现了Stream并发,另外,可以根据资源渲染顺序设置Stream优先级,提高用户体验
  • 服务器支持主动推送资源,提升了传输性能

    1.4 浏览器输入“百度”网址到浏览器输出页面的整个过程[3]

  • 域名解析(输入 baidu.com 浏览器检查 DNS 记录,并返回对应的 IP)

  • 浏览器与服务器建立连接(TCP/IP 三次握手)
  • 浏览器发送 HTTP 请求
  • 服务器处理 HTTP 请求
  • 服务器返回 HTTP 响应
  • 浏览器渲染页面

    • 浏览器是如何呈现内容的?
      • 浏览器解析 HTML 字符串,碰到 link,src,img 等外部资源就发起请求加载静态资源并缓存,碰到 js 会挂起渲染过程等待下载并执行完毕。浏览器根据 HTML 和 CSS 计算得到模型树,绘制到屏幕上

        1.5 HTTP 应用过程中 TCP/IP四层都应用了哪些协议[4-5]

  • 首先,发送端(客户端)在应用层(HTTP 协议)发出一个 HTTP 请求

  • 传输层(TCP 协议)分割从应用层收到的 HTTP 请求报文,各报文标记序号和端口号,然后转发给网际层
  • 网际层(IP 协议)增加 MAC 地址后转发给网络接口层(以太网、PPP等

    1.6 某网页无法正常访问的原因

  • DNS 配置错误

  • 浏览器用了不恰当的代理
  • 网卡故障(ping 不通自己)
  • IP 被封

    1.7 GET 与 POST 的区别

  • GET 是幂等的(读取同一个资源总是得到相同的数据),POST不是幂等的

  • GET 获取服务器资源,POST 有可能会改变服务器资源
  • GET 请求附在 URL 后,在请求头中。POST 在请求体
  • GET 会被缓存,POST 不会
  • GET 只允许 ASCII,POST 没有限制
  • GET 有长度限制,POST 没有限制

    2 TCP

    2.1 为什么说 TCP 是可靠的( TCP 如何保证传输的可靠性)

  • 数据包校验

  • 对失序数据包重新排序(TCP报文具有序列号)
  • 丢弃重复数据
  • 应答机制:接收方收到数据之后,会发送一个确认(通常延迟几分之一秒);
  • 超时重传:发送方发出数据之后,启动一个定时器,超时未收到接收方的确认,则重新发送这个数据;
  • 流量控制:确保接收端能够接收发送方的数据而不会缓冲区溢出
  • 拥塞控制

    2.2 TCP 的拥塞控制过程[1,2]

    计算机网络 - 图1

    拥塞控制主要由四个算法组成:慢启动、拥塞避免、快重传 、快恢复

  • 慢启动:刚开始,先把拥塞窗口设成最大报文段 MSS 的值,每收到一个新的确认报文,拥塞窗口就加一个 MSS。这样的话,每经过一个传输轮次,拥塞窗口的大小就加倍

  • 拥塞避免:拥塞窗口大小到达慢开始门限的时候,开始执行拥塞避免算法,这个时候拥塞窗口大小不再指数增加,而是线性增加。

    出现网络拥塞时,将慢开始门限设为出现拥塞时,拥塞窗口大小的一半(但不能小于2),然后将拥塞窗口重新设为 1,执行慢开始算法。(这是不使用快重传的情况

为什么不使用慢开始算法?

如果网络出现拥塞,就不会收到好几个重复的确认,发送方会认为现在网络没有出现拥塞。

  • 快重传: 快重传要求接收方在收到一个失序的报文段后就立即发出重复确认,而不是等自己发送数据再捎带确认。发送方一连收到三个重复确认就立即重传对方未收到的报文段。
  • 快恢复:当发送方连续收到三个重复确认时,就把慢开始门限减半,然后执行拥塞避免算法

    2.3 TCP UDP 的应用场景

  • UDP 适用于一些实时性要求比较高的场景,比如直播、游戏等

  • TCP 适用于对可靠性要求比较高的场景,比如远程登陆、接收邮件

    2.4 TCP/IP 三次握手

    计算机网络 - 图2

  • 第一次握手:Client 将 SYN 置 1 ,随机产生一个初始序列号发送给 Server,进入 SYN_SENT 状态

  • 第二次握手:Server 收到来自 Client 的 SYN 信号后,将自己的 SYN 置 1 ,ACK 置 1,产生一个确认序列号(第一次握手时 Client 发送的序列号加 1),然后随机产生一个自己的初始序列号,发送给 Client,进入 SYN_RVCD 状态
  • 第三次握手:Client 检查 Server 发来的确认序列号是否是自己发出的序列号加 1,ACK 是否为 1,检查通过后将自己的 ACK 置 1 ,产生自己的确认序列号(服务器发来的序列号加 1)发给 Server,进入 ESTABLISHED 状态;服务端检查 ACK 为 1 和 acknowledge number 为自己的序列号加 1 后,也进入 ESTABLISHED 状态,完成三次握手,连接建立。

    3 计算机网络体系结构

    计算机网络 - 图3

    参考

  1. https://gitee.com/vict0r/Waking-Up/tree/master
  2. https://blog.csdn.net/qq_33436509/article/details/81979024?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161853972116780262566719%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161853972116780262566719&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-81979024.nonecase&utm_term=%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6
  3. https://www.jianshu.com/p/97974d29940a
  4. https://blog.csdn.net/weixin_41907291/article/details/83821222
  5. https://www.cnblogs.com/yqpy/p/8594651.html

持续更新