当前位置: 首页 > news >正文

TCP和UDP


TCP(传输控制协议)

1. 特点

面向连接:通信前需要建立连接,通信后需要释放连接。
可靠传输:通过确认机制、重传机制、流量控制和拥塞控制确保数据可靠传输。
有序传输:数据按发送顺序到达接收方。
面向字节流:将数据视为无结构的字节流,不保留消息边界。
适用场景:对可靠性要求高的应用,如 HTTP、FTP、SMTP 等。


2. TCP 三次握手(建立连接)

三次握手用于确保客户端和服务器双方都准备好通信。

过程:
  1. 第一次握手(SYN=1, seq=x)
    • 客户端向服务器发送 SYN 报文,请求建立连接,并随机生成一个初始序列号 x
    • 客户端进入 SYN_SENT 状态。

  2. 第二次握手(SYN=1, ACK=1, seq=y, ack=x+1)
    • 服务器收到 SYN 报文后,向客户端发送 SYN+ACK 报文,确认客户端的请求,并随机生成一个初始序列号 y
    • 服务器进入 SYN_RCVD 状态。

  3. 第三次握手(ACK=1, seq=x+1, ack=y+1)
    • 客户端收到 SYN+ACK 报文后,向服务器发送 ACK 报文,确认服务器的响应。
    • 双方进入 ESTABLISHED 状态,连接建立完成。

图示:
Client                            Server
  |                                 |
  |        SYN, seq=x               |
  | ----------------------------->  |
  |                                 |
  |      SYN+ACK, seq=y, ack=x+1    |
  | <-----------------------------  |
  |                                 |
  |        ACK, seq=x+1, ack=y+1    |
  | ----------------------------->  |
  |                                 |

3. TCP 四次挥手(释放连接)

四次挥手用于确保双方都同意关闭连接。

过程:
  1. 第一次挥手(FIN=1, seq=u)
    • 客户端向服务器发送 FIN 报文,请求关闭连接。
    • 客户端进入 FIN_WAIT_1 状态。

  2. 第二次挥手(ACK=1, seq=v, ack=u+1)
    • 服务器收到 FIN 报文后,向客户端发送 ACK 报文,确认客户端的关闭请求。
    • 服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。

  3. 第三次挥手(FIN=1, seq=w, ack=u+1)
    • 服务器向客户端发送 FIN 报文,请求关闭连接。
    • 服务器进入 LAST_ACK 状态。

  4. 第四次挥手(ACK=1, seq=u+1, ack=w+1)
    • 客户端收到 FIN 报文后,向服务器发送 ACK 报文,确认服务器的关闭请求。
    • 客户端进入 TIME_WAIT 状态,等待 2MSL(最大报文段生存时间)后关闭连接。
    • 服务器收到 ACK 报文后,立即关闭连接。

图示:
Client                            Server
  |                                 |
  |        FIN, seq=u               |
  | ----------------------------->  |
  |                                 |
  |        ACK, seq=v, ack=u+1      |
  | <-----------------------------  |
  |                                 |
  |        FIN, seq=w, ack=u+1      |
  | <-----------------------------  |
  |                                 |
  |        ACK, seq=u+1, ack=w+1    |
  | ----------------------------->  |
  |                                 |

4. TCP 的优缺点

优点:可靠、有序、支持流量控制和拥塞控制。
缺点:建立和释放连接开销大,传输效率较低。


UDP(用户数据报协议)

1. 特点

无连接:通信前无需建立连接,直接发送数据。
不可靠传输:不保证数据可靠到达,不提供确认、重传、排序机制。
面向报文:保留消息边界,每次发送一个完整的报文。
高效传输:开销小,传输速度快。
适用场景:对实时性要求高、允许少量数据丢失的应用,如视频流、语音通话、DNS 等。


2. UDP 的优缺点

优点:传输效率高,延迟低,适合实时应用。
缺点:不可靠,不保证数据顺序和完整性。


TCP 和 UDP 的对比

特性TCPUDP
连接方式面向连接无连接
可靠性可靠传输不可靠传输
传输效率较低较高
数据顺序保证顺序不保证顺序
报文边界面向字节流面向报文
适用场景HTTP、FTP、SMTP 等视频流、语音通话、DNS 等

总结

TCP:适合对可靠性要求高的应用,如文件传输、网页浏览等。
UDP:适合对实时性要求高的应用,如视频流、在线游戏等。

相关文章:

  • python JSON模块
  • VS(visual studio 2022)的实用调试小技巧[特殊字符]
  • 《 C++ 修炼全景指南:二十六 》想懂数据库?深入 B 树的世界,揭示高效存储背后的逻辑
  • 低空经济-飞行数据平台 搭建可行方案
  • Unity DOTS从入门到精通之 自定义Authoring类
  • 1:1精准还原!用Python+Adobe Acrobat DC实现PDF转Word全自动化
  • 【Git】合并,删除分支
  • JVM - 3.垃圾回收
  • 启智平台华为昇腾910B使用MS-Swift微调Janus-Pro-7/1B
  • Spring(1)——mvc概念,部分常用注解
  • CS6212规格书/USB Type-C Retimer Switch芯片规格详细说明
  • cheby kan网络 与代码学习
  • Android打造易用的 WiFi 工具类:WifiUtils 封装实践
  • 深度学习 PyTorch 中 18 种数据增强策略与实现
  • 40岁开始学Java:如何实现依赖注入?
  • vue+element-plus简洁完美实现古诗文网
  • VSCode配置优化指南:构建高效工程级开发环境
  • Linux操作系统6- 线程1(线程基础,调用接口,线程优缺点)
  • 学习笔记:利用OpenAI实现阅卷智能体
  • AcWing 5438. 密接牛追踪2 区间覆盖问题的详细解释
  • 综艺还有怎样的新可能?挖掘小众文化领域
  • 总粉丝破亿!当网络大V遇见硬核科技,互联网时代如何书写上海故事?
  • 习近平出席俄罗斯纪念苏联伟大卫国战争胜利80周年庆典
  • 心相印回应官方旗舰店客服辱骂消费者:正排查
  • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长
  • 中俄元首今年首次面对面会谈,达成哪些新的重要共识?