TCP/UDP

TCP是一种面向连接、可靠的传输协议,提供校验和、确认应答、拥塞控制等机制确保数据可靠性。UDP则是无连接、高效但不可靠的协议,适用于对实时性要求高、对数据丢失不敏感的场景。TCP的拥塞控制包括慢开始、拥塞避免、快重传和快恢复策略。此外,TCP通过滑动窗口、延迟应答和捎带应答提高传输性能,同时通过序列号和确认应答解决丢包问题。

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

TCP与UDP

TCP: 一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP:一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

  UDP具有较好的实时性 适用场景:短消息,多客户端,对信息可靠性要求不高,对效率要求高。每一条TCP是点对点的,UDP支持更广泛 一对一,多对一,多对多。TCP对资源要求较高,UDP对资源要求较少。TCP面向数据流, UDP面向数据报。

区别:

  • 面向连接VS无连接
      TCP建立一个连接需要3次握手IP数据包,断开连接需要4次握手。另外断开连接时发起方可能进入TIME_WAIT状态,在此状态下连接(端口)无法被释放。UDP不需要建立连接,可以直接发起。
  • 可靠VS不可靠
    TCP利用握手、ACK和重传机制,UDP没有。
    1、校验和(校验数据是否损坏)
    2、定时器(分组丢失则重传)
    3、序列号(用于检测丢失的分组和重复的分组)
    4、确认应答ACK(接收方告知发送方正确接收分组以及期望的下一个分组)
    5、否定确认(接收方通知发送方未被正确接收的分组)
    6、窗口和流水线(用于增加信道的吞吐量)。(窗口大小:无需等待确认应答而可以继续发送数据的最大值)
  • 有序性
    TCP利用seq序列号对包进行排序,UDP没有。
  • 面向字节流vs面向报文
    1、面向报文
      面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。(一个upd的最大报文长度2^16-1-20-8,20是ip报文头,8是udp报文头)
    2、面向字节流
      面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。如果应用程序一次只发送一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去。
  • TCP有流量控制,UDP没有
  • TCP的头部20bytes,UDP8byres

TCP应用场景:
  效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。

UDP应用场景:
  效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。

补充:视频使用TCP还是UDP
 1. 网页上的视频是基于HTTP/HTTPS,传输层是TCP
 2. QQ视频聊天等是基于UDP
 3. 甚至有的应用使用p2p协议,传输层应该也是TCP
 4. 通过http进行流化视频有很多种方法
 5. 传输视频还有很多其他的应用层协议

  一方面,在网页上看视频可以忍受缓冲5s看到更清楚的视频,所以用TCP问题不大,在网络情况较好的情况下更是如此。视频聊天时绝不能容忍等待5s才听到对方的回话,所以用UDP更合适。

TCP/IP 实现可靠传输的方式

TCP协议保证数据传输可靠性的方式主要有:
校验和
序列号
确认应答
超时重传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值