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

TCP与UDP

一,TCP的介绍

1,TCP定义

TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。

TCP 的特点可以用 “可靠、有序、面向连接” 三个词概括,而 “字节流” 是理解 TCP 数据传输方式的核心概念。

2,特点

重传和等待2MSL

TCP把数据字节流分块,数据丢失没返回时,上一个握手会重新传输

TCP最后断开连接时要等待2MSL,确保服务端收到并且断开连接

  • 传输控制协议

  • 可靠的、面向连接的协议

  • 传输效率低

二,TCP的工作原理

1,协议各层图

2,TCP的封装格式图

1. 定位应用程序:源端口号 + 目的端口号(共 4 字节)
  • 源端口号(16 位):
    TCP 靠这两个端口,把数据准确交给 “发送方的某个程序” 和 “接收方的某个程序”(比如把浏览器的请求交给服务器的 80 端口 HTTP 服务)。

2. 保证数据有序和可靠:序列号 + 确认号(共 8 字节)
  • 序列号(seq):
    如果要传 1000 字节数据,拆成两个段,第一段含 500 字节,序列号 = 1;第二段含 500 字节,序列号 = 501。
    作用:接收方按序列号重组数据,解决 “乱序到达” 问题。

  • 确认号(ack):
    接收方收到序列号 1-500 的数据,会回复确认号 = 501(意思是 “1-500 已收,该发 501 了”)。
    作用:实现 “确认机制”,让发送方知道哪些数据已被接收,避免重复传输。

3. 头部控制:数据偏移 + 保留位 + 控制位(共 4 字节)
  • 控制位(6 位):
    6 个二进制位,每个位代表一个控制功能,决定 TCP 段的 “类型”(如连接、数据、断开等):

    • URG(紧急指针有效):为 1 时,“紧急指针” 字段有效(表示数据中有紧急内容,如中断信号)。

    • ACK(确认有效):为 1 时,“确认号” 字段有效(几乎所有数据传输阶段的报文都设为 1)。

    • PSH(推送数据):为 1 时,接收方应立即把数据交给应用层(不缓存),适合实时性要求高的场景(如命令行输入)。

    • RST(重置连接):为 1 时,表示强制断开连接(如接收方收到无效报文,要求重新建连)。

    • SYN(同步序列号):为 1 时,表示这是 “建立连接” 的请求(三次握手的关键标志)。

    • FIN(结束连接):为 1 时,表示 “数据已发完,请求断开连接”(四次挥手的关键标志)。

4. 流量控制:窗口大小(2 字节)
  • 窗口大小(16 位):
    接收方缓冲区剩余 1000 字节,窗口大小 = 1000 → 发送方最多发 1000 字节,直到接收方处理完数据并更新窗口大小。
    作用:实现 “流量控制”,协调发送方和接收方的速度。

5. 数据校验与紧急处理:校验和 + 紧急指针(共 4 字节)
  • 校验和(16 位):
    检测数据在传输中是否被篡改或损坏。

  • 紧急指针(16 位):
    TCP 段总长度 500 字节,紧急指针 = 100 → 前 100 字节是紧急数据,接收方应优先处理。

三,TCP传输的实现

1,TCP连接,三次握手

大写为标志位,确认是否收到请求确认或判断错误

小写的为序列号,确认或符合规则后,标志位输出做个标记

1,第一次握手

Host A向Host B发送链接请求,同步标志位SYN=1,随机序列号seq,假设为100

2,第二次握手

Host B收到seq,确认标志位ACK=1,ack同步序列号100+1,接受Host A连接请求,同步标志位SYN=1

同时向Host A发送一个随机序列号seq为300

3,第三次握手

确认ack=100+1同步序列号,同步标志位ACK=1,确认序列号seq=300+1

2,TCP断开,四次握手

2,断开连接,四次挥手
1,第一次挥手

Host A发起挥手请求,向Host B端发送标志位是FIN报文段,设置序列号seq,此时,Host A进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。

2,第二次分手

Host B收到了Host A发送的FIN报文段,向Host A返回一个标志位是ACK的报文段,ack设为seq加1,Host A进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。

3,第三次分手

Host B向Host A发送标志位是FIN的报文段,请求关闭连接,同时Host B进入LAST_ACK状态。

4,第四次分手 

Host B收到Host A发送的FIN报文段,向Host A发送标志位是ACK的报文段,然后Host B进入TIME_WAIT状态。Host B收到Host A的ACK报文段以后,就关闭连接。此时,Host A等待2MSL的时间后依然没有收到回复,则证明Host B已正常关闭,那好,Host A也可以关闭连接了。

四,UDP

1,UDP定义

UDP 的全称是用户数据报协议(User Datagram Protocol),是 TCP/IP 协议族中位于传输层的核心协议之一,直接基于 IP 协议(网络层)工作。

其本质是一种 **“轻量级、无连接的数据传输协议”**—— 它不建立端到端的可靠连接,仅负责将应用层发送的 “数据块”(称为 “数据报”)封装后,通过 IP 协议转发到目标主机,不对传输过程中的可靠性、顺序性做任何保障。

