做为 TCP/IP 中两个最具备表明性的传输层协议,TCP 和 UDP 常常被拿出来相互比较。这些协议具体有什么区别,又是什么做用呢?html
在 IT 圈混迹多年的小伙伴们,对 TCP 和 UDP 确定再熟悉不过了。做为计算机网络专业毕业多年的二狗子,除了 OSI 七层和 TCP/IP 四层模型,就是对网络协议印象比较深入了。在面试中,网络协议也是咱们必需要掌握的知识。做为 TCP/IP 中两个最具备表明性的传输层协议,TCP 和 UDP 常常被拿出来相互比较。面试
今天咱们就来简单聊聊 TCP 和 UDP,不过在讲 TCP 和 UDP以前,咱们先来了解一下 TCP/IP。浏览器
网络设备之间要互相通讯,双方就必须基于相同的方法。好比,如何探测到通讯目标、由哪一边先发起通讯、使用哪一种语言进行通讯、怎样结束通讯等规则都须要事先肯定。不一样的硬件、操做系统之间的通讯,全部的这一切都须要一种规则。而这种规则就称之为协议(Protocol)。安全
TCP/IP 是互联网相关的各种协议族的总称,它以两个原始协议:传输控制协议(TCP)和Internet 协议(IP)来命名。好比:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。TCP/IP 模型是互联网的基础,它能够划分为四层,分别为链路层、网络层、传输层和应用层。服务器
下面咱们主要来介绍一下传输层协议:TCP 和 UDP。网络
TCP 全称为传输控制协议(Transmission Control Protocol),它由 IETF 的 RFC 793 定义,是一种面向链接的点对点传输通讯协议,它以有序顺序将数据包做为非结构化字节流发送。工具
TCP 经过使用序列号和确认消息,从发送节点提供有关传输到目标节点的数据包的传递的信息。TCP 确保数据的可靠性,端到端传递,从新排序和重传,直到达到超时条件或接收到数据包的确认为止。spa
TCP 是 Internet 上最经常使用的协议。当咱们在浏览器中请求网页时,计算机会将 TCP 数据包发送到 Web 服务器的地址,要求它将网页返还给咱们。Web 服务器经过发送 TCP 数据包流进行响应,而后浏览器将这些数据包缝合在一块儿以造成网页。TCP 的所有意义在于它的可靠性,它经过对数据包编号来对其进行排序,并且它会经过让服务器将响应发送回浏览器说“已收到”来进行错误检查。所以在传输过程当中不会丢失或破坏任何数据。操作系统
咱们接下来看下 TCP 的链接过程:计算机网络
1.TCP 的链接过程(三次握手)
2.TCP 终止链接
TCP 是全双工的,在断开链接时两端都须要发送 FIN 和 ACK。
用户数据报协议(User Datagram Protocol)是一种无链接的传输层通讯协议,用于创建低容错和丢失等待时间的链接,能够在网络内或跨网络传递服务或数据包。UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点。也就是说,当报文发送以后,是没法得知其是否安全完整到达的。
当应用程序使用 UDP 时,数据包仅发送到目标。发送者没必要等待确保接收者已收到该数据包,它会继续发送下一个数据包。若是目标错过了一些数据包,则它们只会被丢掉,发送者不会从新发送它们。这也意味着设备能够更快地进行通讯。
例如在游戏中,若是咱们由于网络缘由错过了接收一些 UDP 数据包,那当收到较新的数据包时,游戏画面可能会跳帧。若是错过了旧数据包,错过了就是错过了,由于就算没有咱们,游戏也会继续运行。在游戏中重要的是正在发生的事情,而不是几秒钟前发生的事情。抛弃一些错误有助于加快游戏链接速度并减小延迟。
大多数应用程序都须要 TCP 的可靠性和纠错机制,可是某些应用程序也须要 UDP 的高效性和下降开销。咱们能够经过一些诸如 Wireshark、Fiddler 等网络分析工具,就能够看到发送和接收不一样类型的数据包。
TCP 和 UDP 有许多区别和类似之处。它们都是经过 Internet 发送数据包的最经常使用的协议。而且它们都在 TCP/IP 协议栈的传输层上工做。
一个简单的例子,能够清楚地了解二者的差别:
假设有两座房子,House1 和 House2,而且必须从 H1 发送一封信到 H2。可是这两座房子之间有一条河。如今咱们如何寄信?
解决方案 1:在河上架桥,而后将其交付。
解决方案 2:经过鸽子运送。
将第一个解决方案视为 TCP,必须进行链接(桥)才能传递数据(信)。
这样获得的数据是可靠的,由于它能够直接到达另外一端而不会丢失或者出错。
第二种解决方案相似 UDP,无需链接便可发送数据。与须要创建链接(桥)的 TCP 相比,该过程更快。可是数据并不可靠:由于咱们并不知道这只鸽子是否会朝正确的方向前进,或者会在途中掉信或遇到一些其余问题。
简单总结下 TCP 和 UDP 的区别:
链接和无链接:TCP 是面向链接的协议,而 UDP 是无链接协议。TCP 能够在发送数据以前在发送方和接收方之间创建链接。而 UDP 在发送数据以前不会先创建链接。
可靠性:TCP 是可靠的。使用 TCP 协议发送的数据能够保证传递到接收。若是数据在传输过程当中丢失,它会恢复数据并从新发送。TCP 还将检查数据包中的错误并跟踪数据包,以保证数据不会丢失或损坏。
而 UDP 是不可靠的,它不能提供有保证质量的传递,而且数据报包可能会在传输中损坏或丢失。
流量控制:TCP 使用流控制机制来确保发送者不会一次发送太多数据包而压倒接收者。TCP 将数据存储在发送缓冲区中,并在接收缓冲区中接收数据。当应用程序准备就绪时,它将从接收缓冲区读取数据。若是接收缓冲区已满,则接收器将没法处理更多数据并将其丢弃。为了保持能够发送给接收方的数据量,接收方会告诉发送方接收缓冲区中有多少剩余空间(接收窗口)。每次接收到数据包时,都会使用当前接收窗口的值向发送方发送一条消息。UDP 不提供流控制。使用 UDP,数据包以连续流的形式到达或被丢弃。
速度:TCP 比 UDP 慢,由于它“顾虑”比较多:TCP 必须创建链接,进行错误检查,并确保按照发送顺序接收文件。而 UDP 则更简单,更高效。
使用场景:TCP 最适合用于对时序不太关心的,且要求高可靠性的应用程序。
UDP 最适合须要速度和效率的应用程序。
聊了这么多,相信你对 TCP 和 UDP 也有了基本的了解,那么你认为:TCP 和 UDP,哪一个更胜一筹呢?