TCP协议:
tcp协议(传输控制协议)是一种面向连接的,可靠的传输协议。它通过提供一种可靠的字节流,保证数据完整,无损,并且按照顺序到达。在传输过程中,它还尽量不断地测试网络负载,进而调整传输速度,防止网络过载 。此外,它还试图将数据按照指定顺序发送。
这也就引出了目前tcp协议的第一个问题,那就是队头阻塞问题。
TCP协议队头阻塞问题
如果现在要发送三个编号分别为1 2 3的数据包,在接收数据包的时候,如果目前接受到了数据包1,而数据包2在传输过程中丢失,但在接收端还是会一直等待数据包2,哪怕数据包3到达了也不能被顺利接收,此时便陷入了无限等待。
TCP协议握手复杂,连接建立慢问题
众所周知,在客户端和服务器建立连接的过程中,需要经历三次握手和四次挥手,这些完成之后,连接才能顺利建立。但如果二者距离过远,那么三次握手便会消耗1.5个Rtt,甚至是300到400毫秒,这是较为缓慢的。
解决办法:
就目前来说,tcp协议是没有什么很好的解决办法的。现在较为有效的处理方法则是淘汰tcp协议,进而制定一种新的协议,也就是HTTP 3.0中的QUIC协议。(tcp协议为http 2.0)
QUIC协议:
quic协议是基于udp(用户数据报协议)和diffie-hellman算法建立的一种低时延传输协议。
它于2012年开始实施部署,到2021年发行QUIC标准版RFC9000
QUIC协议的优势:
1.QUIC协议在初次连接时便可交换加密秘钥,进而建立连接,所以相较tcp协议来说,它的连接建立要快的多。
2.QUIC协议采用多路复用技术,QUIC 可以复用多个 stream(流),并且单个流可以保证有序交付,但多个流之间可能乱序。一个流中的丢包不会影响其他流的数据传输,彻底解决了 TCP 协议中的队头阻塞问题。
3.连接迁移:TCP 连接是由四元组(源 IP、源端口、目的 IP、目的端口)标识的,当其中任何一个元素发生变化时,需要重新建立连接。QUIC 基于连接 ID 唯一识别连接,当用户的地址发生变化时,如从 Wi-Fi 切换到 4G 网络,只要连接 ID 不变,QUIC 连接依然维持,上层业务逻辑不受影响,无需重连。
4.拥塞控制:支持多种拥塞控制算法,如 TCP 协议中的 Cubic 拥塞控制算法,同时也支持 Reno、PCC、BBR、CubicBytes 等其他算法,增加了改造的灵活性。并且在应用层也对拥塞控制做了大量优化,拥有完善的数据包同步机制,保障了通信的稳定性和传输效率。
5. 安全性高:在传输层中内置了加密功能,默认支持安全的 TLS 1.3,对整个负载(包括头部)进行验证,端到端完全安全,相比 TCP 在安全性方面有很大提升。
6. 前向纠错:具有前向纠错能力,能够在一定程度上纠正传输过程中出现的错误,减少数据重传的次数,提高传输效率。
尽管QUIC协议已经很棒了,但是他也还存在一些没有补齐的短板:
a.应用迁移困难:将应用从基于 TCP 的 HTTP/2 迁移到基于 QUIC 的 HTTP/3 需要对整个应用层和传输层进行改造,对于一些资源有限的小厂商来说,迁移成本较高,面临较大挑战。
b. 采用受限:虽然 QUIC 有很多优势,但目前其采用仍然受到限制。除了一些大型科技公司,很多企业和服务提供商尚未广泛采用 QUIC 协议,导致其在实际应用中的覆盖范围有限。
c.安全检查问题:网络防火墙无法解密 QUIC 流量来检查数据包,可能导致潜在的恶意流量无法被标准安全功能检测出来,存在一定的安全风险。