tcp和udp对比 适用场景和优化


区分tcp和udp,各适用于什么场景?


1) tcp是基于连接的,即发送数据之前需要先建立连接;udp不需要
2)tcp是可靠的,有重传\序号\确认机制\滑动窗口等保证顺序和正确;udp不能保证
3)tcp是一对一的;udp支持一对一,一对多,多对多
4)tcp比较耗费资源(头较大,确认机制等导致),udp则效率更高
5)tcp基于流模式,udp数据报模式 ;
关于流模式于数据报模式的理解:
TCP是面向连接的,也就是说,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的(劫持什么的不考虑),因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。流模式下,发送端的每次发送量和接收端每次接收量没有必然关系
而UDP是无连接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一 个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一 起,这样的数据是没有意义的。所以发送端每发送是一个数据报,而接收端每读也是一个数据报,这样发送次数一定等于读次数(不考虑丢失等)

综上,在对数据的完整性和准确性要求较高的情况下则需要使用tcp,如文件传输,邮件等;而对实时性和效率要求较高时则使用udp,如qq,视屏语音通话等


影响TCP性能的协议因素:


(1)TCP连接建立握手
(2)TCP慢启动拥塞控制;
(3)数据聚集的Nagle算法;
(4)用于捎带确认的TCP延迟确认机制。
(5)TIME_WAIT时延和端口耗尽。

1、2可通过长连接避免,3可使用TCP_NODELAY避免,4可通过调整内核栈参数避免,但调整需谨慎,5通常只在性能测试环境出现。

原文:https://blog.csdn.net/yusiguyuan/article/details/22921911 

面试题:如何实现udp的可靠性?

答案一:

  1. 最起码使用一对一的连接这个必须要说,因为UDP调用了connect之后是不同的效果 变为了一对一的了,这样才趋向称为TCP。
  2. 序列号是为了乱序存在的。
  3. 重传不仅仅有超时重传,还有错误重传,在保证正确的基础之上才能谈效率

答案二

  1. 一对一连接,并且增加序列号和结束标志即可,仅仅接收方通过序列号判断数据完整性,不需要接收方接收确认、发送方的超时和错误重传;接收方通过结束标志,返给发送方缺少的序列号,然后发送方重新发送即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值