TCP

  1. TCP三次握手机制,为什么要三次握手?

    考点:

    1. 为什么要握手?

      TCP最重要的特性就是可靠性,自己发出去的数据要等到对方去确认,并回复收到了(ack),TCP是支持双工协议,所以双方都要去维护自己的序列号(seq,不从0开始,随机生成的)。因为要获取序列号(和MSS,滑动窗口),所以要握手。

    2. 为什么要三次?

      因为关闭连接的时候,TCP协议允许连接处于半打开(半关闭)状态。而建立连接不允许连接处于半打开状态,所以Server要把自己的序列号回复过来。

  2. HTTP 缓存处理流程?

    img

    Request 中 Cache-Control: max-age=30 ,告诉代理服务器,如果有缓存的话,如果超过30秒时,就不要给Client返回,让代理服务器去原服务器去取。

    Response 中的 Cache-Control: max-age=30 ,告诉客户端,只能到30秒,否则将视为过期。

  3. 地址栏输入URL到底发生了什么?

    考点:

    1. 应用层

      DNS域名解析-》代理服务器 -》可能缓存->网关(Nginx、Apache)-》Origin Server 【如上图所示】

    2. 请求编码

      http://[domain]/[path] -> 转换成 Method ,Path ,Version Protocol,Header等

      img

    3. 网络分层

      1. TCP解决进程到进程之间的通信
      2. IP 解决主机到主机之间的通信
      3. 数据链路层 解决 局域网内部的通信
  4. HTTP长链接有哪些优点?

    考点:

    1.长链接和短连接的区分?

    HTTP Header : connect : close / keepalive

    2.TCP协议

    1. 减少握手建立的消耗

    2. 降低了慢启动带来了传输效率的影响,支持(1字节-1GB数据大小,不限于1GB

      1.TCP天生代流量控制的,但中间的网络带宽等都是有限制的,所以TCP会从慢到快最终到一个合适的传输状态。

    3. 缺点:TCP字符流协议,长链接传输多个文件的时候,第一个文件没传递完成时不会传第二个,会导致TCP长链接串行传旭。因为TCP会有一个队头阻塞问题,(只要有一个丢包,即使传了对方应用层不会接收。)

  5. CLOSE_WAIT产生的原因?(出程序Bug了,可能忘记关闭Socket了,Socket泄露)

  6. 单播,广播,组播,多播。「TODO」

  7. 服务器的最大并发连接数是多少?

    考点:TCP四元组,并非是65536个端口号的限制。

    1. TCP四元组包括源IP,源端口,目的IP和目的端口。(不仅受制于端口) 2^48 = 2^16 * 2^32 (理论)

    2. Linux更多的并发数可以打开(ip local port range 打开)、配置多网卡,虚拟IP(实践)

    3. 高并发的限制?怎样处理高并发优化?

      不要处理一个请求时间过长,否则可能会导致超时。(需要用到事件驱动,因其无阻塞)

  8. img

    报文传输:TCP Header 过大 20字节 UDP 8字节

  9. TLS/SSL怎么保证安全问题?

    1. PKI证书体系:RSA-非对称加密
    2. 对称加密算法:速度快,不知道秘钥情况下,不能逆推。
    3. 秘钥交换协议:握手阶段协商(DH & ECCDH)
  10. HTTP 2.0 优点

    HTTP 1.1 缺点

    1. Header 太长 :cookie、user-agent 等 每次都发送,占用带宽
    2. 不支持多路复用

    解决:

    1. 消息推送,访问http//***/index.html 推送css和js。
    2. 多路复用:【Chrome下默认6个TCP连接】
    3. HPACK编码:(header压缩编码)
      1. 动态表
      2. 静态表 (常用61个)
      3. 静态 Huffman
      4. 证书编码
    4. Stream 优先级
      1. 父子依赖
      2. 权重优先级

Other

  1. 大厂更考验的是分析能力,即使不会也应该去分析一下。
  2. 小厂不希望你有太明显的短板,希望全方位能力。