四招辨别TCP和UDP协议!

本文深入解析TCP/IP协议的重要组成部分——TCP(传输控制协议)和UDP(用户数据报协议),阐述了两者在连接、安全和传输效率方面的显著差异,以及它们在网络通信中的应用场景。

一、协议

首先我们来明确何为协议,电脑里的协议就像我们身份证一样
比如一串身份证号码18位数字,我们一看就可以知道这串数字为身份证号码并且知道里面的规则,所以协议就是大家都认可并使用的规则,两台电脑要建立联系沟通就必须有一个事先约定好的协议,再比如一个中国人和一个美国人进行对话,他们首先要有相同的语言和相同的语法规则;再回到网络协议上来,在网络通信中有:TCP/IP协议、UDP协议通信协议、蓝牙协议、WIFI协议等。

  • 在明确TCP/IP之前,我们先来了解一下OSI(Open System Interconnection)开放式系统互联,OSI模型分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。而TCP/IP协议简化为四层,这四层大致参考OSI模型的七层,分别为应用层、传输层、Internet层、网络访问层,更侧重于互连设备间数据的传输,而不是严格的功能层次划分。

二、TCP

  • 现在着重来介绍TCP/IP中最重要的TCP协议(Transmission Control Protrcol)传输控制协议, TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据连接,保证可靠性。在TCP连接中必须要明确客户端与服务器端,由客户端向服务器端发出连接请求TCP的连接分为:建立联系(三次握手)、数据传输、关闭连接(四次挥手)。

建立联系:三次握手-

  • 第一次握手:客户端发送SYN包至服务器,并进入SYN-SENY状态,等待服务器确认
    第二次握手:服务器收到客户端的SYN包,发送一个ACK,同时发送自己的SYN,此时服务器进入SYN-SENY状态;
    第三次握手:客户端接收到服务器发送的SYN+ACK后,进入ESTABLISHED状态,并发送服务器SYN包的确认ACK,服务器接收到客户端的ACK后,进入ESTABLISHED状态

此时客户段和服务端都进入ESTABLISHED状态之后,两者就可以开始进行双向传递数据了。
—比如我现在要给好朋友狗子打电话,第一步:给对方拨号(有可能连接成功,有可能拨通失败,这一步通过TCP报文来判断结果) ;第二步:对方接通号码说:“喂,你好,请问你是谁”;第三步:我回话:你好,我是强子。这三步完成之后然后就开始进行嘘寒问暖

TCP是一种点对点的通信方式,任何一方都可以开始或终止通信。任何机器上的TCP都能被动地等待握手或者主动地发起握手,一旦建立起连接,数据可以对等地双向流动

关闭连接:四次挥手

  • 第一次挥手:当主机A的应用程序通知TCP数据已经发生完毕时,TCP像主机B发送一个带有FIN附加标记的报文段(其中FIN理解为finish)
    第二次挥手:主机B收到这个FIN报文段后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送FIN报文段,防止对方重复发送FIN)
    第三次挥手:接主机B 的应用程序告诉TCP:我要彻底的关闭连接。TCP向主机A发送第二个FIN报文段;
    第四次挥手:主机A收到第二个FIN报文段后,向主机B发送一个ACK表示连接彻底关闭。

TCP的连接分为:建立联系(三次握手)、数据传输、关闭连接(四次挥手)。在这过程中有“七次交锋握手挥手”,在这过程中就要交换不少数据,如果中间的“数据传输”只传输几个字节的信息的话,这种开销就显得十分昂贵。例如在进行DNS域名查询时,中间只需传输几个字节的信息。此时这种传输数据很少的轻权通信,催生了UDP协议,轻权通信一般由UDP来完成。

三、UDP

  • UDP(User Diagram Protocol)用户数据报协议,是一种面向无连接的协议,在通信时客户端和服务端不需要建立连接,不需要像TCP那样你在这头挥手我在这头挥手。当一台计算机向另一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。比如像浪漫的写信一样,我不管也不知道你是否会收到,我想发出就发出,你收到了也无需向我说明,(这是不是有点绝情的样子…)你收到了就说明我俩有缘分…
    由于UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输。例如视频会议都使用UDP协议,因为这种情况下,即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传输数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。且UDP协议传输的数据大小不能超过64KB,否则文件无法传输,因此UDP特点为:可靠性差、性能好

四、TCP和UDP的区别

综上,明确了何为TCP和UDP,我们可以知道两者有何区别,归纳总结如下

  • 连接方面
    1、TCP面向连接,如打电话要先拨号建立连接
    2、UDP是无连接的,即发送数据之前不需要建立连接

  • 安全方面
    1、TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失、不重复、且按序到达
    2、UDP尽最大努力交付,即不保证可靠交付

  • 传输效率方面
    1、TCP连接只能是点到点、一对一的
    2、UDP支持一对一、一对多、多对一、多对多的交互通信

  • 资源要求方面
    1、TCP对系统资源要求较多
    2、UDP对系统资源要求较少

### TCPUDP的主要区别 #### 是否建立连接 TCP需要先通过三次握手建立连接才能传输数据,而UDP则无需事先建立连接即可直接发送数据[^2]。 #### 可靠性 TCP提供可靠的字节流服务。它确保数据能够按顺序到达,并且如果发生丢失会自动重传;相比之下,UDP属于尽力而为的服务,在遇到网络状况不佳时可能会出现丢包现象,并且不会主动进行重传操作[^1]。 #### 面向对象特性 TCP面向的是连续的字节流,这意味着应用程序可以将任意长度的数据写入套接字中,底层协议负责将其分割成适当大小的数据段并最终重组回原始消息。相反地,UDP是以独立的消息单位——即报文形式工作的,每个发出的报文都保持其完整性不变地传递给对方程序处理。 #### 支持的通信模式 TCP仅限于单播的一对一通讯模型下工作,而UDP除了能实现相同类型的交互外还允许广播或多播等多种群体间的交流方式存在。 #### 头部开销对比 由于上述功能上的差异使得两者头部结构也有所不同:通常情况下TCP头部至少占用20个八位组的空间用于携带必要的控制信息(如序列号、确认号等),而UDP头部固定只有8个八位组长,因此相对更加轻量化一些。 #### 流量与拥塞控制机制 为了维持良好的性能表现以及避免因突发大量请求造成链路拥堵等问题的发生,TCP内部实现了复杂的算法来进行流量调节拥塞管理;然而这些措施在UDP里却是缺失的,所以后者更适合那些对于实时性延迟敏感的应用场合使用[^3]。 --- ### 应用场景举例说明 当涉及到文件下载或网页浏览这类追求稳定性的业务流程时往往会选择采用TCP协议栈下的HTTP(S)/FTP等方式完成相应任务;而对于视频直播、在线游戏之类强调即时响应速度而非绝对准确性的情况,则更倾向于利用基于UDP构建起来的技术方案来达成目的。 ```python import socket def create_tcp_socket(): """创建一个TCP Socket""" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) return sock def create_udp_socket(): """创建一个UDP Socket""" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return sock ```
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值