前端网络基础面试题
本文总结了前端网络基础相关常见的面试题,包括 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 Required | Content-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协议版本。 |