这份八股,帮我顶住了大厂的技术面-网络协议篇

934 阅读6分钟

本文来源于公众号:刘卡卡

大家好,我是刘卡卡,一名大厂奶爸程序员,持续探索副业中。

在跳槽到大厂的过程中,用思维导图工具整理了下网络协议相关的一些八股文。

现在分享给你,希望对你有点帮助。

04-网络 协议.png (想获取原思维导图的话,欢迎关注刘卡卡 回复 888 就可)

又或者,你可以访问 www.processon.com/u/5f0ff035f… 这里

  • 协议
    • IP
      • 基本概念
        • IP vs MAC
        • 网络号 和 主机号
          • CIDR
            • 分支主题
          • 子网掩码
            • 为什么要分离网络号和主机号?
      • IP地址与路由控制
        • 流程
      • IP 分片与重组
      • IPv6 基本认识
      • 相关协议
        • DNS 域名解析
        • ARP
          • IP转MAC地址
        • RARP 协议
    • 应用
      • 输入URL的解析过程
        • HTTP 解析URL
        • 查询服务器域名对应的 IP 地址 DNS
      • ping
      • Cookie和Session?
        • 30.什么是Cookie和Session?
        • 32.Cookie和Session的区别?
        • 33.如何考虑分布式Session问题?
        • 31.Cookie和Session是如何配合的呢?
      • 安全
        • DD0S攻击?
        • XSS攻击?
    • HTTP
      • 基本概念
        • 是什么?
          • 超文本传输协议
            • 那「HTTP 是用于从互联网服务器传输超文本到本地浏览器的协议 ,这种说法正确吗?
        • 状态码
          • 2##
            • 3##
              • 4##
                • 5##
        • 请求报文和响应报文的格式?
          • 请求字段
            • 通用字段
              • 响应字段
          • 前端发送post请求给后端,需要哪一些必须的header? 比如Content-type
          • 后端返回的?
        • 请求方式
          • 常用请求方式
            • GET VS POST
      • 特性
        • 缓存机制
        • HTTP优劣势
          • 劣势
            • 1、无状态
              • 2、明文传输
                • 3、不安全
        • 1、长连接
          • 长连接里,怎么判断http响应数据的结束
      • HTTP1.1
        • 性能上
          • 1、长连接
            • 长连接里,怎么判断http响应数据的结束
          • 2、管道网络传输
        • HTTP1.1 存在的性能问题
          • 对头阻塞
      • HTTP2.0
        • 和HTTP1.1区别?
          • 1、头部压缩
            • 2、二进制
              • 3、多路复用
                • 4、服务器推送
                  • 5、数据流
        • 缺陷?HTTP/3
      • HTTPS
        • 概念
          • HTTP 与 HTTPS 的区别?
            • HTTPS 的优缺点?
          • HTTPS解决了哪些问题?
            • 怎么解决这些问题的?
        • 原理
          • 整体流程
            • 是怎么生成对称会话密钥的?
            • 采用混合加密的原因?
          • 数字证书里有什么
            • 数字证书签发和验证流程
          • TLS 四次握手流程
            • 为什么要握手?
              • 握手详细过程?
        • 一些问题
      • 加解密过程
      • 实战
        • 错误码
        • 服务端对手机端的推送,能用http来做吗?
    • TCP
      • 基本认知
        • 为什么需要 TCP 协议? TCP 工作在哪一层?
        • 什么是 TCP ?
        • TCP和UDP的区别?
          • 分支主题
        • UDP 和 TCP 对应的应用场景是什么?
        • 有一个 IP 的服务器监听了一个端口,它的 TCP 的最大连接数是多少?
        • MTU MSS ?
          • 什么是MTU 和 MSS
            • 分支主题
          • 既然 IP 层会分片,为什么 TCP 层还需要 MSS 呢?
      • 原理
        • 连接挥手
          • 三次握手
            • 为什么要建立连接
            • 如何唯一确定一个 TCP 连接呢?
            • 详细介绍一下TCP的三次握手机制?
              • 为什么需要三次握手,而不是两次?
              • 为什么要三次握手,而不是四次?
            • 异常
              • 三次握手时,第一个ACK丢失会怎么样?
              • 三次握手连接阶段,最后一次ACK包丢失,会发生什么?
              • 第二个SYN+ACK丢失会怎么样?
            • 初始序列号
              • 为什么客户端和服务端的初始序列号 ISN 是不相同的?
              • 初始序列号 ISN 是如何随机产生的?
          • 四次挥手
            • 详细介绍一下TCP的四次挥手过程?
              • 为什么需要4次?
            • 异常情况
              • 第一次
                • 第二次
                  • 第三次
                    • 第四次
            • TIME-WAIT
              • 为什么要有TIME-WAIT状态
                • 如果服务端处于LASK_ACK状态,会怎么样?
                • 假设 TIME-WAIT 没有等待时间或时间过短,被延迟的数据包抵达后会发生什么呢?
              • 为什么客户端的TIME-WAIT状态必须等待2MSL?
                • MSL TTL
                  • 2MSL有多久?
              • TIME-WAIT状态过多会产生什么后果?
                • 处理方案
              • 如何优化TIME-WAIT
          • 连接阶段
            • 保活机制 Keep-Alive
              • TCP保活机制时间
                • 开启了 TCP 保活,需要考虑以下几种情况
              • 为什么需要多次探活才能决定一个 TCP 连接是否已经死亡呢?
              • 有人说额外的探活报文占用了有限的带宽,对此你是怎么想的呢?
              • 针对 TCP 的探活,那么你觉得这样的方法是否同样适用于 UDP 呢?
            • 应用层探活机制
              • 为什么需要?
            • 异常
              • 服务器端口关闭了,客户端这时候发送报文,会发生什么
              • 如果已经建立了连接,但是客户端出现故障了怎么办?
              • 路由器突然断开了,需要重新连接嘛
        • 校验和
        • 重传
          • 汇总
          • 超时重传
            • 是什么?
              • 什么情况会发生?
            • 超时时间应该设置多少呢?
              • RTT 、RTO
                • 在重传的情况下,超时时间 RTO 「较⻓或较短」时,会怎么样?
            • 存在的问题?
          • 快速重传
            • 工作流程?
              • 解决什么问题?
                • 存在什么问题?
          • SACK
            • 解决什么问题?
              • 工作流程?
          • D-SACK
            • 解决什么问题?
        • 滑动窗口
          • 解决什么问题?
            • 窗口实现?
              • 累计确认或者累计应答?
          • 窗口大小
            • 窗口大小由哪一方决定?
          • 发送方的滑动窗口
            • 接收窗口和发送窗口的大小是相等的吗?
            • 程序中是如何表示发放方的四个部分?
              • 分支主题
          • 接收方的滑动窗口
            • 分支主题
        • 流量控制
          • 解决什么问题?
          • 操作系统缓冲区与滑动窗口
            • 窗口关闭现象
            • 数据丢失现象?
          • 窗口关闭
            • 什么时候会发生?
              • 有什么危害?
                • 怎么解决的?
          • 糊涂窗口综合症
            • 是什么?什么时候发生?
              • 怎么解决?
                • 怎么让接收方不通告小窗口呢?
                • 怎么让发送方避免发送小数据呢?
                  • Nagle 算法
      • TCP 调优
        • 握手调优
          • 客户端优化
            • SYN_SENT 状态的优化
              • 分支主题
          • 什么是SYN洪泛攻击?如何防范?
            • SYN队列 和 ACK队列
          • 服务端优化
            • 如何查看由于 SYN 半连接队列已满,而被丢弃连接的情况?
            • 如何调整 SYN 半连接队列大小?
            • 如果 SYN 半连接队列已满,只能丢弃连接吗?
            • SYN_RCV 状态的优化
            • accept 队列已满,只能丢弃连接吗?
              • 如何查看由于 accept 连接队列已满,而被丢弃的连接?
            • 如何调整 accept 队列的⻓度呢?
            • 如何查看服务端进程 accept 队列的⻓度?
          • 如何绕过三次握手
        • 挥手优化
          • 主动方的优化
            • 关闭连接的方式
              • 安全关闭连接
            • 调用 close 函数和 shutdown 函数有什么区别?
            • FIN_WAIT1 状态的优化
            • FIN_WAIT2 状态的优化
            • 如果连接双方同时关闭连接,会怎么样?
        • 传输阶段
          • 如何确定最大传输速度?
            • 分支主题
          • 怎样调整缓冲区大小?
      • 实战
        • 如何快速建立连接
        • 用什么命令看tcp 的状态信息?