TCP 和 UDP 特点和区别
区别
- TCP 提供可靠交付,通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。UDP 不需要建立连接,不保证不丢失,不保证按顺序到达
- TCP 是面向字节流的,UDP 面向报文
- TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。 解决了包丢失和超时重传
- TCP 是一个有状态服务。它里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行。而 UDP 则是无状态服务。 通俗地说是没脑子的,天真无邪的,发出去就发出去了
- UDP 适用于 直播、游戏等 多对多一对多、实时性要求高的地方
TCP 特点
顺序问题,丢包问题,连接维护,流量控制,拥塞控制
顺序问题
原理:滑动窗口
为了保证顺序性,每一个包都有一个 ID。在建立连接的时候,会商定起始的 ID 是什么,然后按照 ID 一个个发送。为了保证不丢包,对于发送的包都要进行应答,但是这个应答也不是一个一个来的,而是会应答某个之前的 ID,表示都收到了,这种模式称为 累计应答
为了记录所有发送的包和接收的包,TCP 也需要发送端和接收端分别都有缓存来保存这些记录。
发送端的缓存里是按照包的 ID 一个个排列,根据处理的情况分成四个部分
- 发送并确认
- 发送没确认
- 等待发送
- 不发送
接收端
- 接受未确认
- 接收未确认
- 无法接收
丢包问题
原理:滑动窗口
超时重试:
即对每一个发送了,但是没有 ACK 的包,都有设一个定时器,超过了一定的时间,就重新尝试。但是这个超时的时间如何评估呢?这个时间不宜过短,时间必须大于往返时间 RTT,否则会引起不必要的重传。也不宜过长,这样超时时间变长,访问就变慢了。
TCP 的策略:超时间隔加倍。每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送。
快速重传的机制:
当接收方收到一个序号大于下一个所期望的报文段时,就检测到了数据流中的一个间格,于是发送三个冗余的 ACK,客户端收到后,就在定时器过期之前,重传丢失的报文段。
比如:接收方发现 6、8、9 都已经接收了,就是 7 没来,那肯定是丢了,于是发送三个 6 的 ACK,要求下一个是 7。客户端收到 3 个 6,就会发现 7 的确又丢了,不等超时,马上重发。
流量控制
原理:滑动窗口
发送方会定时发送窗口探测数据包,看是否有机会调整窗口的大小。当接收方比较慢的时候,要防止低能窗口综合征,别空出一个字节来就赶快告诉发送方,然后马上又填满了,可以当窗口太小的时候,不更新窗口,直到达到一定大小,或者缓冲区一半为空,才更新窗口。
拥塞控制
原理:拥塞窗口
前面的滑动窗口 rwnd 是怕发送方把接收方缓存塞满,而拥塞窗口 cwnd,是怕把网络塞满。
作用:包丢失、超时重传
慢启动
- 第一阶段:指数增长。一条 TCP 连接开始,cwnd 设置为一个报文段,一次只能发送一个;当收到这一个确认的时候,cwnd 加一,于是一次能够发送两个;当这两个的确认到来的时候,每个确认 cwnd 加一,两个确认 cwnd 加二,于是一次能够发送四个;当这四个的确认到来的时候,每个确认 cwnd 加一,四个确认 cwnd 加四,于是一次能够发送八个。
- 有一个值 ssthresh 为 65535 个字节,当超过这个值的时候就要慢下来
- 第二阶段:线性增长。每收到一个确认后,cwnd 增加 1/cwnd,我们接着上面的过程来,一次发送八个,当八个确认到来的时候,每个确认增加 1/8,八个确认一共 cwnd 增加 1,于是一次能够发送九个,变成了线性增长。
- 当触发拥塞(发生丢包时)会超时重传。
- 此时按照 又按照 指数增长方式,从 2 的 0 次方开始发包
- 此时也可以使用 快速重传的机制
拥塞控制的缺陷
- 丢包并不代表着通道满了,也可能是管子本来就漏水。例如公网上带宽不满也会丢包,这个时候就认为拥塞其实是不对的。
- TCP 的拥塞控制要等到将中间设备都填充满了,才发生丢包,从而降低速度,这时候已经晚了。其实 TCP 只要填满管道就可以了,不应该接着填,直到连缓存也填满。
- TCP BBR 拥塞算法 解决了以上问题:它企图找到一个平衡点,就是通过不断的加快发送速度,将管道填满,但是不要填满中间设备的缓存,因为这样时延会增加,在这个平衡点可以很好的达到高带宽和低时延的平衡。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Java 乐观锁 vs 悲观锁
下一篇: MyBatis 介绍和使用
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论