2,UDP原理
字段名称长度(字节)核心作用
源端口号(Source Port)2标识发送方的应用进程(如客户端端口),可选(若不需要接收方回复,可设为 0)
目的端口号(Destination Port)2标识接收方的应用进程(如服务器端口,必须正确,否则无法交付到目标应用)
UDP 长度(UDP Length)2表示整个 UDP 数据报的总长度(头部 8 字节 + 数据载荷长度),单位是字节
校验和(Checksum)2可选字段(IPv4 中可选,IPv6 中必选),用于检测 UDP 数据报是否在传输中损坏
3,UDP特点
对比维度UDP(用户数据报协议)TCP(传输控制协议)
连接性无连接面向连接(三次握手建立,四次挥手释放)
传输可靠性不可靠(不确认、不重传、不排序)可靠(确认、重传、排序、流量控制、拥塞控制)
数据单位面向数据报(每个数据报独立)面向字节流(无固定单位,按字节拼接 / 拆分)
头部长度固定 8 字节最小 20 字节,最大 60 字节(含选项)
开销极低(无连接管理、无重传等开销)较高(连接管理、重传、滑动窗口等额外开销)
延迟低(无连接建立延迟,无重传延迟)高(连接建立延迟、丢包后重传延迟)
端口号用源 / 目的端口标识应用进程用源 / 目的端口标识应用进程
支持的通信方式点对点、广播、多播仅支持点对点(一对一)
应用场景实时通信、广播 / 多播、短请求响应文件传输、网页加载、邮件(需可靠传输的场景)


文章转载自:

http://zdT18QtC.xjpnq.cn
http://CRz2WwdT.xjpnq.cn
http://nx5rqKwG.xjpnq.cn
http://d55u85GD.xjpnq.cn
http://3Vs1Rl11.xjpnq.cn
http://AbdJxXkr.xjpnq.cn
http://paGoMXw2.xjpnq.cn
http://qAtTTzjg.xjpnq.cn
http://XhChWpum.xjpnq.cn
http://wKALTCc0.xjpnq.cn
http://Zy2DVhJA.xjpnq.cn
http://50nuLcIV.xjpnq.cn
http://nOTSbB7P.xjpnq.cn
http://LcQWtNq6.xjpnq.cn
http://rYFegG83.xjpnq.cn
http://DplURDha.xjpnq.cn
http://wOe8oneE.xjpnq.cn
http://jmGKw3Zn.xjpnq.cn
http://9GZSb9ra.xjpnq.cn
http://73UarO02.xjpnq.cn
http://iWWXEGSj.xjpnq.cn
http://s1LktYYv.xjpnq.cn
http://5bWNyj91.xjpnq.cn
http://ydR1KApJ.xjpnq.cn
http://8KUlJy0J.xjpnq.cn
http://rKvYa0p4.xjpnq.cn
http://DRDEQNJ9.xjpnq.cn
http://Eczb6TxH.xjpnq.cn
http://FF5lTcZe.xjpnq.cn
http://7nI9mw7t.xjpnq.cn
http://www.dtcms.com/a/382733.html

相关文章:

  • 【WebSocket✨】入门之旅(六):WebSocket 与其他实时通信技术的对比
  • 华为防火墙隧道配置
  • 使用 Matplotlib 让排序算法动起来:可视化算法执行过程的技术详解
  • 【C++深学日志】C++编程利器:缺省参数、函数重载、引用详解
  • 晶体管:从基础原理、发展历程到前沿应用与未来趋势的深度剖析
  • CentOS7 安装 Jumpserver 3.10.15
  • jquery 文件上传 (CVE-2018-9207)漏洞复现
  • QML Charts组件之折线图的鼠标交互
  • 工程机械健康管理物联网系统:AIoT技术赋能装备全生命周期智能运维​
  • 第5课:上下文管理与状态持久化
  • SpringBootCodeGenerator使用JSqlParser解析DDL CREATE SQL 语句
  • 【WebSocket✨】入门之旅(五):WebSocket 的安全性
  • PHP使用echarts制作一个很漂亮的天气预报网站(曲线图+实况+未来一周预报)
  • 数据库造神计划第九天---增删改查(CRUD)(5)
  • 简单的折叠cell
  • 贪心算法在边缘计算卸载问题中的应用
  • pyAutoGUI 模块主要功能介绍-(2)键盘功能
  • 基于Qt Creator的Serial Port串口调试助手项目(代码开源)
  • Node.js 编码规范
  • Spring Boot 调度任务在分布式环境下的坑:任务重复执行与一致性保证
  • 【数据结构】 ArrayList深入解析
  • 4. 数系
  • 08 函数式编程
  • 安卓 Google Maps 的使用和开发步骤
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十三章知识点问答(15题)
  • 深入理解 Spring @Async 注解:原理、实现与实践
  • 【Qt开发】显示类控件(三)-> QProgressBar
  • 《Linux——gflags》
  • leetcode35.搜索插入位置
  • Java调用UniHttp接口请求失败?一次开源的深入实践-百度SN签名认证场景下参数乱序问题的三种解决策略