C/C++教程

utp与tcp

本文主要是介绍utp与tcp,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

tcp与udp的区别

1.tcp基于连接,发送数据前要先建立连接。udp不需要

2.tcp是可靠的,有重传/序号/确定机制/滑动窗口保证顺序和正确。udp不能保证

3.tcp是一对一的。udp支持一对一,一对多,多对多

4.tcp比较耗费资源。udp效率更高

5.tcp基于流模式,udp基于数据报模式

tcp与udp的使用场景

对数据完整性和准确性要求较高时使用tcp

例如:文件传输,邮件

而对实时性和效率要求较高时使用udp

例如:视频通话,直播

tcp与udp的优缺点

tcp优点:

  • 可靠稳定:tcp传输数据前后有三次握手建立连接,在传输数据时,有确定,窗口,重传,拥堵控制等,在数据传完后,还会断开连接节约系统资源

tcp缺点:

  • 速度慢,效率低,占用系统的资源率高:建立连接,确认机制,重传机制,拥堵机制都会消耗大量时间,有这么多机制,在实现时容易被利用和攻击

udp优点:

  • 速度快,比tcp安全:没有建立连接,确认机制,重传机制,拥堵机制等,是一个无状态的传输协议,没有这些机制,udp较tcp被攻击者利用的漏洞就少很多,但也会被其他攻击

udp缺点:

  • 不可靠不稳定,没有tcp的机制,在网络质量不好时可能会丢包

udp为什么会丢包,怎么解决

1.发送频率太快

虽然每一个包的大小都没超过标准,但频率太快,连续发送中间也没sleep,可能会丢包

可以通过设置socket接收缓冲解决

2.包过大

包的大小超过限制,可能会超过接收者的缓存,导致丢包

可以通过设置socket接收缓冲解决,或用send方法把大包切割为小包,可以多次切割

TCP是如何确保可靠传输的

  • 连接管理:有三次握手,四次挥手
  • 校验和:防止数据被破坏,发送方在发送数据前计算检验和,接收方收到收据后以同样的方式计算,然后进行对比,(两方时要其中一方取反的)如果不一致,传输有误,如果一致,也不一定传输成功
  • 确认应答:防止丢包,tcp传输时将每个字节的数据都进行了编号(序列号(不会导致分片乱序)),每次接收方接收到数据后,会给传输方进行确认应答,发送ACK报文,里面包括对应的确认序列号,告诉发送方收到了哪些数据,下一次的数据从哪发
  • 超时重传:防止丢包,发送方发送数据,迟迟没有得到传输方的应答(ACK报文),这是就会重传,两种原因(没接收到,接收到了但没发出去),重传时发送方发送数据,接收方接收,如果已经有了就直接丢弃,然后再确认应答
  • 流量控制:(窗口滑动):tcp协议的报头信息中,有一个16位字段的窗口大小,数字越大,证明我们接收方能接收的空间越大,接收端在确认应答时会写入窗口大小,发送方根据应答的窗口大小的改变来改变自己的发送速度,如果窗口大小为0,发送方停止发送,并定期向接收端发送窗口探测数据段,让接收端把窗口大小发送给发送方
  • 拥堵控制:(拥堵窗口):tcp引入慢启动,防止一开始数据传输过多导致丢包,发送方刚开始定义拥堵窗口为1,每次收到ACK应答时,拥堵窗口加1,然后在发送数据前将拥堵窗口与接收端反馈的窗口大小对比取小的作为实际发送窗口。最开始拥堵窗口是指数增长,超过阈值后现性增长,一旦造成网络拥堵(发生了超时重传),拥堵窗口变成1。 

 

这篇关于utp与tcp的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!