计算机网络--TCP和UDP学习

简介: TCP与UDP区别:TCP是可靠、面向连接的协议,保证数据有序不丢包,适用于HTTP、FTP等;UDP轻量、无连接,实时性高,适用于视频、游戏等。主要差异体现在连接方式、可靠性、速度、头部大小及应用场景。

TCP 和 UDP 有什么区别?

TCP:提供了可靠、面向连接的传输,适用于需要数据完整性和顺序的场景

UDP:提供了更轻量、面向报文的传输,适用于实时性要求高的场景

区别总结:

对比项 TCP UDP
连接方式 面向连接(三次握手、四次挥手) 无连接(直接发)
是否可靠 ✔ 保证可靠、有序、不丢包 ❌ 不保证
性能 慢(需要确认、重传) 快(无握手、无重传)
是否有头部 20~60 字节 8 字节
适合数据大小
传输方式 字节流 报文(Datagram)
是否有流量控制 ✔ 有(滑动窗口) ❌ 无
是否有拥塞控制 ✔ 有 ❌ 无
是否可广播 ❌ 不支持 ✔ 可广播、多播
常用场景 HTTP、FTP、数据库通信 视频、直播、游戏、物联网

TCP三次握手

三次握手主要是为了确定双方都有接收和发送的能力

简要步骤:

  1. 客户端:SYN
  2. 服务端:SYN + ACK
  3. 客户端:ACK

TCP 三次握手图示:

客户端首先发送一个同步序列号(SYN)消息给服务器,服务端回复一个SYN-ACK消息,最后客户端再发送一个ACK确认消息给服务端,确认已经收到服务端发来的SYN-ACK消息

img

步骤解释:

  • 客户端通过 SYN 控制消息并携带自己期望的初始序列号 SEQ 给服务端
  • 服务端收到 SYN 消息之后,通过 ACK 控制消息以及 SEQ + 1 来进行确认并带上自己的 SEQ
  • 客户端通过 ACK 控制消息以及服务端的 SEQ + 1 来进行确认,并且还能够在第三方握手通信的时候,直接携带数据进行传输

为什么要三次握手?

主要有两个原因:

  1. 避免历史错误连接建立,减少双方不必要的资源消耗
  2. 帮助通信双方同步序列号

为什么三次就能阻止错误连接?

因为网络请求比较复杂,发送方第一次发送请求后,可能由于网络原因被阻塞住了,此时发送方可能又会再次发送请求。

1)如果只有两次握手,那么接收方对于发送方的请求只能接受或者拒绝,同时接收方无法识别发送方发送的这个请求是旧的还是新的请求,如下图所示:

img

2)如果网络阻塞时间较长,发送方可能多次发送请求,且接收方还可能全部接受这些连接(它不清楚,以为都是有效的),这就造成了不必要的资源浪费

img

因此三次握手,多了一次发送方确认接收方接受的连接是否争取的验证过程,所以避免了历史重复连接的错误情况。

帮助通信双方同步序列号

因为网络本身不稳定,可能会导致:

  1. 数据重复传输
  2. 数据乱序
  3. 数据丢失

然而,因为TCP是一个可靠的传输协议,可以保证数据在传输过程不丢失且有序,所以对于上述问题在TCP中引入序列号,使得:

  • 接收方可以根据序列号去重
  • 接收方可以根据序列号排序
  • 发送方针对为接收到 ACK 的序列号对应的数据包,可以重传

序列号是有序的,因此在通信过程中,需要同步序列号,那么如何同步?

img

中间一步合并的优点在于:接收方告知发送方收到序列号的同时还可以把自己的序列号告知发送方

TCP四次挥手

四次挥手主要目的为了确保数据全部传输完成

简要步骤:

  1. 客户端:FIN
  2. 服务端:ACK
  3. 客户端:FIN
  4. 服务端:ACK(进入TIME_WAIT)

TCP 四次挥手图解:

img

  1. 第一次挥手(FIN -> ACK):客户端主动关闭连接,发送 FIN 包,进入 FIN_WAIT_1 状态。服务器收到 FIN 后,表示不再接收数据,但仍可能继续发送数据
  2. 第二次挥手(ACK):服务器发送 ACK 包,确认已收到 FIN,此时服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。
  3. 第三次挥手(FIN -> ACK):服务器完成所有数据传输后,发送 FIN 包,进入 LAST_ACK 状态。客户端收到 FIN 后,准备关闭连接。
  4. 第四次挥手(ACK):客户端发送最后一个 ACK 包,进入 TIME_WAIT 状态,等待可能迟到的 FIN 包,服务器收到 ACK 后,关闭连接,进入 CLOSED 状态。客户端在 TIME_WAIT 计时结束后(2MSL),正式关闭连接。

Client 为什么要进入 TIME_WAIT ?

Client 进入**TIME_WAIT**是为保证所有数据安全接受,防止延迟的FIN包影响新连接的完整性,避免出现混淆问题。

