TCP、UDP的区别是什么,两者在什么时候使用?
一、TCP和UDP
TCP
TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP是面向面向字节流,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。
TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。
TCP有以下特点:
TCP充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。根据 TCP 的这些机制,在 IP 这种无连接的网络上也能够实现高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)。UDP
UDP 是面向报文的,所谓面向报文,是指面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。
UDP 是不具有可靠性的数据报协议,细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。
UDP有以下特点:
UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。传输途中出现丢包,UDP 也不负责重发。当包的到达顺序出现乱序时,UDP没有纠正的功能。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞行为。如果需要以上的细节控制,不得不交由采用 UDP 的应用程序去处理。UDP 常用于以下几个方面:1.包总量较少的通信(DNS、SNMP等);2.视频、音频等多媒体通信(即时通信);3.限定于 LAN 等特定网络中的应用通信;4.广播通信(广播、多播)。总结
TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。
延伸阅读:
二、UDP首部格式
不像TCP报文那么复杂的首部内容。UDP的首部只有首部字段只有 8 个字节,由四个字段组成,每个字段的长度是 2 个字节。
源端口;目的端口;长度:UDP 用户数据报的长度,在只有首部的情况,其最小值是8。校验和:检测 UDP 用户数据报在传输中是否有错,有错就丢弃。
猜你喜欢LIKE
相关推荐HOT
更多>>为什么在中断里不能sleep?
一、在中断里不能sleep的原因“为什么在中断里不能sleep”,即“为什么在Linux里,ISR被设计成不能睡眠”。sleep会导致call scheduler以选择另...详情>>
2023-10-14 20:44:46Jupyter Notebook为什么是现代Python的必学技术?
1、整合所有资源在软件开发过程中,频繁地切换窗口会影响开发效率。举个例子,假设你需要切换窗口去看一些文档,再切换窗口去用另一个工具画图...详情>>
2023-10-14 20:11:17Python中is和==的区别?
一、Python中is和==的区别Python 中的 is 和 == 的主要区别是== 操作符比较两个对象的值是否相等,即比较它们所包含的数据是否相同;is 操作符...详情>>
2023-10-14 18:11:35mac任务管理器快捷键是什么?
一、mac任务管理器快捷键在Mac OS X操作系统中,任务管理器被称为活动监视器(Activity Monitor),它允许用户查看和管理正在运行的进程和资源...详情>>
2023-10-14 17:46:41热门推荐
Python10行以内代码能有什么高端操作?
沸html form标签的action属性是什么?
热TCP、UDP的区别是什么,两者在什么时候使用?
热C++中引用和指针有哪些区别?
新epoll、poll、select有哪些区别?
为什么我们需要Laravel IoC容器?
为什么在中断里不能sleep?
Jupyter Notebook为什么是现代Python的必学技术?
Promise是什么?
Python有哪些优势?
项目财务管理包括什么?
Python中is和==的区别?
mac任务管理器快捷键是什么?
Java开发为什么要用IoC和AOP?