1. TCP和UDP的区别
- TCP是面向连接的,UDP是面向无连接的,所谓建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方的交互状态,用这样的数据结构来保证所谓的面向连接特性
- TCP提供可靠交付,TCP传输的数据,无差错,不丢失,不重复,按顺序到达;而UDP继承了IP包的特性,不保证不丢失,不保证按顺序到达
- TCP是面向字节流的,没头没尾;而UDP继承IP的特性,是基于数据报的,一个一个发,一个一个收
- TCP有拥塞控制,根据网络情况自己调整发送速度;UDP就不管,应用让发就发
2. UDP包头
关键:
端口:无论应用程序用TCP还是UDP,都有监听一个端口,正是这个端口用来区分应用程序?
3. UDP的特点
- 沟通简单
- “轻信他人”谁都可以给它传数据,它也可以给任何人传数据,甚至同时给多个人发数据
- 不会根据网络情况进行拥塞控制
4. UDP的三大应用场景
- 需要资源少,网络情况较好的内网,或者对丢包不敏感的应用。比如DHCP,PXE中下载镜像用到的TFTP(内网)
- 不需要一对一沟通建立连接,而是可以广播的应用。比如DHCP就是广播的,还有组播(IGMP包),VXLAN
- 需要处理速度快,时延低,可以容忍少量丢包。
5. UDP应用例子
- 网页或者APP的访问,原来通常使用的是HTTP,这是基于TCP的;QUIC是谷歌提出的一种基于UDP的改进通信协议,目的是降低时延,提供更好的用户互动体验,QUIC将建立连接,自适应拥塞控制等交给应用层
- 流媒体协议,比如直播,现在用的比较多是RTMP,这是基于TCP的,很多直播应用基于UDP自己实现了视频传输协议
- 实时游戏,在异步IO机制引入之前,常常是面对海量客户端连接的策略
- LoT物联网,谷歌提出的Thread协议就是基于UDP的
- 移动通信领域,比如4G移动网络
6. 问题总结
6.1 怎样才算一个连接?
是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方的交互状态,用这样的数据结构来保证所谓的面向连接特性(TCP更好的比喻是在码头上增加了记录人员,核查人员和督导人员,至于IP层和数据链路层,它没有任何改造。)
|