1 HTTP
1.1 HTTP 与 HTTPS的区别
- 端口不同:HTTP(80),HTTPS(443)
- HTTP明文传输,HTTPS加入了SSL,有了加密和认证机制
- HTTPS由于加密解密会带来更大的CPU和内存开销;
-
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 响应
浏览器渲染页面
首先,发送端(客户端)在应用层(HTTP 协议)发出一个 HTTP 请求
- 传输层(TCP 协议)分割从应用层收到的 HTTP 请求报文,各报文标记序号和端口号,然后转发给网际层
网际层(IP 协议)增加 MAC 地址后转发给网络接口层(以太网、PPP等)
1.6 某网页无法正常访问的原因
DNS 配置错误
- 浏览器用了不恰当的代理
- 网卡故障(ping 不通自己)
-
1.7 GET 与 POST 的区别
GET 是幂等的(读取同一个资源总是得到相同的数据),POST不是幂等的
- GET 获取服务器资源,POST 有可能会改变服务器资源
- GET 请求附在 URL 后,在请求头中。POST 在请求体
- GET 会被缓存,POST 不会
- GET 只允许 ASCII,POST 没有限制
-
2 TCP
2.1 为什么说 TCP 是可靠的( TCP 如何保证传输的可靠性)
数据包校验
- 对失序数据包重新排序(TCP报文具有序列号)
- 丢弃重复数据
- 应答机制:接收方收到数据之后,会发送一个确认(通常延迟几分之一秒);
- 超时重传:发送方发出数据之后,启动一个定时器,超时未收到接收方的确认,则重新发送这个数据;
- 流量控制:确保接收端能够接收发送方的数据而不会缓冲区溢出
-
2.2 TCP 的拥塞控制过程[1,2]
拥塞控制主要由四个算法组成:慢启动、拥塞避免、快重传 、快恢复 慢启动:刚开始,先把拥塞窗口设成最大报文段 MSS 的值,每收到一个新的确认报文,拥塞窗口就加一个 MSS。这样的话,每经过一个传输轮次,拥塞窗口的大小就加倍
- 拥塞避免:拥塞窗口大小到达慢开始门限的时候,开始执行拥塞避免算法,这个时候拥塞窗口大小不再指数增加,而是线性增加。
出现网络拥塞时,将慢开始门限设为出现拥塞时,拥塞窗口大小的一半(但不能小于2),然后将拥塞窗口重新设为 1,执行慢开始算法。(这是不使用快重传的情况)
为什么不使用慢开始算法?
如果网络出现拥塞,就不会收到好几个重复的确认,发送方会认为现在网络没有出现拥塞。
- 快重传: 快重传要求接收方在收到一个失序的报文段后就立即发出重复确认,而不是等自己发送数据再捎带确认。发送方一连收到三个重复确认就立即重传对方未收到的报文段。
快恢复:当发送方连续收到三个重复确认时,就把慢开始门限减半,然后执行拥塞避免算法
2.3 TCP UDP 的应用场景
UDP 适用于一些实时性要求比较高的场景,比如直播、游戏等
TCP 适用于对可靠性要求比较高的场景,比如远程登陆、接收邮件
2.4 TCP/IP 三次握手
第一次握手: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 计算机网络体系结构
参考
- https://gitee.com/vict0r/Waking-Up/tree/master
- 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
- https://www.jianshu.com/p/97974d29940a
- https://blog.csdn.net/weixin_41907291/article/details/83821222
- https://www.cnblogs.com/yqpy/p/8594651.html
持续更新