TCP和UDP/IP中两个最具有代表性的传输层协议

TCP和UDP作为TCP/IP中最具代表性的两种传输层协议,经常被拿来比较。这些协议之间有什么区别,它们的作用是什么?

在IT圈工作多年的朋友一定对TCP和UDP比较熟悉。作为一个计算机网络专业毕业多年的二狗子,除了OSI七层和TCP/IP四层模型之外,网络协议给他留下了深刻的印象。在面试中,网络协议也是我们必须掌握的知识。TCP和UDP作为TCP/IP中最具代表性的两种传输层协议,经常被拿来比较。

今天我们会简单的说一下TCP和UDP,但是在说TCP和UDP之前,我们先来看看TCP/IP。

TCP/IP 网络模型

网络设备之间要相互通信,双方必须基于相同的方法。例如,如何检测通信目标、哪一方先发起通信、使用哪种语言进行通信、如何结束通信等规则都需要事先确定。不同硬件、操作系统之间的通信,所有这些都需要纪律。而这条规则被称为协议(Protocol)。

TCP/IP 是与 Internet 相关的各种协议的总称。它以两个原始协议命名:传输控制协议 (TCP) 和互联网协议 (IP)。例如:TCP、UDP、IP、FTP、HTTP、ICMP、SMTP等都是TCP/IP家族中的协议。TCP/IP 模型是 Internet 的基础。它可以分为四层,即链路层、网络层、传输层和应用层。

OSI 七层模型 TCP/IP 四层模型 相关网络协议 应用层 应用层 HTTP、TFTP、FTP、NFS、WAIS、SMTP 表示层 Telnet、Rlogin、SNMP、Gopher 会话层 SMTP、DNS 传输层 传输层 TCP、 UDP 网络层 网络层 IP、ICMP、ARP、RARP、AKP、UUCP 数据链路层 链路层 FDDI、以太网、Arpanet、PDN、SLIP、PPP 物理层 IEEE 802.1A、IEEE 802. 2 到 IEEE 802.11

下面我们主要介绍传输层协议:TCP和UDP。

TCP

TCP的全称是Transmission Control Protocol,由IETF的RFC 793定义。它是一种面向连接的点对点传输通信协议,将数据包以非结构化字节流的形式按有序的顺序发送。

TCP 通过使用序列号和确认消息从发送节点提供有关向目标节点传递数据包的信息。TCP 确保数据的可靠性、端到端传递、重新排序和重新传输,直到达到超时条件或收到数据包的确认。

TCP 是 Internet 上最常用的协议。当我们在浏览器中请求一个网页时,计算机会向网页服务器的地址发送一个 TCP 数据包,要求它把网页返回给我们。Web 服务器通过发送 TCP 数据包流进行响应,然后浏览器将这些数据包拼接在一起形成网页。TCP 的重点在于它的可靠性,它通过对数据包进行编号来对数据包进行排序,并通过让服务器向浏览器发送“已接收”的响应来进行错误检查。因此,在传输过程中不会丢失或损坏任何数据。

我们来看看TCP连接过程:

1.TCP连接过程(三次握手)

2.TCP 终止连接

TCP是全双工的,断开时两端都需要发送FIN和ACK。

UDP

用户数据报协议(User Datagram Protocol)是一种无连接的传输层通信协议,用于建立具有低容错和丢失延迟的连接,可以在网络内或跨网络传递服务或数据包。UDP 的缺点是不提供数据包分组、组装以及无法对数据包进行排序。也就是说,消息发出后,就无法知道它是否安全完整地到达了。

当应用程序使用 UDP 时,数据包仅发送到目的地。发送方不必等待以确保接收方已收到数据包,它会继续发送下一个数据包。如果目标错过了一些数据包tcp/ip三次握手的通信过程是,它们将被丢弃,发送者不会重新发送它们。这也意味着设备可以更快地通信。

图片[1]-TCP和UDP/IP中两个最具有代表性的传输层协议-老王博客

例如,在游戏中,如果我们由于网络原因错过了接收某些 UDP 数据包,则在收到较新的数据包时,游戏屏幕可能会跳帧。如果你错过了一个旧数据包,你就会错过它,因为即使没有我们,游戏也会继续运行。游戏中重要的是正在发生的事情,而不是几秒钟前发生的事情。放弃一些错误可以帮助加快游戏连接并减少延迟。

大多数应用都需要 TCP 的可靠性和纠错机制,但有些应用还需要 UDP 的效率和减少开销。通过一些网络分析工具如Wireshark、Fiddler等,我们可以看到收发不同类型的数据包。

TCP 与 UDP

TCP 和 UDP 之间有许多不同和相似之处。它们是通过 Internet 发送数据包的最常用协议。它们都工作在 TCP/IP 堆栈的传输层。

一个简单的例子可以清楚地理解两者之间的区别:

假设有两所房子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,哪个更好呢?

快来再找个小镜头

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论