计算机网络--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......

相关文章
|
14天前
|
SQL 缓存 Java
关于synchronized-reentrantlock-volatile学习总结1.0
`synchronized`是Java内置的原子性锁,基于Monitor实现,保证线程间操作的原子性、可见性与有序性。`ReentrantLock`是JUC提供的显式锁,支持公平/非公平、可中断、超时获取等高级功能。`volatile`仅保证变量可见性与禁止重排,适用于轻量级场景。三者各有适用场景,需根据需求选择。
72 14
|
存储 API
一种新的方法来存储用户信息——ThreadLocal
一种新的方法来存储用户信息——ThreadLocal
1709 0
|
6天前
|
运维 安全 API
当安全事件不再“靠人吼”:一文带你搞懂 SOAR 自动化响应实战
当安全事件不再“靠人吼”:一文带你搞懂 SOAR 自动化响应实战
83 10
url参数值中有+、空格、%20、%2b
url参数值中有+、空格、%20、%2b
1445 0
|
8天前
|
API 定位技术 图形学
《突破Unity热更新瓶颈:底层函数调用限制与生态适配秘籍》
本文聚焦Unity热更新开发中底层函数调用受限的核心痛点,深入剖析限制根源—热更新沙箱机制与底层函数对原生层上下文、权限的依赖形成“能力断层”,而非函数本身不可用。提出两类实用破局方案:一是“功能分层承载”,将底层依赖逻辑迁移至原生层,通过封装接口实现热更新与原生层联动;二是“核心功能复刻”,在热更新权限内组合高层API模拟底层函数效果。强调前期建立“热更新功能适配地图”的重要性,从设计阶段规避调用风险。指出热更新开发的核心是平衡动态迭代与引擎规则,通过适配而非强行突破边界,实现功能落地与系统稳定,为开发者提供兼具深度与实用性的技术思路。
61 13
|
10天前
|
机器学习/深度学习 人工智能 运维
别只盯着 CPU 爆了!一篇文章带你看懂:从指标到根因的 AIOps 自动化故障定位流水线
别只盯着 CPU 爆了!一篇文章带你看懂:从指标到根因的 AIOps 自动化故障定位流水线
125 15
|
8天前
|
Web App开发 JSON JavaScript
测试框架跃迁:从 Selenium 到 Playwright 的实战指南
本文详细介绍了从Selenium迁移到Playwright的实战指南。通过对比二者核心差异,提供环境搭建、API迁移对照及高级特性转换方案。迁移后测试速度可提升40%,代码维护成本降低30%,显著改善稳定性问题。文章包含常见问题解决和性能优化技巧,为团队平滑升级测试框架提供了系统化路径。
|
3天前
|
机器学习/深度学习 弹性计算 人工智能
最新版:云服务器租用价格表(一年/按月/按小时报价明细)
阿里云服务器主要包含轻量应用服务器、云服务器 ECS 和 GPU 服务器三大类,不同类型、配置及计费方式的价格存在差异。以下结合最新信息,整理各类服务器的收费标准、价格构成及不同场景下的参考价格,为用户成本核算提供依据。
|
4天前
|
人工智能 JSON 安全
构建AI智能体:四十九、MCP 生态的革命:FastMCP 如何重新定义 AI 工具开发
FastMCP是一个基于MCP协议的高性能Python框架,旨在简化AI模型与外部工具的集成开发。它通过装饰器、类型提示等现代Python特性,将MCP协议的标准化要求转化为Pythonic的开发体验。核心功能包括:工具注册(@mcp.tool)、资源管理(@mcp.resource)和提示词模板,支持自动生成JSONSchema、异步任务调度和错误处理。FastMCP通过三层架构(应用层、核心引擎、协议适配层)实现高效开发,典型应用场景如"AI调用计算器工具"只需简单装饰器即可完成工具
|
22天前
|
存储 运维 Serverless
Serverless 不是“无服务器”,而是“别再让服务器绑架你的创新”
Serverless 不是“无服务器”,而是“别再让服务器绑架你的创新”
90 11