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

TCP连接与UDP协议

一、TCP的连接管理

1、TCP包头        

2、连接的建立——”三次握手”

  • TCP 建立连接的过程叫做握手。
  • 采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生TCP 连接建立错误

过程:

1、

2、

3、

4、

5、

6、

7、

总结:

三次握手(建立连接)

目的:确保双方都能发送和接收数据,同步序列号。

  1. 第一次握手(SYN)
    客户端发送一个SYN包(同步序列号),请求建立连接。
    包内容SYN=1, seq=x(x是客户端初始序列号)

  2. 第二次握手(SYN-ACK)
    服务器收到后,回复一个SYN-ACK包,表示同意建立连接,并同步自己的序列号。
    包内容SYN=1, ACK=1, seq=y, ack=x+1(y是服务器初始序列号)

  3. 第三次握手(ACK)
    客户端收到后,再发送一个ACK包确认,连接正式建立。
    包内容ACK=1, seq=x+1, ack=y+1

3、连接的释放——“四次挥手”

  • TCP 连接释放过程比较复杂。
  • 数据传输结束后,通信的双方都可释放连接。
  • TCP 连接释放过程是四报文握手

过程:

1、

2、

3、

4、

5、

总结:

目的:确保双方数据都传输完毕,安全关闭连接。

  1. 第一次挥手(FIN)
    客户端(或服务器)发送FIN包,表示“我没有数据要发了”,请求关闭连接。
    包内容FIN=1, seq=u

  2. 第二次挥手(ACK)
    对方收到后,回复一个ACK包,表示“知道了,但我可能还有数据要发”。
    包内容ACK=1, ack=u+1

  3. 第三次挥手(FIN)
    对方数据发完后,也发送一个FIN包,表示“我也发完了,可以关闭了”。
    包内容FIN=1, seq=v

  4. 第四次挥手(ACK)
    最初发起关闭的一方回复ACK,确认关闭。
    包内容ACK=1, ack=v+1

关键点对比:

阶段三次握手四次挥手
目的建立连接断开连接
标志位SYN, SYN-ACK, ACKFIN, ACK, FIN, ACK
状态双方建立通信通道双方安全释放资源

为什么挥手比握手多一次?

  • 握手:SYN和ACK可以合并为SYN-ACK(第二次握手)。

  • 挥手:被动关闭方可能需要等待数据发送完毕,因此ACK(第二次挥手)和FIN(第三次挥手)必须分开发送。

4、保活计时器

  • 用来防止在 TCP 连接出现长时期空闲。
  • 通常设置为 2 小时
  • 若服务器过了 2 小时还没有收到客户的信息,它就发送探测报文段。
  • 若发送了 10 个探测报文段(每一个相隔 75秒)还没有响应,就假定客户出了故障,因而就终止该连接。

二、用户数据报协议UDP

1、计算机网络体系结构

2、UDP协议

UDP只在IP的数据报服务之上增加了一些功能:

  1. 复用和分用
  2. 差错检测

3、UDP 的主要特点

  • 无连接。发送数据之前不需要建立连接
  • 使用尽最大努力交付。即不保证可靠交付
  • 面向报文。UDP 一次传送和交付一个完整的报文。
  • 没有拥塞控制。网络出现的拥塞不会使源主机的发送速率降低。很适合多媒体通信的要求。
  • 支持一对一、一对多、多对一、多对多等交互迥首部开销小,只有8个字节。

UDP 通信的特点:简单方便,但不可靠。

4、UDP是面向报文的

  • 发送方 UDP 对应用层交下来的报文,既不合并,也不拆分,按照原样发送
  • 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文

用户数据报 UDP 有两个字段:数据字段和首部字段首部字段有 8 个字节,由 4 个字段组成,每个字段都是 2 个字节。

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

相关文章:

  • 构建现代前端工程:Webpack/Vite/Rollup配置解析与最佳实践
  • C++20: std::span
  • 目标检测数据集 第005期-基于yolo标注格式的PCB组件检测数据集(含免费分享)
  • 【Ollama】本地OCR
  • 基于SpringBoot的校园信息共享系统【2026最新】
  • pod管理
  • scanner、arrylist、反转数组
  • FPGA 时序分析(五)
  • 十、redis 入门 之 redis事务
  • (Redis)主从哨兵模式与集群模式
  • 【机器学习】7 Linear regression
  • VScode设置鼠标滚轮调节代码
  • 嵌入式第三十六天(网络编程(TCP))
  • springboot项目搭建步骤
  • 【Flink】部署模式
  • Maven项目中settings.xml终极优化指南
  • Excel 表格 - 乘法与除法处理(保留两位小数四舍五入实现、保留两位小数截断实现、添加百分号)
  • 单片机外设(七)RTC时间获取
  • 深入解析Java NIO多路复用原理与性能优化实践指南
  • 重置MySQL数据库的密码指南(Windows/Linux全适配)
  • 基于springboot的理商管理平台设计与实现、java/vue/mvc
  • 得物25年春招-安卓部分笔试题1
  • Linux camera 驱动流程介绍(rgb: ov02k10)(chatgpt version)
  • AlmaLinux 上 Python 3.6 切换到 Python 3.11
  • EP02:【DA】数据分析的价值创造与应用流程
  • 基于SpringBoot的新能源汽车租赁管理系统【2026最新】
  • 【Linux文件系统】Linux文件系统与设备驱动
  • MySQL数据库精研之旅第十一期:打造高效联合查询的实战宝典(二)
  • python中的filter函数
  • 学习做动画1.简易行走