每日一博 | TCP 和 UDP,哪个更胜一筹?
作为 TCP/IP 中两个最具有代表性的传输层协议,TCP 和 UDP 经常被拿出来相互比较。这些协议具体有什么区别,又是什么作用呢?
在 IT 圈混迹多年的小伙伴们,对 TCP 和 UDP 肯定再熟悉不过了。作为计算机网络专业毕业多年的二狗子,除了 OSI 七层和 TCP/IP 四层模型,就是对网络协议印象比较深刻了。在面试中,网络协议也是我们必须要掌握的知识。作为 TCP/IP 中两个最具有代表性的传输层协议,TCP 和 UDP 经常被拿出来相互比较。
今天我们就来简单聊聊 TCP 和 UDP,不过在讲 TCP 和 UDP之前,我们先来了解一下 TCP/IP。
TCP/IP 网络模型
网络设备之间要互相通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而这种规则就称之为协议(Protocol)。
TCP/IP 是互联网相关的各类协议族的总称,它以两个原始协议:传输控制协议(TCP)和Internet 协议(IP)来命名。比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。TCP/IP 模型是互联网的基础,它可以划分为四层,分别为链路层、网络层、传输层和应用层。
-
链路层:负责封装和解封装 IP 报文,发送和接受 ARP/RARP 报文等。
-
网络层:负责路由以及把分组报文发送给目标网络或主机。
-
传输层:负责对报文进行分组和重组,并以 TCP 或 UDP 协议格式封装报文。
-
应用层:负责向用户提供应用程序,比如 HTTP、FTP、Telnet、DNS、SMTP 等。
下面我们主要来介绍一下传输层协议:TCP 和 UDP。
TCP
TCP 全称为传输控制协议(Transmission Control Protocol),它由 IETF 的 RFC 793 定义,是一种面向连接的点对点传输通信协议,它以有序顺序将数据包作为非结构化字节流发送。
TCP 通过使用序列号和确认消息,从发送节点提供有关传输到目标节点的数据包的传递的信息。TCP 确保数据的可靠性,端到端传递,重新排序和重传,直到达到超时条件或接收到数据包的确认为止。
TCP 是 Internet 上最常用的协议。当我们在浏览器中请求网页时,计算机会将 TCP 数据包发送到 Web 服务器的地址,要求它将网页返还给我们。Web 服务器通过发送 TCP 数据包流进行响应,然后浏览器将这些数据包缝合在一起以形成网页。TCP 的全部意义在于它的可靠性,它通过对数据包编号来对其进行排序,而且它会通过让服务器将响应发送回浏览器说“已收到”来进行错误检查。因此在传输过程中不会丢失或破坏任何数据。
我们接下来看下 TCP 的连接过程:
1.TCP 的连接过程(三次握手)
-
主机 A 通过将 TCP SYN 数据包发送到主机 B 来建立连接。其中包含了随机序列号(4321),该号标记了 A 将要发送数据的序号的开始。
-
B 接收到数据包并以自己的序列号(5501)进行响应。响应中还包含确认号,该号是 A 的序列号加 1(4322)。
-
A 通过发送确认号来确认服务器的响应,该确认号是 B 的序列号加 1(5502)。
2.TCP 终止连接
TCP 是全双工的,在断开连接时两端都需要发送 FIN 和 ACK。
-
若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。
-
B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
-
B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。
-
A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。
UDP
用户数据报协议(User Datagram Protocol)是一种无连接的传输层通信协议,用于建立低容错和丢失等待时间的连接,可以在网络内或跨网络传递服务或数据包。UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点。也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
当应用程序使用 UDP 时,数据包仅发送到目标。发送者不必等待确保接收者已收到该数据包,它会继续发送下一个数据包。如果目标错过了一些数据包,则它们只会被丢掉,发送者不会重新发送它们。这也意味着设备可以更快地进行通信。
例如在游戏中,如果我们因为网络原因错过了接收一些 UDP 数据包,那当收到较新的数据包时,游戏画面可能会跳帧。如果错过了旧数据包,错过了就是错过了,因为就算没有我们,游戏也会继续运行。在游戏中重要的是正在发生的事情,而不是几秒钟前发生的事情。抛弃一些错误有助于加快游戏连接速度并减少延迟。
大多数应用程序都需要 TCP 的可靠性和纠错机制,但是某些应用程序也需要 UDP 的高效性和降低开销。我们可以通过一些诸如 Wireshark、Fiddler 等网络分析工具,就可以看到发送和接收不同类型的数据包。
TCP vs UDP
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 最适合用于对时序不太关心的,且要求高可靠性的应用程序。
-
万维网(HTTP,HTTPS)
-
安全外壳(SSH)
-
文件传输协议(FTP)
-
电子邮件(SMTP,IMAP / POP)
UDP 最适合需要速度和效率的应用程序。
-
串流影片
-
线上游戏
-
现场直播
-
域名系统(DNS)
-
互联网协议语音(VoIP)
-
普通文件传输协议(TFTP)
聊了这么多,相信你对 TCP 和 UDP 也有了基本的了解,那么你认为:TCP 和 UDP,哪个更胜一筹呢?
推荐阅读
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Vue 3 首个 RC 版本发布
Vue.js 作者尤雨溪昨日宣布Vue 3 已进入 RC 阶段,这意味着 Vue 3 内核的 API 和实现已到达稳定状态。 原则上,进入 RC 阶段后不会在最终版本发布之前引入新的主要功能或做出重大更改。现在,大部分的官方框架组件已支持 Vue 3,点此查看最新状态。 新的文档 Vue 文档团队已对 v3 版本的文档进行更新,现在可以在v3.vuejs.org查看。从 v2 到 v3 版本的文档迁移过程十分精细,新的文档涵盖了 v2 和 v3 之间的差异,可以在 VuePress 上运行,并改进了可以在线编辑的代码示例。 详情查看迁移指南。 ※ 注意:新的文档,尤其是迁移指南目前仍在开发中,Vue 团队在 RC 阶段会继续进行完善。 DevTools 对 Vue 3 的初始支持 Vue 3 引入了新的 Vue Devtools,目前处于 Beta 阶段,初步支持 Vue 3。 devtool 经过深度重构,可以更好地将其核心逻辑与受支持的不同 Vue 版本进行分离。其界面具有使用 Tailwind CSS 实现的新外观。当前的功能比较单一,仅支持对组件进行检查,不过官方表示很快会推出...
- 下一篇
Ubuntu 删除 Popcon 软件包,不再借此统计用户软件信息
来自 Canonical 的软件工程师 Michael Hudson Doyle 近日宣布,默认情况下,新安装的 Ubuntu 将不再带有popularity-contest 软件包。主要是因为该软件包及其后端均已损坏。 Popularity Contest(简称 Popcon)由 Ubuntu 自 2006 年(Ubuntu 6.10)起作为预装软件包推出,用于收集用户信息,统计 Ubuntu 中最受欢迎,即安装数量最多的软件包。该软件包并非默认开启,如果想参与 Ubuntu 的统计调查,需手动启用。 Popcon 每周发送一次已安装软件包的列表以及相关文件的访问时间。服务器每天都会将结果匿名化,然后在 Popcon 站点发布调查数据。统计内容包括:使用软件包的人数、经常使用的人数、已安装但不常使用的人数、近期有升级的人数等等。 这些统计数据通常用于改进未来的 Ubuntu 版本。当某些软件包更受欢迎时,Ubuntu 会考虑将其打包在镜像中,为用户默认安装。 Michael 提到,Popcon 在 Ubuntu 18.04 LTS 中就已损坏,不再起作用。因此他们将从默认安装中删除该...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境