TCP和UDP的区别
RedRain的简书:http://www.jianshu.com/users/29e03e6ff407/latest_articles
TCP和UDP的区别
TCP/IP中有两个具有代表意义的传输层协议, 它们分别是TCP和UDP.
- TCP: TCP是面向连接的, 可靠的流协议.
流就是指不间断的数据结构, 你可以把它想象成排水管中的水流. 当应用程序采用TCP发送消息时, 虽然可以保证发送的顺序, 但还是犹如没有任何间隔的数据流发送给接受端.
TCP为提供可靠性传输, 实行
顺序控制
或重发控制
机制. 此外还具有流控制(流量控制)
,拥塞控制
,提高网络利用率等众多功能.
- UDP: 它是不具有可靠性的数据报协议. 细微的处理它会交给上层应用去完成.
在UDP的情况下, 虽然可以确保发送消息的大小, 却不能保证消息一定会到达, 因此,应用有时会根据自己的需要进行重发处理.
TCP和UDP的区分
可能有人会认为, 鉴于TCP是可靠的传输协议, 那么它就一定优于UDP. 其实不然TCP与UDP的优缺点无法简单地,绝对地去做比较.那么, 对这两种协议应该如何加以区分使用?
TCP 用于在传输层有必要实现可靠性的情况. 由于它是面向连接并具备顺序控制, 重发控制等机制的, 所以它可以为应用提供可靠传输.
而在一方面, UDP主要用于那些对高速传输和实时性有较高要求的通信和广播通信. 我们举个通过IP电话进行通话的例子. 如果使用TCP, 数据在传输途中如果丢失会被重发, 但这样无法流程地传输通话人是声音, 会导致无法进行正常交流. 而采用UDP, 它会不进行重发处理. 从而也就不会有声音大幅度延迟到达的问题. 即使有部分数据丢失, 也只是会影响某一小部分通话,
因此, TCP和UDP应该根据应用的目的按需使用.
套接字 (Socket)
应用在使用TCP或UDP时, 会用到操作系统提供的类库. 这种类库一般被称为API.
使用TCP或UDP通信时, 又会广泛使用到套接字(Socket)的API. 套接字原本是由BSD UNIX开发的, 但是后被移植到了Windows的Winsock以及嵌入式操作系统中.
应用程序利用套接字, 可以设置对端的IP地址, 端口号,并实现数据的发送和接受.
UDP
由于UDP面向无连接, 它可以随时发送数据. 再加上UDP本身的处理既简单由高效, 因此经常用于以下几个方面:
- 包总量较少的通信(DNS, SNMP等)
- 视频,音频等多媒体通信(即时通信)
- 限定于LAN等特定网络中的应用通信
- 广播通信(广播, 多播)