头条面试题

本文围绕TCP协议和HTTP缓存展开。介绍了TCP连接、丢包处理及拥塞控制机制,如慢开始、拥塞避免、快重传和快恢复算法。还阐述了HTTP缓存,包括强缓存和协商缓存,以及服务端更新强制缓存的方法,最后提及了websocket。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP连接
一个包丢了怎么处理

tcp协议关于发送数据包:
慢启动(slow start)机制,开始时发送较慢,然后根据丢包情况判断加快还是降低。
默认情况下,接受方每接受到两个tcp数据包就要发送一个acknowledgement 简称 ACK
ACK:
1.期待要收到的下一个数据包的编号
2.接收方的接受窗口剩余容量

握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。 发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发 送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

丢了包:如果发送方发现受到三个重复的ACK或者超时了还没有收到任何ACK,就会确认丢包,从而再次发送这个包。
在这里插入图片描述

拥塞控制

作用于网络,防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用方法:(1)慢开始,拥塞避免(2)快重传,快恢复。

慢开始:

开始:cwnd的大小被设置为最大报文段MSS的数值
发送方发送一个cwnd(congestion window)
收到确认后,cwnd数量加倍(1,2,4,8…)

但是:为了防止cwnd增长过大引起网络拥塞,设置一个慢开始门限ssthresh状态变量 ,用法如下

 当 cwnd < ssthresh 时,使用上述的慢开始算法。

  当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。

  当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。

一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

拥塞避免算法:每经过一个往返时间RTT 就把发送方的cwnd+1而不是加倍。

无论是在慢开始还是拥塞避免,发送方判断出现拥塞:将ssthresh设置为出现拥塞时发送方窗口值的一半但不小于2,然后将cwnd重设为1,执行慢开始算法。
在这里插入图片描述

快重传算法

首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。

快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。

发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必继续等待M3设置的重传计时器到期。由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。

与快重传配合使用的还有快恢复算法,其过程有以下两个要点:

(1)当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。
(2)由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
在这里插入图片描述

HTTP缓存? 如果服务端想更新一个强制缓存,有什么解决方案?

http缓存有:
强缓存:浏览器直接从本地缓存中获取数据,不与服务器进行交互。
协商缓存:浏览器发送请求到服务器,服务器判定是否可使用本地缓存。
联系与区别:两种缓存方式最终使用的都是本地缓存;前者无需与服务器交互,后者需要。
在这里插入图片描述
强制刷新:
这会使浏览器重新去服务器请求资源再加载。

IE强制刷新:CTRL+F5。

FireFox强制刷新:CTRL+F5,CTRL+SHIFT+R

Chrome强制刷新:CTRL+SHIFT+R

websocket是什么

参考链接:http://www.ruanyifeng.com/blog/2017/06/tcp-protocol.html
https://blog.youkuaiyun.com/yechaodechuntian/article/details/25429143

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值