以太网详解(八)传输层协议: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20052.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪吃蛇游戏

贪吃蛇 一、html <div class"container" id"app"></div><script src"./js/index.js"></script>二、css * {margin: 0;top: 0;} .set {margin: 15px auto;width: 600px; } .container {width: 600px;height: 600px;bac…

【动态路由】系统Web URL资源整合系列(后端技术实现)【apisix实现】

需求说明 软件功能需求&#xff1a;反向代理功能&#xff08;描述&#xff1a;apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…

Spring Boot(七):Swagger 接口文档

1. Swagger 简介 1.1 Swagger 是什么&#xff1f; Swagger 是一款 RESTful 风格的接口文档在线自动生成 功能测试功能软件。Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。目标是使客户端和文件系统作为服务器以同样的…

MongoDB 7 分片副本集升级方案详解(上)

#作者&#xff1a;任少近 文章目录 前言&#xff1a;Mongodb版本升级升级步骤环境1.1环境准备1.2standalone升级1.3分片、副本集升级 前言&#xff1a;Mongodb版本升级 在开始升级之前&#xff0c;请参阅 MongoDB下个版本中的兼容性变更文档&#xff0c;以确保您的应用程序和…

Redis离线安装

Linux系统Centos安装部署Redis缓存插件 参考&#xff1a;Redis中文网&#xff1a; https://www.redis.net.cn/ 参考&#xff1a;RPM软件包下载地址&#xff1a; https://rpmfind.net/linux/RPM/index.html http://rpm.pbone.net/ https://mirrors.aliyun.com/centos/7/os…

长视频生成、尝试性检索、任务推理 | Big Model Weekly 第56期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 COMAL:AConvergent Meta-Algorithm for Aligning LLMs with General Preferences 许多对齐方法&#xff0c;包括基于人类反馈的强化学习&#xff08;RLHF&#xff09;&#xff0c;依赖于布拉德利-特里&#…

SQL高级语法

1. TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说&#xff0c;TOP 子句是非常有用的。 SQL Server 的语法&#xff1a; SELECT TOP number|percent column_name(s) FROM table_name MySQL 语法 在 MySQL 中&#xff0c;并没有直接支持 TOP 语…

均匀面阵抗干扰算法原理及MATLAB仿真

均匀面阵抗干扰算法原理及MATLAB仿真 仿真方向图&#xff0c;频谱图&#xff0c;计算输出SNR、INR、SINR 文章目录 前言一、抗干扰算法原理二、抗干扰算法仿真三、MATLAB源代码总结 前言 \;\;\;\;\; 在阵列信号处理中&#xff0c;信号的抗干扰处理是重中之重&#xff0c;传输期…

Elasticsearch:同义词在 RAG 中重要吗?

作者&#xff1a;来自 Elastic Jeffrey Rengifo 及 Toms Mura 探索 RAG 应用程序中 Elasticsearch 同义词的功能。 同义词允许我们使用具有相同含义的不同词语在文档中搜索&#xff0c;以确保用户无论使用什么确切的词语都能找到他们所寻找的内容。你可能会认为&#xff0c;由于…

算法与数据结构(最小栈)

题目 思路 为了返回栈中的最小元素&#xff0c;我们需要额外维护一个辅助栈 min_stack&#xff0c;它的作用是记录当前栈中的最小值。 min_stack的作用&#xff1a; min_stack的栈顶元素始终是当前栈 st 中的最小值。 每当st中压入一个新元素时&#xff0c;如果这个元素小于等…

midjourney 一 prompt 提示词

midjourney 不需要自然语言的描述&#xff0c;它只需要关键词即可。 一个完整的Midjourney prompt通常包括三个部分 图片提示&#xff08;Image Prompts&#xff09;、文本提示&#xff08;Text Prompt&#xff09;和参数&#xff08;Parameters&#xff09;。 1、图片提示(…

英码科技基于昇腾算力实现DeepSeek离线部署

DeepSeek-R1 模型以其创新架构和高效能技术迅速成为行业焦点。如果能够在边缘进行离线部署&#xff0c;不仅能发挥DeepSeek大模型的效果&#xff0c;还能确保数据处理的安全性和可控性。 英码科技作为AI算力产品和AI应用解决方案服务商&#xff0c;积极响应市场需求&#xff0…

Android13-包安装器PackageInstaller-之apk安装流程

目的 我们最终是为了搞明白安装的整个流程通过安卓系统自带的包安装器来了解PMS 安装流程实现需求定制&#xff1a;静默安装-安装界面定制-安装拦截验证。【核心目的】 安装流程和PMS了解不用多说了; 安装定制相关&#xff1a; 如 手机上安装时候弹出锁屏界面需要输入密码;安…

新型基于Go语言的恶意软件利用Telegram作为C2通信渠道

研究人员发现了一种新型后门恶意软件&#xff0c;使用Go语言编写&#xff0c;并利用Telegram作为其命令与控制&#xff08;C2&#xff09;通信渠道。尽管该恶意软件似乎仍处于开发阶段&#xff0c;但它已经具备完整的功能&#xff0c;能够执行多种恶意活动。这种创新的C2通信方…

5分钟了解! 探索 AnythingLLM,借助开源 AI 打造私有化智能知识库,熟悉向量数据库

本文是系列文章&#xff0c;在前面提到安装Ollama和AnythingLLM的教程&#xff0c;本文会着重解决本地文档向量化的过程&#xff0c;同时本地应用的管理。 图1. 上传本地文档进行向量化处理 • 构建向量数据库特别慢&#xff1a;支持的文档格式很多&#xff0c;但在我的电脑32…

电商小程序(源码+文档+部署+讲解)

引言 随着移动互联网的快速发展&#xff0c;电商小程序成为连接消费者与商家的重要桥梁。电商小程序通过数字化手段&#xff0c;为消费者提供了一个便捷、高效的购物平台&#xff0c;从而提升购物体验和满意度。 系统概述 电商小程序采用前后端分离的架构设计&#xff0c;服…

基于SpringBoot的“高考志愿智能推荐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高考志愿智能推荐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统首页界面 系统注册页…

合并多次commit记录

合并多次commit记录 1. 首先先提交多次记录2. 某个版本之前的commit记录合并 1. 首先先提交多次记录 在log中可以看到有多次commit 记录 然后拉取最新代码 (base) ➜ gaolijie git:(master) git pull --rebase origin masterFrom https://gitee.com/Blue_Pepsi_Cola/gaoliji…

哈希表(C语言版)

文章目录 哈希表原理实现(无自动扩容功能)代码运行结果 分析应用 哈希表 如何统计一段文本中&#xff0c;小写字母出现的次数? 显然&#xff0c;我们可以用数组 int table[26] 来存储每个小写字母出现的次数&#xff0c;而且这样处理&#xff0c;效率奇高。假如我们想知道字…

uniapp商城之首页模块

文章目录 前言一、自定义导航栏1.静态结构2.修改页面配置3.组件安全区适配二、通用轮播组件1. 静态结构组件2.自动导入全局组件3.首页轮播图数据获取三、首页分类1.静态结构2.首页获取分类数据并渲染四、热门推荐1.静态结构2.首页获取推荐数据并渲染3.首页跳转详细推荐页五、猜…