TCP和UDP有什么区别?
我知道TCP用于非时间关键应用程序,UDP用于需要快速传输数据的游戏或应用程序.我知道TCP用于HTTP,HTTP,FTP,SMTP和Telnet.我知道UDP用于DNS和DHCP.
但为什么?TCP和UDP的哪些特性使它们对各自的用例有用?
TCP
是IP网络上面向连接的流.它保证所有发送的数据包将以正确的顺序到达目的地.这意味着使用发送回发送方的确认包和自动重传,导致额外的延迟和一般效率低的传输UDP
.
UDP
是一种无连接协议.通信是面向数据报的.仅在单个数据报上保证完整性.数据报到达目的地,可能无法到达或根本无法到达.它比TCP
使用非ACK更有效.它通常用于实时通信,其中一小部分丢包率优于连接的开销TCP
.
在某些情况下UDP
使用是因为它允许广播分组传输.这在DHCP
协议这样的情况下有时是基本的,因为客户端机器还没有收到IP
地址(这是DHCP
协议协议的目的),并且没有任何方法来建立TCP
没有IP
地址本身的流.
来自Skullbox的文章:
TCP(传输控制协议)是Internet上最常用的协议.这是因为TCP提供了纠错功能.当使用TCP协议时,存在"保证传送".这主要是由于一种称为"流量控制"的方法.流控制确定何时需要重新发送数据,并停止数据流直到成功传输先前的数据包.这是有效的,因为如果发送数据包,则可能发生冲突.发生这种情况时,客户端会从服务器重新请求数据包,直到整个数据包完成并且与原始数据包相同.1)TCP是面向连接且可靠的,因为UDP连接较少且不可靠.UDP(用户数据报协议)是Internet上常用的协议.但是,UDP从不用于发送重要数据,如网页,数据库信息等; UDP通常用于流式传输音频和视频.诸如Windows Media音频文件(.WMA),Real Player(.RM)等流媒体使用UDP,因为它提供了速度!UDP比TCP更快的原因是因为没有流控制或纠错的形式.通过Internet发送的数据会受到冲突的影响,并且会出现错误.请记住,UDP仅关注速度.这是流媒体质量不高的主要原因.
2)TCP需要在网络接口级别进行更多处理,而在UDP中则不需要.
3)TCP使用,3路握手,拥塞控制,流量控制等机制,确保可靠传输.
4)UDP主要用于数据包延迟比丢包更严重的情况.
将TCP视为两个位置之间专用的预定UPS/FedEx接收/下载包,而UDP相当于在邮箱中投放明信片.
UPS /联邦快递将尽其所能确保您邮寄的包裹到达那里,并准时到达那里.使用明信片,你很幸运,如果它到达,它可能会无序或迟到(你从度假回家后有多少次从某人那里得到一张明信片?)
TCP尽可能接近保证传送协议,而UDP只是"尽力而为".
UDP用于DNS和DHCP的原因:
DNS - TCP需要来自服务器(侦听连接)的更多资源,而不是客户端的资源.特别是,当TCP连接关闭时,服务器需要在称为TIME_WAIT_2的状态下记住连接的详细信息(将它们保存在内存中)两分钟.这是防止来自先前连接的错误重复分组被解释为当前连接的一部分的特征.维护TIME_WAIT_2会占用服务器上的内核内存.DNS请求很小,并且经常从许多不同的客户端到达.与客户端相比,此使用模式会加剧服务器上的负载.人们认为使用UDP没有连接,也没有状态可以在客户端或服务器上维护,这将改善这个问题.
DHCP - DHCP是BOOTP的扩展.BOOTP是客户端计算机用来从服务器获取配置信息的协议,而客户端正在启动.为了定位服务器,发送广播以询问BOOTP(或DHCP)服务器.广播只能通过无连接协议发送,例如UDP.因此,BOOTP至少需要一个UDP数据包,用于服务器定位广播.此外,由于BOOTP在客户端...启动时运行,并且这是客户端可能没有加载并运行其整个TCP/IP堆栈的时间段,因此UDP可能是客户端准备处理的唯一协议时间.最后,一些DHCP/BOOTP客户端只有板载UDP.例如,某些IP恒温器仅实现UDP.原因是它们使用如此微小的处理器和很少的内存来构建,无法执行TCP - 但它们仍然需要在启动时获取IP地址.
正如其他人所提到的,UDP对流媒体尤其是音频也很有用.如果您只是丢弃延迟的数据包,在网络延迟下对话听起来会更好.你可以用UDP做到这一点,但是在延迟期间你得到的所有内容都是暂停,接下来是音频,它总是会延迟到它已经暂停的时间.对于双向电话式对话,这是不可接受的.
其中一个差异就是简短
UDP:发送消息,如果到达目的地则不回头看,无连接协议
TCP:发送消息并保证到达目的地,面向连接的协议
TCP在实际数据传输发生之前建立连接,而UDP则不然.通过这种方式,UDP可以提供更快的交付.因此,DNS,时间服务器访问等应用程序使用UDP.
与UDP不同,TCP使用拥塞控制.它响应网络负载.与UDP不同,当网络拥塞迫在眉睫时,它会变慢.因此,像多媒体这样的应用程序更喜欢恒定吞吐量可能适用于UDP
此外,UDP不可靠,它不会对数据包丢失做出反应.因此,像多媒体传输这样对丢失敏感的应 但是,TCP是一种可靠的协议,因此,需要可靠性的应用程序(如Web传输,电子邮件,文件下载)更喜欢TCP.
此外,在今天的互联网中,由于中间的盒子,UDP并不像TCP那样受欢迎.当假设UDP连接被阻止时,某些应用程序(如skype)会降为TCP.