计算机网络面试真题
- 1、 OSI 的七层模型分别是?各自的功能是什么?
- 2、 为什么需要三次握手?两次不行?
- 3、 为什么需要四次挥手?三次不行?
- 4、 TCP与UDP有哪些区别?各自应用场景?
- 5、 HTTP1.0,1.1,2.0 的版本区别
- 6、POST和GET有哪些区别?各自应用场景?
- 7、HTTP 哪些常用的状态码及使用场景?
- 8、HTTP状态码301和302的区别,都有哪些用途?
- 9、在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?
- 10、HTTP 如何实现长连接?在什么时候会超时?
- 11、TCP 如何保证有效传输及拥塞控制原理
- 12、IP地址有哪些分类?
- 13、GET请求中URL编码的意义
- 14、什么是SQL 注入?举个例子?
- 15、谈一谈 XSS 攻击,举个例子?
- 16、讲一下网络五层模型,每一层的职责?
- 17、 简单说下 HTTPS 和 HTTP 的区别
- 18、对称加密与非对称加密的区别
- 19、简单说下每一层对应的网络协议有哪些?
- 20、ARP 协议的工作原理?
- 21、TCP 的主要特点是什么?
- 22、UDP 的主要特点是什么?
- 23、TCP 和 UDP 分别对应的常见应用层协议有哪些?
- 24、为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?
- 25、保活计时器的作用?
- 26、TCP 协议是如何保证可靠传输的?
- 27、谈谈你对停止等待协议的理解?
- 28、谈谈你对 ARQ 协议的理解?
- 29、谈谈你对滑动窗口的了解?
- 30、谈下你对流量控制的理解?
- 31、谈下你对 TCP 拥塞控制的理解?使用了哪些算法?
- 32、什么是粘包?
- 33、TCP 黏包是怎么产生的?
- 34、怎么解决拆包和粘包?
- 35、forward 和 redirect 的区别?
- 36、HTTP 方法有哪些?
- 37、在浏览器中输入 URL 地址到显示主页的过程?
- 38、DNS 的解析过程?
- 39、谈谈你对域名缓存的了解?
- 40、谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?
- 41、HTTPS 的工作过程?
- 42、HTTP 和 HTTPS 的区别?
- 43、HTTPS 的优缺点?
- 44、什么是数字签名?
- 45、什么是数字证书?
- 46、Cookie 和 Session 有什么区别?
- 47、UDP 如何实现可靠传输?
- 48、Keep-Alive 和非 Keep-Alive 有什么区别?
- 49、HTTP 长连接短连接使用场景是什么
- 50、DNS 为什么用 UDP
- 51、简单说下怎么实现 DNS 劫持
- 52、URI和 URL之间的区别
- 53、TIME_WAIT 状态会导致什么问题,怎么解决
- 54、有很多 TIME-WAIT 状态如何解决
- 55、简单说下 SYN FLOOD 是什么
- 56、CMP 有哪些应用?
- 57、TCP 最大连接数限制
- 58、IP地址和MAC地址有什么区别?各自的用处?
- 59、IPV4 地址不够如何解决
针对计算机网络的面试八股文所做的总结,同时也可以对自己所学的知识有个总结
1、 OSI 的七层模型分别是?各自的功能是什么?
简要概括:
- 物理层:底层数据传输,如网线;网卡标准。
- 数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。
- 网络层:定义IP编址,定义路由功能;如不同设备的数据转发。
- 传输层:端到端传输数据的基本功能;如 TCP、UDP。
- 会话层:控制应用程序之间会话能力;如不同软件数据分发给不同软件。
- 表示层:数据格式标识,基本压缩加密功能。
- 应用层:各种应用软件,包括 Web 应用
说明:
- 在四层,既传输层数据被称作段(Segments);
- 三层网络层数据被称做包(Packages);
- 二层数据链路层时数据被称为帧(Frames);
- 一层物理层时数据被称为比特流(Bits)。
总结:
- 网络七层模型是一个标准,而非实现。
- 网络四层模型是一个实现的应用模型。
- 网络四层模型由七层模型简化合并而来。
2、 为什么需要三次握手?两次不行?
【三次握手】
当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三三次握手的时候,我想很多人会这样回答:
首先很多人会先讲下握手的过程:
1、第一次握手:客户端给服务器发送一个 SYN 报文。
2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。
3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。
4、服务器收到 ACK 报文之后,三次握手建立完成。
作用是为了确认双方的接收与发送能力是否正常。
这里顺便解释一下为啥只有三次握手才能确认双方的接受与发送能力是否正常,而两次却不可以:
第一次握手: 客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手: 服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
第三次握手: 客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
因此,需要三次握手才能确认双方的接收与发送能力是否正常。
这样回答其实也是可以的,但是,这个过程的我们应该要描述的更详细一点,因为三次握手的过程中,双方是由很多状态的改变的,而这些状态,也是面试官可能会问的点。所以在回答三次握手的时候,我们应该要描述的详细一点,而且描述的详细一点意味着可以扯久一点。加分的描述我应该是这样:
刚开始客户端处于 closed 的状态,服务端处于 listen 状态。然后
1、第一次握手: 客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN©。此时客户端处于 SYN_Send 状态。
2、第二次握手: 服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_RCVD 的状态。
3、第三次握手: 客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 established 状态。
4、服务器收到 ACK 报文之后,也处于 established 状态,此时,双方以建立起了链接