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

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录

  • 传输层协议概述
    • 为什么需要传输层?
    • 传输层功能
      • 网络层与传输层在实现 “端到端” 传输的异同
      • 两类服务:面向连接/无连接服务
  • 传输控制协议 TCP
    • TCP 协议数据单元格式
    • TCP 的重传机制
      • 快重传和快恢复
        • 快重传举例
        • 快恢复算法
  • 用户数据报协议 UDP
    • UDP 概述
    • UDP 基本工作过程
    • UDP 用户数据报的首部(Head)格式
  • TCP 与 UDP 的比较

传输层协议概述

在这里插入图片描述

为什么需要传输层?

  • OSI网络层是通过 “逐节点”(Hop-by-Hop)实现源主机到目的主机间网络协议数据单元(Internet 中的 IP)的 “端到端” 传输的。即使网络层在节点间提供服务确认,仍不能保障 “端到端” 可靠传输(如果中间节点对收到的数据确认后,在前传前出现节点故障)。
  • 网络层地址仅能标识网络设备或端系统的网络端口,不能作为标识系统内部的多个应用进程(用户平台的应用进程或信控管理平台的特殊应用进程)的标识符,因此需要应用进程传输层标识符(TSAP);在 Internet 中称为 “端口号”。
    在这里插入图片描述

传输层功能

  • 连接管理
  • 流量控制
  • 差错检测
  • 对用户请求的响应
  • 建立无连接或面向连接的通信
    — 面向连接:会话建立、数据传输、会话拆除
    — 无连接:不保证数据的有序到达

网络层与传输层在实现 “端到端” 传输的异同

  • 网络层(主机间):通过通信子网中中继系统逐级转发实现的 “源”、“目的” 主机间物理上的 “端到端” 的用户数据的传输。但网络层协议通常只定义节点间的转发过程,因此网络层协议执行过程不是 “端到端” 直接通信,而是 “逐级”(Hop-by-Hop)转发实现的物理上的端到端通信。
  • 传输层(应用进程间):由于用户数据在通信子网的用户数据平台上没有传输层实体,因此,应用进程利用传输层实现进程间的传输只是概念上/逻辑上的 “端到端” 的 “直接传输”。物理上仍然利用网络层逐级实现的端到端服务。

两类服务:面向连接/无连接服务

  • 提供面向连接服务的协议:TCP (Transmission Control Protocol) - RFC 973
  • 提供无连接服务的协议:UDP (UserDatagram Protocol) - RFC 768

传输控制协议 TCP

客户(主动请求) / 服务器(被动响应)工作模式:

建立连接:通过三次握手方式建立连接。
在这里插入图片描述
数据传输

  • 基本数据传输:能连续、双向传输字节流。
  • 提供敦促接收方迅速将收到的数据提交应用进程的功能(PUSH)。
  • 可靠性:数据损坏、丢失、重复和错序必须能恢复(机制:以字节为基础的序号、正确接收确认(ACK)、重传时钟、检错)。
  • 流量控制:窗口可变的 “滑动窗口” 流控方式,窗口大小以 “字节” 为基础。

连接拆除
请求拆除、两次拆除确认等待、请求方在确认的方式。
在这里插入图片描述

TCP 协议数据单元格式

在这里插入图片描述
源端口和目的端口字段
各占 2 字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。

序号字段
占 4 字节。TCP 连接中传输的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

确认号字段
占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

数据偏移
占 4 bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移” 的单位不是字节而是 32 bit 字(4 字节为计算单位)。

保留字段
占 6 bit,保留为今后使用,但目前应置为 0。

紧急比特 URG
当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传输(相当于高优先级的数据)。

确认比特 ACK
只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。

推送比特 PSH(PuSH)
接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。

复位比特 RST(ReSeT)
当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。

同步比特 SYN
同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。

终止比特 FIN(FINal)
用来释放一个连接。当 FIN = 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放传输连接。

窗口字段
占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。

检验和
占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。

紧急指针字段
占 16 bit。紧急指针指出:在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

