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