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

TCP/UDP 简介,三次握手与四次挥手

一、TCP 三次握手

目的:为了解决在不可靠的信道上建立可靠的网络连接
三次握手是连接请求的过程:
A 发送连接请求的数据给 B(发送 SYN 包)
B 同意连接,返回数据给 A(返回 SYN+ACK 包)
A 收到后回复数据给 B(返回 ACK 包),连接建立

以上过程不区分客户端和服务端,tcp 的连接是全双工的。两端均采用上述机制。

Q:为什么不是两次握手?

因为在不可靠的网络上可能会存在传输问题,
比如 A 的第一次连接请求没有到 B(网络滞留),又发送了一次连接请求;
B 收到了第二次的连接请求,这时建立起一条通信;
A 建立了一条通信,当第一次的请求到 B 以后,B会再次建立一条通信;
此时 B 有两条通信,造成了状态不一致

Q:一包数据被拆成多包发送,如何处理丢包问题?这些数据包到达的时间不同,如何处理乱序问题?

针对以上问题,
tcp 为每一个连接建立起一个发送缓冲区【0.1.2…N】
发送数据时,A 取一部分数据组成发送报文(在这个报文中会附带 序列号 + 长度)
B 在收到数据后,需要回复确认报文 ACK = 序列号 + 长度,也就是下一包的起始序列号
这样 A 可以分多段发送数据给 B,B 只需要返回一次报文确认即可
如果数据中有丢失的数据,则 B 端会返回报文要求 A 端重发,B 端会处理乱序问题

二、什么是四次挥手

处于连接状态的客户端和服务端,都可以发起关闭连接请求。
A 想主动结束连接,需要向 B 发送一次请求(FIN包),进入终止等待1状态(第一次挥手)
B 收到后,返回一个 ACK 包,进入关闭等待状态,A进入终止等待2状态(第二次挥手)
AB 此时还可以发送数据,B在数据接收完以后,返回 FIN 包,B进入关闭等待状态(第三次挥手)
A 收到关闭信息后返回 ACK 包,并且进入超时等待状态,超时后关闭连接,B收到信息后回立即关闭连接(第四次挥手)

Q:为什么A需要等待超时连接?

这是为了保证 B 已经收到 ACK 包(第四次挥手),一旦ACK包在网络中丢失,B会一直停留在最后确认状态;
如果 B 此时没有收到A发送来的 ACK 包,会重发 FIN包(三次挥手时机)
客户端会响应这个 FIN 包,并且重发 ACK 包,并刷新超时时间
这个机制也是为了保障在不可靠的网络中进行连接断开确认

什么是 UDP 协议?

UDP 协议是直接将一组数据通过网卡发送出去,不需要连接,所以是无状态的;同时性能损耗小,资源占用少,缺点是稳定性弱。

区别对比
稳定性资源占用速度应用场景
TCP稳定较多相对较慢传输文件、发送邮件、浏览网页等
UDP弱(无状态)快(存在丢包风险)域名查询、语音、视频通话、直播场景等
UDP还用于隧道网络(例如 VPN、SDN 中的 VXLAN)
三次握手:

A: 上号
B:ok
A:等你

四次挥手:

A:分手吧
B:好
B:再见
A:拜

http://www.dtcms.com/a/20006.html

相关文章:

  • 使用瑞芯微RK3588的NPU进行模型转换和推理
  • Python使用OpenCV图片去水印多种方案实现
  • Redis问题排查常用命令
  • C#多线程异步连接MySQL与SQLserver数据库
  • E卷-MELON的难题-(200分)
  • 功能说明并准备静态结构
  • 硕成C语言22【一些算法和数组的概念】
  • 【C++】哈希、unordered_map与unordered_set的模拟实现
  • AcWing——3624. 三值字符串
  • windows配置永久路由
  • VMware vSphere数据中心虚拟化——vCenter Server7.0安装部署
  • 【ARM】解决ArmDS Fast Models 中部分内核无法上电的问题
  • 深入理解 Qt 信号与槽机制:原理、用法与优势
  • Spring Boot 携手 DeepSeek:开启智能交互新时代
  • C语言进阶习题【3】(5 枚举)——找单身狗2
  • 3DsMax快捷键
  • 【kafka系列】Kafka事务的实现原理
  • VSCode C/C++ 开发环境完整配置及常见问题(自用)
  • java枚举类型的查找
  • USC 安防平台之移动侦测
  • github上文件过大无法推送问题
  • 智能编程助手功能革新与价值重塑之:GitHub Copilot
  • 今日写题work05
  • Autojs: 使用 SQLite
  • Word中打开开发工具【修改日期控件显示格式】
  • C#学习之S参数读取(s2p文件)
  • 如何预防DDOS攻击
  • 多模态本地部署ConVideoX-5B模型文生视频
  • 深入理解 Rust 的迭代器:从基础到高级
  • JZ39 数组中出现次数超过一半的数字 (Boyer-Moore 投票算法)候选法