计算机网络问题(准备中)
1. TCP三次握手机制,为什么要三次握手?
TCP最大的特点是可靠性,同时TCP不同于HTTP协议,TCP是双工的,TCP的Client和Server端可以互换。所以在建立连接的时候必须一端发送请求,另一端回复收到才行。这里最重要的就是双方都要获取对方的序列号(Sequence Number)(当然也需要同步报文长度、滑动窗口等等)。
所以会存在一个疑问,就是Client发送ACK,Server发送收到,Server再发送请问,Client发送收到,双方为什么不是四次握手?
原因在于建立连接的时候不同于关连接的操作,关连接时Client可以一直等待Server端,没有时间要求。但是要建立连接的时候是不允许的,Client端不能长时间等待Server端的消息,必须一次将Seq和ACK发送过来。
2. HTTP协议中缓存的处理流程?
3. 在地址栏键入URL后,网络世界发生了什么?
键入URL后,域名要通过DNS解析成为IP地址,然后经历缓存(Cache
,因为发音酷似cash
,经常用$
代替),缓存没有命中的话,会经历正向代理(正向代理过程中可能也有缓存),然后再去DNS解析,从反向代理到负载均衡(可能也有缓存),再到原服务器。
1 | 浏览器地址栏:developer.mozilla.org |
4. 使用HTTP长连接有哪些优点?
4.1 长连接与短连接的区分:
1 | 语法: |
connection
后面跟close
的时候就是短连接(串行连接),当服务器回复完response后就关连接,如果再连接需要重新建立连接。
后面是keep-alive
的时候就是长连接(持久连接),不需要重新三次握手。
4.2 长连接的优点
- 减少握手次数
- 减少慢启动影响(慢启动:因为公网的带宽有限,开始再公网的传输速度很慢,逐渐增加传输速度至一个合适的速度就是慢启动的过程)。
4.3 缺点:
- TCP因为传输协议的特点,可能会出现队头阻塞的问题,即传输一个文件的过程中一个报文丢包后,对方的应用层也不能接收,即需要重新传输就会出现阻塞现象。
5. 介绍下
CLOSE_WAIT
状态产生的原因?
TCP在关连接的时候就不再提Client和Server了,而要考虑谁先主动关。CLOSE_WAIT
的状态就是对应第一个问题的等待情况,当发送应答之后会进入CLOSE_WAIT
状态,这个等待可以持续很长时间,但是一般不会真的持续很长时间,如果真的持续很长时间可能是出bug
了。
6. 能介绍下多播是怎样实现的吗?
多播在局域网中目前应用较少(5G的到来可能会带来改变),广域网一般是单播。
当一个用户给100个用户发送1G的文件,则在单播的条件下需要发送端的CPU重复复制100份再传输,发送端的流量也需要100G。但是如果是多播,则复制等操作是由交换机来完成的,网络带宽需要的也更少。
7. 服务器的最大并发连接数是多少?
248
延伸: 怎样实现高并发?
不要处理一个问题的时间太长,要把一个请求切的非常小,考虑事件驱动、无阻赛延伸: Linux下高并发优化?
TCP连接如何设置以发出更多的消息,进程、线程的优化。
8. TCP和UDP协议如何选择?
UDP | TCP |
---|---|
一对多通讯 | 传递任意长度信息 |
效率高 | 可靠 |
简单、 | 流量控制 |
- 实时性更好(无对头阻塞) | 拥塞控制 |
9. TLS/SSL协议是怎样保障信息安全的?
利用加密密钥实现
10. HTTP2协议有哪些优点?
10.1 HTTP1.0有哪些缺点?
header实在太长,不支持多路复用。
10.2 2.0的解决方案
- 多路复用,消息推送
- HPACK编码: 动态表、静态表、静态Huffman,整数编码
- Stream优先级: 父子依赖,权重