为什么挥手需要四次?

主要是为了确保数据完整性

TCP 是一个全双工协议,也就是说双方都要关闭,每一方都向对方发送 FIN 和回应 ACK。

客户端发起连接断开,代表客户端没数据要发送的,但是服务器可能还有数据没有返回给客户端。

就像我对你说数据发完了,你收到之后回复说好的收到,然后你再对我说你数据发完了,我收到之后也回复你说好的收到。这样才能保证数据不会丢失

如果我说数据发完了,你收到之后说确认收到,但不说数据是否发完了,那我收到确认之后就会离开,而你的还没发完的数据就发不了了,那就会造成数据不完整性

一个FIN+ACK 代表一方的数据发送完了,我们有两个端就需要两个 FIN+ACK,也就是四次通信

挥手可以三次吗?

可以,不一定都是四次,也可以是三次。

主要发生在:

如果 Client 发送 FIN 给 Server 的时候 Server 已经没有数据发送给 Client,那么Server 就可以将 FIN 和 ACK 一起发送给 Client 了,那么四次挥手就可以变成三次挥手。

img

The end......

相关文章
|
10月前
|
XML Java 数据格式
关于SpringBean的个人学习总结
Spring Bean 是由 Spring 容器管理的对象实例,通过配置元数据创建和装配,实现对象的集中管理和解耦。Bean 可通过构造方法、工厂等方式实例化,具备完整生命周期,支持初始化与销毁回调,提升应用的可维护性与灵活性。
410 5
关于SpringBean的个人学习总结
|
10月前
|
SQL Java 数据库
Spring事务学习总结
Spring通过`@Transactional`注解实现事务管理,应用于Service层,支持事务的开启、提交与回滚。支持多种事务属性,如回滚规则、传播行为等,常用传播行为为REQUIRED和REQUIRES_NEW,确保数据一致性与业务逻辑隔离。
352 2
|
10月前
|
缓存 Java Spring
JDK-CGLIB-反射
JDK动态代理基于接口,利用反射和Proxy实现;CGLIB通过ASM生成子类,支持无接口类代理,但无法代理final方法。二者性能随JDK版本变化,JDK8后差距缩小。Spring AOP根据是否有接口自动选择代理方式。Java反射机制则允许运行时获取类信息并动态操作对象,是动态代理的基础。
301 0
|
存储 搜索推荐 关系型数据库
ElasticSearch 详解
ElasticSearch 是一款优秀的开源搜索引擎,适用于大数据场景下的高效检索与分析。其分布式架构、实时搜索和灵活的数据分析功能使其能处理 PB 级数据量。相比 Solr,ES 在实时性、分布式架构和文档处理上更具优势。核心概念包括索引、文档、分片和副本等。ES 使用倒排索引实现快速搜索,区别于正向索引。与关系型数据库相比,ES 更适合非结构化数据和全文搜索。总结来说,ES 在电商搜索、日志分析等领域有广泛应用,未来有望带来更多创新。
936 19
|
10月前
|
SQL 缓存 Java
关于synchronized-reentrantlock-volatile学习总结1.0
`synchronized`是Java内置的原子性锁,基于Monitor实现,保证线程间操作的原子性、可见性与有序性。`ReentrantLock`是JUC提供的显式锁,支持公平/非公平、可中断、超时获取等高级功能。`volatile`仅保证变量可见性与禁止重排,适用于轻量级场景。三者各有适用场景,需根据需求选择。
220 14
|
11月前
|
监控 Java Spring
AOP 切面编程
AOP(面向切面编程)通过动态代理在不修改源码的前提下,对方法进行增强。核心概念包括连接点、通知、切入点、切面和目标对象。常用于日志记录、权限校验、性能监控等场景,结合Spring AOP与@Aspect、@Pointcut等注解,实现灵活的横切逻辑管理。
2528 6
AOP 切面编程
|
存储 安全 JavaScript
TypeScript-内置应用程序类型-Recode
通过使用 `Record` 类型,开发者可以显著提升代码的安全性和可维护性。无论是配置对象、字典结构还是动态表单,`Record` 类型都提供了一个简洁、类型安全的解决方案。
654 82
|
传感器 人工智能 Java
你知道数字电路的基础逻辑门电路吗,来拿下
基础逻辑门电路是数字电路的核心单元,包括与门、或门、非门、与非门、或非门、异或门和同或门。每种门电路执行特定的逻辑运算,产生相应的输出信号。例如,与门仅在所有输入为高电平时输出高电平;或门只要有一个输入为高电平就输出高电平;非门则对输入信号取反。这些门电路广泛应用于计算机CPU、报警系统、数据校验和同步电路中,是构建复杂数字系统的基石。
2284 0
你知道数字电路的基础逻辑门电路吗,来拿下
|
Oracle 关系型数据库 MySQL
OceanBase数据库简介
【8月更文挑战第9天】OceanBase数据库简介
1820 60