计算机网络:面试真题实战
1、面试真题问答
以下问题都是基于之前写的计算机网络系文章做出简单问答
问1:TCP/IP协议群做了哪些事情?
- 1、报文拆分
- 2、增加协议头
- 3、数据传输
- 4、路由和寻址
- 5、数据重组
问2:TCP协议为什么是3次握手4次挥手?
3次握手
- 1.客户端发送SYN,服务端准备好进行连接
- 2.服务端针对客户端的SYN给ACK,服务端发送SYN
- 3.客户端准备就绪,客户端发送ACK
4次分手
- 1.客户端发送断开请求FIN
- 2.服务端收到请求,发送ACK
- 3.服务端经过一个等待(数据处理完毕),确定可以关闭连接,发送FIN
- 4.客户端收到FIN,处理完自己的事情后发送ACK
问3:IPv4和Ipv6的区别?
- 地址不同:Ipv4 32位;Ipv6 128位 (地址空间、数目不同)。
- 地址分配不同:IPv4资源是稀缺的,分配需要竞争;IPv6可以给每个人分配很多地址。
- 寻址方式不同:IPv4通过子网掩码计算网络地址;IPv6有固定的计算方式划分网络。
- 地址解析策略不同:IPv4需要ARP;IPv6通过无状态的邻居发现。
- DNS不同:IPv4是A记录;IPv6是AAAA记录。
问4:TCP和UDP的区别?
- 传输:TCP面向流;UDP面向报文
- 连接:TCP有会话;UDP无会话
- 头部开销:TCP开销大;UDP开销小
- 可靠性:TCP保证数据可靠到达;UDP不保证数据可靠到达
- 场景:TCP适合保证数据完整到达场景,如:文件传输;UDP适合随时发送数据,不要求数据完整到达场景,如:广播通信
问5:TCP如何确保数据顺序? 为什么需要保证:TCP拆分封包的时候是顺序拆分的,但是包会无序的到达目的地。 方法1:利用(SEQ, ACK)编号确定封包的唯一性 方法2:利用滑动窗口存放没有排好序的封包,直到窗口中完全有序才发送ACK。如果有包丢失,就会一直不发ACK。 如果窗口大小是4,发送ABCD,如果只有BD到目的地,那么滑动窗口中是_B_D。
问6:如果网络延迟是30ms,那么Ping一个网站需要多少ms? 如果请求一个HTTPS协议的网站,TTFB至少ms?
问7:LRU是什么? 缓存置换:缓存满了后,每次创建新的缓存条目,就会删除旧的缓存条目。
问8:什么是https中间人攻击?
问9:NIO有什么优势?
- Reactive模型+非阻塞(减少线程切换)
- 内核级别拷贝内存到JVM(减少系统调用)
- 缓冲区增加数据处理的灵活性(clear/flip等操作)
- 处理I/O场景有明显性能优势
问10:一次DNS查询最快和最慢差距有多大?
- 最快命中本地浏览器缓存
- 最慢需要到服务商(ISP)-> Root服务器 -> 顶级域名服务器 -> 权威服务器 链路很长。 说明:DNS是分级缓存策略,每级缓存都非常强大。
问11:HTTP keep-alive和http2.0的多路复用有什么区别?
keep-alive
: 复用TCP连接发送请求,节省了握手时间,本质还是串行。http2.0多路复用
: 数据被打散成为小块,本质是并行。
问12:强制缓存和协商缓存的区别?
- 强制缓存强制执行,强制缓存不需要再发送请求给服务端。
- 协商缓存需要发送请求给服务端验数据版本,如果有新版本的数据就需要重新下发
Etag
、Last-Modified
数据,如果没有就返回304 Not Modified。
问13:正向代理和反向代理的区别?
- 正向代理图解:
- 反向代理图解:
- 功能:正向代理解决访问问题;反向代理解决负载均衡、安全防护问题。
- 代理:正向代理是客户端,服务器不知道真正用户是谁;反向代理是服务端,用户不知道真正服务器是谁。
- 安全性:客户端通过正向代理可以访问任意网站并隐藏自己,反向代理对外是公开的,访问者并不知道自己访问的是一个代理。
- 典型用途:正向代理是为局域网内的用户提供网络访问,反向代理是将局域网内的服务器供网络用户访问。