Author:
zhaohe
Reference From:小黄大王
Time:2025-8-28 16:53
状态码500和503的区别是什么
- 500 Internal Server Error表示服务器编程语言执行代码出错。
- 503 Service Unavailable 表示服务器暂时不可用,比如服务器现在正在处于超负荷状态或者停机维护状态必须要抛弃一些用户的请求,那么就会给被抛弃的用户返回一个503状态码。
- 504 GateWay Timeout 表示网关或者代理无法在规定的时间内获得请求的响应结果。
在TCP协议的三次握手之后如何确保消息的可靠性
- 分块和排序:TCP为了保证消息不丢失,在每一个发送的数据段中都会分配一个序列号,有了序列号就可以根据序列号进行排序和去重。
- 重传机制:主要是解决数据丢失的问题。超时重传(某个时间内没有收到ACK应答)、快速重传(超时之前收到了三个相同的ACK(比如ACK=2)应答,这表明接收端没有收到ACK=2这个数据包,此时发送端看到接收端发了三个ACK=2,那么发送端就不会继续等待超过超时时间而是会立刻重新发送ACK=2这个数据包,这就是快速重传。
选择性快速重传:发送方在快速重传发生的情况下会面临一个问题,发送方并不知道ACK=2这个数据包之后的数据包是否成功发送到接收方了。所以发送方是只针对ACK=2这个数据包重发呢?还是针对ACK=2及其之后的所有数据包全部重新发送呢?这就需要用到SACK了,具体是怎么做的呢,就是在TCP的头部加一个字段:SACK,这个字段表示哪些数据已经接收到了,无需重复发送。具体可以看下面的图片(from 知乎):
- 滑动窗口:传统的TCP是每发送一个数据包都需要得到一个ACK应答才能继续发送后面的数据包,这种情况对于数据的传输效率是比较低的,比如网络的延迟非常大,这样一个TTL(指一个数据包发送请求到接收到应答为止所花费的时间也就是一来一回的耗时)就占用很长的时间。这样的方式显然是不合理的,所以为了解决这个问题就引出的滑动窗口这一概念。窗口就是操作系统开辟的一端缓冲区,窗口的大小也就是缓冲区的大小。窗口的大小代表无需等待应答而可以继续发送数据包的最大值。 发送方发送的数据都会暂时存储在本地的缓冲中,等得接收到某个应答之后就从本地的缓存中请求发送的数据帧,如果一直没有得到某个数据包的ACK应答就会触发重传机制。
- 拥塞控制:流量控制是为了避免发送方的数据占满接收方的缓存。但是并不知道网络中发生了什么。如果出现了网络拥堵,那么继续发送数据包只会让网络更加拥堵。拥塞控制是为了避免发送的数据填满整个网络。为了调节发送方的发送数据量的大小引入了一个拥塞窗口的概念,那么他和原来的滑动窗口有什么关系呢?关系如下:发送窗口的大小=Min(拥塞窗口,滑动窗口)。只要网络中出现了拥塞,那么拥塞窗口就会增大,如果没有出现拥塞那么拥塞窗口就会慢慢增大。那么怎么判断网络中是否出现了拥塞呢?如果在规定的时间内没有收到ACK应答我们就认为网络出现了拥塞,同时也会触发超时重传。拥塞控制的算法主要有四个:慢启动、拥塞避免、拥塞发生、快速恢复,具体如下图所示:
慢启动是指数形式增加拥塞窗口的大小的,拥塞发生阶段是线性增加拥塞窗口的大小的,其实这两个阶段都是在不断的增加窗口的大小。按照这样的增长趋势发展下去总会有一个阶段出现拥塞。当发生拥塞的时候如果是超时重传那么就会直接将拥塞窗口的大小设置为1,并且更新慢启动的阈值为当前拥塞窗口的二分之一,然后继续进行慢启动的过程。具体如下图:
当然上面的方式弊端也很大,相当于进行了一个急刹车。因此如果在阻塞的时候发生了快速重传,那么就会进入另外一个阶段。这个阶段会将拥塞窗口设置为原来的二分之一(之后再加三,因为还有三个ACK应答,每次收到一个应答就会+1),这个过程就是快速恢复。具体如下图:
以上内容来自知乎:zhuanlan.zhihu.com/p/381923700 特此引用。
先写到这里,未完待续...