TCP
-
TCP三次握手机制,为什么要三次握手?
考点:
-
为什么要握手?
TCP最重要的特性就是
可靠性
,自己发出去的数据要等到对方去确认,并回复收到了(ack),TCP是支持双工协议,所以双方都要去维护自己的序列号(seq,不从0开始,随机生成的)。因为要获取序列号(和MSS,滑动窗口),所以要握手。 -
为什么要三次?
因为关闭连接的时候,TCP协议允许连接处于半打开(半关闭)状态。而建立连接不允许连接处于半打开状态,所以Server要把自己的序列号回复过来。
-
-
HTTP 缓存处理流程?
Request 中 Cache-Control: max-age=30 ,告诉代理服务器,如果有缓存的话,如果超过30秒时,就不要给Client返回,让代理服务器去原服务器去取。
Response 中的 Cache-Control: max-age=30 ,告诉客户端,只能到30秒,否则将视为过期。
-
地址栏输入URL到底发生了什么?
考点:
-
应用层
DNS域名解析-》代理服务器 -》可能缓存->网关(Nginx、Apache)-》Origin Server 【如上图所示】
-
请求编码
http://[domain]/[path] -> 转换成 Method ,Path ,Version Protocol,Header等
-
网络分层
- TCP解决进程到进程之间的通信
- IP 解决主机到主机之间的通信
- 数据链路层 解决 局域网内部的通信
-
-
HTTP长链接有哪些优点?
考点:
1.长链接和短连接的区分?
HTTP Header : connect : close / keepalive
2.TCP协议
-
减少握手建立的消耗
-
降低了慢启动带来了传输效率的影响,支持(1字节-1GB数据大小,不限于1GB)
1.TCP天生代流量控制的,但中间的网络带宽等都是有限制的,所以TCP会从慢到快最终到一个合适的传输状态。
-
缺点:TCP字符流协议,长链接传输多个文件的时候,第一个文件没传递完成时不会传第二个,会导致TCP长链接串行传旭。因为TCP会有一个队头阻塞问题,(只要有一个丢包,即使传了对方应用层不会接收。)
-
-
CLOSE_WAIT产生的原因?(出程序Bug了,可能忘记关闭Socket了,Socket泄露)
-
单播,广播,组播,多播。「TODO」
-
服务器的最大并发连接数是多少?
考点:TCP四元组,并非是65536个端口号的限制。
-
TCP四元组包括源IP,源端口,目的IP和目的端口。(不仅受制于端口) 2^48 = 2^16 * 2^32 (理论)
-
Linux更多的并发数可以打开(ip local port range 打开)、配置多网卡,虚拟IP(实践)
-
高并发的限制?怎样处理高并发优化?
不要处理一个请求时间过长,否则可能会导致超时。(需要用到事件驱动,因其无阻塞)
-
-
报文传输:TCP Header 过大 20字节 UDP 8字节
-
TLS/SSL怎么保证安全问题?
- PKI证书体系:RSA-非对称加密
- 对称加密算法:速度快,不知道秘钥情况下,不能逆推。
- 秘钥交换协议:握手阶段协商(DH & ECCDH)
-
HTTP 2.0 优点
HTTP 1.1 缺点
- Header 太长 :cookie、user-agent 等 每次都发送,占用带宽
- 不支持多路复用
解决:
- 消息推送,访问http//***/index.html 推送css和js。
- 多路复用:【Chrome下默认6个TCP连接】
- HPACK编码:(header压缩编码)
- 动态表
- 静态表 (常用61个)
- 静态 Huffman
- 证书编码
- Stream 优先级
- 父子依赖
- 权重优先级
Other
- 大厂更考验的是分析能力,即使不会也应该去分析一下。
- 小厂不希望你有太明显的短板,希望全方位能力。