最近在面试互联网后台开发的岗位,总结了计算机网络这一块的问题 ,题目来源于网友的面经总结,基本上网罗了所有可能遇到的问题,如果有新的题型或者参考答案有误,请及时告知以便修改。此外就是建议去看谢希仁的《计算机网络》,毕竟每个人的总结风格不一样,参考答案仅是适用于我自己的一个总结,如果想更详细的记忆的话,参考此书就可以了,也不用全看,只看TCP传输层那一章就行。
1. TCP和UDP的区别
- TCP是面向连接的,传输前需要建立连接。UDP传输前不需要建立连接。
- TCP仅支持一对一,UDP支持点对点,一对多,多对一。
- TCP面向字节流,UDP面向数据报。
- TCP是可靠的,UDP不可靠。
- TCP首部开销大于UDP,TCP首部开销最少20字节,UDP只需要8字节。
2. UDP如何实现可靠性
参考TCP的可靠性,在UDP的应用层使用三次握手机制以及四次挥手机制,此外,引入停止等待,超时重传,滑动窗口机制。
3. TCP的可靠性如何保证
可靠性依赖停止等待协议、滑动窗口、超时重传、拥塞控制等。
4. TCP的发送算法
TCP使用Nagle算法确定发送时机问题,Nagle算法描述:发送队列收到报文后,先发送一字节,收到确认后,再将其余字节发送出去,此外,Nagle算法还规定当发送队列超出MSS一半则发送。
5. TCP重传算法
TCP使用修正的Karn算法计算重传时间,该算法基于karn算法计算加权平均往返时间。
6. TCP拥塞控制算法
拥塞控制算法有如下四个,需要知道具体含义,此部分内容可以参考谢希仁的《计算机网络》
- 慢启动:保持拥塞窗口指数增长,每次扩大一倍。
- 拥塞避免:保持拥塞窗口线性增长。
- 快重传:接收方每收到无序报文需要尽早重传重复确认,发送方收到三个连续的重复确认则无需等待重传定时器到期直接重传。
- 快恢复:发送方收到三个连续的确认报文,慢开始门限减半,拥塞窗口减半,同时执行拥塞避免算法。
7. 三次握手原理图
需要能够手动画出,并知道涉及的状态。
8. 四次挥手原理图
能够手动画出来,并且其中涉及的状态。
9. TCP协议状态机
10. 为什么需要三次握手而不是两次或者四次?
两次只能确保单向联通,且server的回复有可能丢失,三次握手可确保双向联通。
第二次的SYN和ACK合二为一,减少开销。
11. 为什么是四次挥手而不是三次?
TCP是双向连接,client发送FIN报文仅表示关闭发送,但还能够接收。四次挥手可以保证双向链路正常关闭。
12. TIME_WAIT状态过多及其危害
占用系统资源。
解决方案:快速回收和重用那些TIME_WAIT
的资源,具体措施包括:
- net.ipv4.tcp_tw_reuse
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
- net.ipv4.tcp_tw_recycle
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
- net.ipv4.tcp_fin_timeout
这个时间可以减少在异常情况下服务器从FIN-WAIT-2转到TIME_WAIT的时间。
13. 为什么会有TIME_WAIT状态
- 防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)
- 可靠的关闭
TCP
连接。在主动关闭方发送的最后一个ack(fin)
,有可能丢失,这时被动方会重新发fin
, 如果这时主动方处于CLOSED
状态 ,就会响应rst
而不是ack
。所以主动方要处于TIME_WAIT
状态,而不能是CLOSED
。另外这么设计TIME_WAIT
会定时的回收资源,并不会占用很大资源的,除非短时间内接受大量请求或者受到攻击。
14. TCP定时器有哪些
- 重传定时器,使用于当希望收到另一端的确认。
- 坚持定时器,使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口
- 保活定时器,检测到一个空闲连接的另一端何时崩溃或重启
- 2MSL定时器,测量一个连接处于TIME_WAIT状态的时间
15. TCP粘包问题如何解决
- 设置固定长度消息,不足填充0。
- 设置消息头和消息体,消息头里包含消息体长度。
- 设置消息边界,类似http的/n/n。
16. 什么是长连接、短连接
- 长连接,数据传输完成后保持连接,后续传输可以复用连接。
- 短连接,数据传输完成后关闭连接,后续每次传输都要新建连接。
17. 解释ARQ和连续ARQ
ARQ协议,即自动重传请求(Automatic Repeat-reQuest)。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。
连续ARQ协议:由于停止等待ARQ协议信道利用率太低,所以需要使用连续ARQ协议来进行改善。这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。接收方一般都是采用累积确认的方式。也就是说接收方不必对收到的分组逐个发送确认。而是在收到几个分组后,对按序到达的最后一个分组发送确认。如果收到了这个分组确认信息,则表示到这个分组为止的所有分组都已经正确接收到了。
18. TCP首部字段有哪些
19. TCP扩展选项有哪些
- 最大报文段长度MSS
- 窗口扩大选项
- 选择确认
- 时间戳
20. Accept发生在三次握手哪个阶段
三次握手之后。
21. MSS在三次握手中第几次确定
前两次沟通,第三次确认。
22. TCP如何判断拥塞发生
没有收到应当到达的确认报文。
23. 阐述TCP/IP五层模型
应用层 >> 传输层 >> 网络成 >> 数据链路层 >> 物理层
24. Http和https区别(参考答案,非专业)
- http采用明文传输,https使用ssl加密传输。
- http使用80端口,https使用443端口
25. 网页访问一个URL发生了什么
- 获取URL中连接地址。
- 如果是域名则向DNS域名服务器查询地址IP。
- 建立TCP连接。
- 发送HTTP请求。
- 收到相应
26. http状态码解释
- 1xx表示通知信息。
- 2xx表示成功。
- 3xx表示重定向。
- 4xx表示客户端错误。
- 5xx表示服务器端错误。
常见状态码:
- 100:继续 客户端应当继续发送请求。
- 200:请求成功,结果是创建了新资源,新创建资源的URI可在响应的实体中得到。
-
202:请求被接受,但处理尚未完成 处理方式:阻塞等待
-
204:服务器端已经实现了请求,但是没有返回新的信 息。
-
300:存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
-
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL
-
302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL
-
304:请求的资源未更新 处理方式:丢弃
-
400:非法请求 处理方式:丢弃
-
401:未授权 处理方式:丢弃
-
403:禁止 处理方式:丢弃
-
404:没有找到 处理方式:丢弃
-
500:服务器内部错误 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在的源代码出现错误时出现。
-
501:服务器无法识别 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
-
502:错误网关 作为网关或者工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
-
503:服务出错 由于临时的维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
参考资料:
1. 《计算机网络》谢希仁。
2. TCP详解 https://www.cnblogs.com/buxiangxin/p/8336022.html
3. 常用的HTTP状态码 常用的HTTP状态码_http错误码532_mawenqi0729的博客-CSDN博客