选项字段
长度可变。TCP 只规定了一种选项,即最大报文段长度 MSS(Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节”。MSS 是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。

填充字段
这是为了使整个首部长度是 4 字节的整数倍。

TCP 的重传机制

重传机制是 TCP 中最重要和最复杂的问题之一。

TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。

快重传和快恢复

快重传算法规定,发送端只要一连收到三个重复的 ACK 即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。

不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

快重传举例

在这里插入图片描述

快恢复算法
  1. 当发送端收到连续三个重复的 ACK 时,就重新设置慢开始门限 ssthresh。
  2. 与慢开始不同之处是拥塞窗口 cwnd 不是设置为 1,而是设置为 ssthresh + 3 x MSS。
  3. 若收到的重复的 ACK 为 n 个(n>3),则将 cwnd 设置为 ssthresh + n x MSS。
  4. 若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。
  5. 若收到了确认新的报文段的 ACK,就将 cwnd 缩小到 ssthresh。

用户数据报协议 UDP

UDP 概述

UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。

虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。

  • 发送数据之前不需要建立连接。
  • UDP 的主机不需要维持复杂的连接状态表。
  • UDP 用户数据报只有 8 个字节的首部开销。
  • 网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。

UDP 基本工作过程

UDP 数据报的发送和接收通过 UDP 端口实现
端口是一个可读写的结构,具有内部的报文缓冲区;

数据报发送
UDP 软件将用户数据封装在 UDP 数据报中;
转交给 IP 软件,进行 IP 封装和转发;

数据报的接收
IP 层接收到 UDP 数据报, 提交给 UDP 软件的各端口;
端口判断该报文的目的端口号是否与当前端口匹配;
若匹配成功,将该数据报保存到相应端口的接收队列中;(若队列已满,则丢弃该数据报)
若未匹配,则丢弃该数据报,同时向源端发送 “端口不可达” 的 ICMP 包。

在这里插入图片描述

UDP 用户数据报的首部(Head)格式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

TCP 与 UDP 的比较

  • TCP 提供可靠的,面向连接的传输服务
  • UDP 提供不可靠的,无连接的传输服务
  • TCP 是面向流的协议;UDP 是基于数据报的协议
  • TCP 适用于一次传送大批量的数据
  • UDP 适用于多次少量数据的传输,实时性要求高的业务
  • 使用 TCP 传输的应用程序和协议包括:
    FTP
    Telnet
    ΗΤΤΡ
  • 使用 UDP 传输的应用程序和协议包括:
    RIP
    TFTP
    SNMP

相关文章:

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层?传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…...

基于Spark抖音评论舆情分析系统

✔️情绪分析、文本挖掘、文本分类,词频统计、情感分析,词云制作,词语共现网络图、人物关系网络建立等 ✔️主营:指导解答anaconda、python数据分析、数据挖掘、词频统计、词云、情感分析、python机器学习、Flask Django web、jup…...

JAVA系列之数组的秘密(数组的一般用法+力扣 斯坦福大学练习精解)

大佬们好呀~ 更多精彩: 个人主页 JAVA专栏 文章目录 一、数组的概述1.1什么是数组?1.2注意:1.3建议: 二、数组的定义1.格式: 三、数组的静态初始化1.数组的初始化:2.静态初始化:格式:数组的长度&#xff1a…...

探索飞鹤奶粉奥秘,领会科技魅力

在科技迅猛发展的当下,AI 技术正深刻重塑各行业格局。乳制品行业亦不例外。近日,长江商学院「AI 未来空间站」的同学们深入走访了飞鹤集团,探寻其在数字化浪潮中的创新实践与卓越成就。 在飞鹤的智能化生产车间,同学们目睹了高度自…...

【数据仓库】StarRocks docker部署

StarRocks docker部署 一、环境准备安装 docker 及 docker-compose操作系统相关禁用及配置【CentOS Linux 7 (Core)】 二、StarRocks-v2.5【存算一体,3FE,3BE】BE节点配置FE节点配置服务启动BE节点添加FE 节点添加 三、监控(待完善)四、VIP Nginx Keepalived(待完善)五、Star…...

Java虚拟机面试题:内存管理(下)

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

R语言用逻辑回归贝叶斯层次对本垒打数据与心脏移植数据后验预测检验模拟推断及先验影响分析|附数据代码...

全文链接:https://tecdat.cn/?p40152 在统计学领域中,层次建模是一种极为强大且实用的工具。它能够巧妙地处理复杂的数据结构,通过分层的方式对数据进行建模。在贝叶斯统计的框架内,层次建模优势尽显,其可以有效地融合…...

网页制作02-html,css,javascript初认识のhtml的文字与段落标记

用一首李白的将进酒,对文字与段落标记进行一个简单的介绍演示: 目录 一、标题字 1、标题字标记h 2、标题字对其属性align 二、文本基本标记 1、字体属性face 2、字号属性size 3、颜色属性 Color 三、文本格式化标记 1、粗体标记 b ,strong 2、…...

【SpringBoot苍穹外卖】debugDay04

一、getById 与 new 我在修改数据时,产生疑问,注释掉是我一开始写得,new对象是答案提供的,我就好奇两者之间区别。 1. 使用 setmealMapper.getById 获取现有对象 Setmeal setmeal setmealMapper.getById(setmealDTO.getId()); …...

C++中的顺序容器(一)

文章目录 顺序容器概述所有容器类型都支持的操作迭代器容器定义与初始化将一个容器初始化为另一个容器的拷贝标准库array具有固定大小 赋值和swap关系运算符 顺序容器的特有操作向顺序容器添加元素访问元素删除元素特殊的forward_list操作改变容器的大小容器操作可能是迭代器失…...

【复现DeepSeek-R1之Open R1实战】系列4:跑通GRPO!

目录 1 配置环境2 训练2.1 命令和配置参数2.2 num_generations2.2.1 参数定义2.2.2 参数含义2.2.3 示例2.2.4 使用场景2.2.5 示例代码 2.3 显存占用和耗时 3 结果 1 配置环境 关于环境配置,可以参考这篇博文:【复现DeepSeek-R1之Open R1实战】系列1&…...

Redis原理简述及发布订阅消息队列

目录 1 什么是Redis 2 Redis 非阻塞IO内部原理 2.1 IO多路复用策略 2.2 Reactor设计模式 3 基于PubSub的消息队列(发布-订阅) 由于集群之后存在多台服务器,并且不同客户端连接的可能是不同的服务器,因此在聊天过程中涉及到服…...

ThreadLocal为什么会内存溢出

每个线程(Thread 对象)内部维护一个 ThreadLocalMap,用于存储该线程的所有 ThreadLocal 变量的键值对: ThreadLocalMap虽然是ThreadLocal的静态内部类,但是Thread 对象的属性,当线程存活时ThreadLocalMap不会被回收。 Key:ThreadLocal 实例的 弱引用(WeakReference)。…...

假面与演员:到底是接口在使用类,还是类在使用接口?编程接口与物理接口的区别又是什么?

前言:本篇文章解释了接口学习过程中的2个常见问题,一个是“为什么是类在使用接口”,另一个一个是“编程接口与物理接口的差异源于所处的抽象层次和交互模式的不同”,旨在揭示编程接口的本质。 Part1.是类在使用接口 当学习接口时…...

数据结构——Makefile、算法、排序(2025.2.13)

目录 一、Makefile 1.功能 2.基本语法和相关操作 (1)创建Makefile文件 (2)编译规则 (3)编译 (4)变量 ①系统变量 ②自定义变量 二、 算法 1.定义 2.算法的设计 &#xff…...

算法之 跳跃游戏

文章目录 55.跳跃游戏思路参考:56.合并区间 55.跳跃游戏 55.跳跃游戏 灵神思路 思路分析: 两种思路,思路1是我们可以直接维护当前到达i的时候所能到达的最右的边界mr,如果i>mr就说明无法到达i,否则就是可以到达;…...

C#中的图形渲染模式

在C#中,图形模式通常用于定义如何渲染或处理图形。可以枚举定义如下四种图形模式:AUTO、GDI、DIB 和 FBO。这些模式可能用于指定不同的图形渲染技术或后端。下面是对这些模式的详细解释: 1. AUTO (自动模式) 含义:自动选择最适合…...

二.数据治理流程架构

1、数据治理流程架构核心思想: 该图描绘了一个以数据标准规范体系为核心,大数据生命周期管理为主线,数据资源中心为依托,并辅以数据质量管理和大数据安全与隐私管理的数据治理流程架构。它旨在通过规范化的流程和技术手段&#x…...

瑞萨RA-T系列芯片ADCGPT功能模块的配合使用

在马达或电源工程中,往往需要采集多路AD信号,且这些信号的优先级和采样时机不相同。本篇介绍在使用RA-T系列芯片建立马达或电源工程时,如何根据需求来设置主要功能模块ADC&GPT,包括采样通道打包和分组,GPT触发启动…...

扩散模型中的马尔可夫链设计演进:从DDPM到Stable Diffusion全解析

一、技术原理与数学推导(附核心公式) 1.1 扩散过程数学建模 马尔可夫链前向过程定义: q(x_{1:T}|x_0) \prod_{t1}^T q(x_t|x_{t-1})噪声调度函数(以余弦调度为例): \beta_t \frac{1 - \cos(\pi t/T)}…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...