跳到主内容

前端网络基础面试题

本文总结了前端网络基础相关常见的面试题,包括 TCP 和 UDP 的区别,TCP 如何保证传输的可靠性,TCP 拥塞控制算法等问题

TCP 和 UDP 的区别

  • TCP 面向连接;UDP 无连接
  • TCP 保证数据的可靠传输,数据传送无差错,不丢失,无重复,按序到达;UDP 不保证可靠交付
  • TCP 连接一对一;UDP 支持更广泛
  • UDP 实时性好,效率高,适用场景:短消息传输,大量客户端,对数据安全性要求不高但实时性要求高
  • TCP 面向数据流;UDP 面向数据报

TCP 如何保证数据传输的可靠性?

1. 序列号,ACK 信号:发送方按照顺序给要发送的数据包的每个字节都标上编号。接收方接收到发送方的数据包之后,回传一个 ACK 信号,标识下一个需求的数据包初始字节编号。

2. 超时重发:在等待接收方回传的 ACK 信号超时后,发送方重发数据包。一旦开始重传,下一次等待的时间间隔指数增长,重发一定次数后还是收不到 ACK 信号,将强制终止连接。

3. TCP 的连接管理:建立连接的三次握手和断开连接的四次挥手。

4. 以段为单位发送数据包:在建立 TCP 连接的同时,两端协商发送数据包的单位,称为“最大消息长度”:MSS。 【TCP 数据(MSS 字节)】【TCP 首部(20 字节)】【IP 首部(20 字节)】

5. 滑动窗口:以段为单位发送数据包,每发送一个数据包需要等待一个 ACK 信号,当数据包往返时间越长效率越低。滑动窗口中窗口前端为已发送但为收到 ACK 的数据,后端为待发送数据。发送端一次发送多个数据,接收端回传收到的连续数据的 ACK 信号,缓存缺失数据之后的数据包(保持顺序)。发送端当收到 ACK 信号时,窗口向前依次移动,直到遇到有数据未确认时停止。一段时间后启动超时重传,接收端若收到缺失数据,则和缓存数据一起发送 ACK 信号,否则,抛弃缓存数据。

6. 流量控制:TCP 首部有一个字段来通知窗口的大小,接收端通过设置来主动控制传输流量。

7. 拥塞控制:发送端通过拥塞窗口主动控制传输流量。慢启动:防止双方通信刚开始就传送大量数据包,发送端拥塞窗口初始设置为 1MSS,每接受一个 ACK 信号,窗口扩大为两倍。发送数据时,取拥塞窗口和滑动窗口的较小值。同时设定一个慢启动阈值,当拥塞窗口大小超过阈值时,改为线性增长,直到网络拥塞。拥塞时将慢启动阈值设置为当前窗口的的一半,并将拥塞窗口的值设置为 1,然后再次重复操作。

TCP 拥塞控制算法

TCP 拥塞控制是传输控制协议避免网络拥塞的算法。共有四种,分别是

慢开始

开始传输时,发送窗口(指数据大小)由小到大逐渐增大到拥塞窗口的数值。

拥塞避免

拥塞避免算法和慢启动算法是两个不同的算法,但是他们都是为了解决拥塞,在实际中这两个算法通常是在一起实现的。相比于慢启动算法拥塞避免算法多维护了一个慢启动阈值 ssthresh

当 cwnd < ssthresh 时,拥塞窗口使用慢启动算法,按指数级增长。 当 cwnd > ssthresh 时,拥塞窗口使用拥塞避免算法,按线性增长。

快重传

数据传输时(数据被分成报文,每个报文都有个序号),中间的一部分丢失接收方没收到,接收方连续接到后面的数据,则发回对丢失前的数据的重复确认,这样发送方就知道有部分数据丢失了,于是从丢失出重传数据。

快恢复

快恢复是与快重传配合的算法,在发生数据丢失时,发送方收到接收方发回的三个重复确认信息时,就把每次传输的数据量减为原来的一半,拥塞窗口也修改为这个值,然后又开始拥塞避免的算法。

快重传对性能的影响最大,因为在 RTO 期间不能传输任何数据,而且拥塞窗口会急剧减小。所以应该尽量避免超时重传。

HTTP 常见的错误状态码

客户端错误

状态码说明
400 Bad Request服务器未能理解请求。
401 Unauthorized被请求的页面需要用户名和密码。
402 Payment Required此代码尚无法使用。
403 Forbidden对被请求页面的访问被禁止。
404 Not Found服务器无法找到被请求的页面。
405 Method Not Allowed请求中指定的方法不被允许。
406 Not Acceptable服务器生成的响应无法被客户端所接受。
407 Proxy Authentication Required用户必须首先使用代理服务器进行验证,这样请求才会被处理。
408 Request Timeout请求超出了服务器的等待时间。
409 Conflict由于冲突,请求无法被完成。
410 Gone被请求的页面不可用。
411 Length RequiredContent-Length" 未被定义。如果无此内容,服务器不会接受请求。
412 Precondition Failed请求中的前提条件被服务器评估为失败。
413 Request Entity Too Large由于所请求的实体的太大,服务器不会接受请求。
414 Request-url Too Long由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。
415 Unsupported Media Type由于媒介类型不被支持,服务器不会接受请求。
416  服务器不能满足客户在请求中指定的Range头。
417 Expectation Failed

服务端错误

状态码说明
500 Internal Server Error请求未完成。服务器遇到不可预知的情况。
501 Not Implemented请求未完成。服务器不支持所请求的功能。
502 Bad Gateway请求未完成。服务器从上游服务器收到一个无效的响应。
503 Service Unavailable请求未完成。服务器临时过载或当机。
504 Gateway Timeout网关超时。
505 HTTP Version Not Supported服务器不支持请求中指明的HTTP协议版本。