搜索
查看: 496|回复: 0

TCP与UDP:网络通信中的两大协议差异

[复制链接]

332

主题

537

帖子

3836

积分

论坛元老

Rank: 8Rank: 8

积分
3836
发表于 2023-11-7 20:40:57 | 显示全部楼层 |阅读模式
在现代互联网的背后,有两个重要的协议在默默运行,它们分别是TCP(传输控制协议)和UDP(用户数据报协议)。这两种协议在网络通信中扮演着不可或缺的角色,但它们之间存在着显著的差异。本文将深入探讨TCP和UDP之间的区别,帮助读者更好地理解它们在数据传输中的作用。
TCP协议和UDP协议都工作在传输层,他们的目标都是在应用之间传输数据。我们常用的网络通信,比如浏览网页,查看邮件,电话通信等,都是通过这两种协议来进行数据传输的。
图片11.png

01TCP与UDP的区别
这两种协议有什么区别呢?他们又是如何工作的?跟着文档君往下看~
TCP协议和UDP协议最核心的区别是什么?看看下边图片你就知道了。
图片12.png

  • TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。可靠性,是TCP的最大特点,主要体现在:数据无丢失、无错误、无失序、无重复到达。就如同上图,TCP能将“孩子”(数据包)十分安全地传送给接收者。
  • UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠、快速传输的传输层通信协议。快速传输,是UDP的最大特点,主要体现在:数据发送前,不需要提前建立连接,能更高效地传输数据,但可靠性无法保证。就如同上图,UDP只负责把“孩子”(数据包)送出去,不管接收者有无收到。
直观感受了TCP协议与UDP协议的区别后,咱们来看看TCP协议是如何工作的?

02TCP是如何工作的?


TCP通信的连接管理机制(可靠机制)总结为:三次握手建立连接,四次挥手断开连接。
< 三次握手建立连接 >
TCP 是面向连接的协议,所以每次发出的请求都需要对方进行确认。TCP 客户端与 TCP 服务器在通信之前需要完成三次握手才能建立连接。
图片13.png


第一次握手
目的:这是一个请求建立连接的数据包,客户端先向服务器发送一个同步数据包。
数据包的TCP首部内容

  • 同步SYN=1(客户端请求建立连接)
  • 序号seq=x(客户端所传送数据的第一个字节的序号)
第二次握手
目的:服务器收到客户端发送的第一个数据包后,判断出为主动建立连接的数据包。若服务器同意连接,则服务器发送一个数据包进行回应。
数据包的TCP首部内容

  • 同步SYN=1(服务器建立连接)
  • 确认标记ACK=1(服务器同意连接)
  • 序号seq=y(服务器所传送数据的第一个字节的序号)
  • 确认号ack=x+1(已经收到客户端发送的x个字节数据,并告诉客户端下次应从数据的第x+1个字节开始发送)
第三次握手
目的:客户端收到服务器的确认之后,再给服务器发送一个数据包。
数据包的TCP首部内容

  • 同步SYN=1(双方已同意建立连接)
  • 确认标记ACK=1(收到服务器的确认数据包)
  • 序号seq=x+1(发出的数据包就是数据的第x+1个字节)
  • 确认号ack=y+1(收到服务器发送y字节数据,并告诉服务器下次应从数据的第y+1个字节开始发送)

Tips
在客户端与服务器端传输的TCP数据中,双方的序号seq和确认号ack的值,都是在彼此seq和ack值的基础上进行计算的,这样做保证了TCP数据传输的连贯性。一旦出现某一方发出的TCP数据丢失,便无法继续"握手",以此确保了"三次握手"的顺利完成。
< 四次挥手断开连接 >
聚散终有时,当数据传输完成后,TCP客户端与TCP服务器需要通过四次会话断开连接,这个过程我们称之为四次挥手。


图片14.png
第一次挥手
目的:客户端向服务器发送连接释放的请求数据包,并停止发送数据。
在连接释放数据包的TCP首部中

  • 终止FIN=1(客户端要主动释放客户端和服务器的TCP连接)
  • 序号seq=x(x由客户端指定。随后等待服务器的确认)
第二次挥手
目的:服务器在收到连接释放的报文之后,给客户端发送确认报文。因此,客户端到服务器方向上的连接释放,TCP连接此时处于半关闭状态。半闭因为客户端已无法发送数据给服务器,半开因为服务器仍可以发送数据给客户端并被其接收。
在服务器发送给客户端确认报文的TCP首部中

  • 确认标记ACK=1(收到了客户端发送的数据包,同意客户端释放连接)
  • 确认号ack=x+1(在收到客户端报文的基础上,将其序号seq值加1作为本段报文确认号ack的值)
  • 序号seq=y(y由服务器指定。随后等待客户端的确认)
第三次挥手
目的:若服务器已停止向客户端发送的数据,则释放连接,并向客户端发送确认报文。
在确认报文的TCP首部中:

  • 终止FIN=1(服务器释放服务器到客户端的TCP连接,不再向客户端发送数据)
  • 确认标记ACK=1(服务器对客户端的数据传送完毕)
  • 确认号ack=x+1(在收到客户端报文的基础上,将其序号seq值加1作为本段报文确认号ack的值)
  • 序号seq=z(z由服务器指定。随后等待客户端的确认)
第四次挥手
目的:客户端收到服务器的连接释放报文段后,向服务器发出确认报文。
在确认报文的TCP首部中

  • 终止FIN = 1(客户端和服务器断开连接)
  • 确认标记ACK=1(收到服务器的确认报文,并同意服务器释放连接)
  • 确认号ack=z+1(在收到服务端报文的基础上,将其序号seq值加1作为本段报文确认号ack的值)
  • 序列号seq=x+1(在收到服务端报文的基础上,将其确认号作为本段报文序列号的值)
了解完TCP后,再来了解一下UDP是如何工作的~



03UDP是如何工作的?


UDP协议是面向无连接的,即发送数据之前不需要建立连接(无TCP协议复杂的三次握手,四次挥手的过程),发送数据就是简单的把数据包封装一下,然后从网卡发出去,数据包之间并没有状态上的联系。UDP 协议基本上是 IP 协议与上层协议的接口,UDP协议使用IP层提供的服务将应用层得到的数据从一台主机的某个应用进程传递到另一台主机的某个应用进程。
举个栗子~
当传输层从IP层收到UDP数据报文时,根据UDP数据报文首部中的目的端口,把UDP数据报文通过相应的端口传递给应用进程,如下图所示。
图片15.png


如上图中应用进程4与端口2,如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程),则丢弃该报文,并由ICMP发送“端口不可达"差错报文给发送方。


ICMP(Internet ControlMessage Protocol,Internet控制报文协议)是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
数据传输看似简单,其实非常智慧~
TCP和UDP服务的是程序,但程序和人是一样的,可以你来我往进行交流,也可以一股脑的倾诉。TCP就是彼此之间坦诚交流。消息有没有收到,收到的信息是否一致,都可以有及时的反馈。
无论是TCP还是UDP,它们都在网络通信中发挥着重要的作用。TCP提供了可靠的、有序的数据传输,适用于需要数据完整性和可靠性的应用场景;而UDP则更加灵活,适用于对速度和实时性要求较高的应用。了解TCP和UDP的差异,可以帮助我们在设计和优化网络应用时做出更明智的选择。无论是传输大文件还是实时游戏,选择适合的协议都是至关重要的。让我们深入学习TCP和UDP,掌握它们的特点和适用场景,为更高效的网络通信铺就坚实的基础。

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|RF技术社区

GMT+8, 2024-4-30 22:28 , Processed in 0.079455 second(s), 8 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表