【网络编程实践】2.2.4 UDP vs. TCP

  • TCP:传输控制协议。面向连接的、可靠的、基于字节流的传输层通信协议。特点:可靠传输(应答确认)、提供拥塞控制、全双工通信(允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据)。
  • UDP:用户数据报协议。无连接的、 不可靠的、 面向数据报的协议。特点:提供单播,多播,广播的功能
  • UDP的使用场景(一般情况下尽量使用TCP协议):
    • 资源受限的情况下:例如 nat穿透技术。在互联网技术中,UDP常用在缓存读取,保存;用在监控或终端上报。
    • 不在乎可靠性:例如 本节的 round_trip 程序,消息本身不需要重传,使用udp足够应对。又例如在 直播、视屏通话等场景中,需要的是实时性,如果因重传而造成延迟卡顿,那么用户的使用体验将会很糟糕。
  • 网络编程角度差别:
    • TCP编程:1. 并发编程需要为每个客户端都创建socket连接,为每个客户端都配备文件描述符。同时需要考虑线程间的分配问题。 2. TCP线程不安全,应避免多个线程同时读取一个文件描述符。
    • UDP编程:1. 并发编程中,服务端一个socket可以服务多个客户端。2. 线程安全,数据报协议自动维护消息的边界,多线程操作同一个描述符也不会出现粘包,半包的问题(每次从接收缓冲都是只能取回一个完整的包)。
    • 使用UDP编程,需要自己确保可靠性(参考tcp实现,设计心跳机制、应答确认、超时重传等)。 注:UDP协议栈会在发送的时候分片,到了接收重组,每次组好了完整的包就丢给用户,不完整就丢掉,故,可能会出现丢包现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫RT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值