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

传输层协议——TCP、UDP

目录

1、UDP 协议(用户数据报协议)

协议特点

报文首部格式

2、TCP 协议(传输控制协议)

协议特点

报文首部格式

TCP连接建立时的三次握手

TCP拆除连接的四次挥手

TCP的流量控制

TCP的拥塞控制

3、传输层端口号

三类端口号

一些熟知端口号


协议类型是否面向连接是否可靠传输效率开销通信方式
UDP单点/多点 到 单点/多点
TCP点到点

1、UDP 协议(用户数据报协议)

协议特点

  • 无连接
  • 面向报文
  • 首部开销小(8字节)
  • 尽最大努力交付,不保证可靠,不提供拥塞控制
  • 支持 一 or 多 对 一 or 多 通信

报文首部格式

2、TCP 协议(传输控制协议)

协议特点

  • 面向字节流(将应用层交下来的数据当成字节来处理,并对其进行相应的编号)
  • 面向连接
  • 每一条 TCP 连接只有两个端点(一对一的连接)
  • 保证可靠交付
  • 可以全双工通信

报文首部格式

源端口和目的端口的取值为0~65535;

序号(seq)表示本报文段的数据的第一个字节的序号,取值为 0 ~ 2^{32} - 1;

确认号(ack)表示期望收到对方下一个报文段的第一个数据字节的序号,取值为 0 ~ 2^{32} - 1;

数据偏移 表示TCP首部的长度,可以方便地识别出数据段的起始位置,最小长度为5(0101),单位是字节,则首部的最小长度为20字节;

紧急指针 当 URG 位为 1 时,此字段有效,并会指出需要紧急发送的数据;

填充字段 长度可变,用于确保TCP报文的首部长度为 4 字节的整数倍;

字段占位说明
控制字段URG(1bit)紧急位;当为1时表示有数据要紧急发送
ACK(1bit)确认位;这里是大写,与确认号(小写ack)区分开来;当为1时确认字段有效,表示肯定应答
PSH(1bit)推送位;置为1时,立即发送TCP报文
RST(1bit)复位位;置为1时表示TCP连接有严重错误,需要重新建立连接;也可以用于拒绝一个连接
SYN(1bit)同步位;置为1时,表示正在建立一个TCP连接
FIN(1bit)终止位;置为1时,表示正在释放一个TCP连接
窗口16 bit接收空闲窗口值,用于实现TCP流量控制

TCP连接建立时的三次握手

三次握手的作用是为了避免产生错误的连接

        主机 A 向服务器 B 发送 SYN 表示请求建立一个 TCP 连接,即便是没有数据,也要消耗一个 seq。此时直到没有收到目标服务器第一次回应前,主机 A 处于SYN-SENT 状态。

        服务器 B 在没有接收到TCP连接请求前,属于 LISTEN 的监听状态。

        服务器响应给主机 A SYN,表示也向主机 A 请求建立一个连接,ACK=1 表示同意了刚才主机 A 的连接请求,服务器 B 也要消耗一个 seq,seq = y,ack = x + 1,表示确认了刚刚主机发送过来的数据内容,并且提出期望,希望主机 A 下次发送消息给服务器 B 时的 seq 为 x + 1。此时服务器 B 需要等待主机 A 的响应,此时也转变到 SYN-SENT 状态。

        主机 A 接收到服务器B的回应,再回应服务器 B ,ACK=1 表示确认了服务器 B 的TCP建立请求,响应服务B的期望,即便展示还没有数据,也发送一个seq,seq = x + 1,同时 ack = y + 1,也是对刚刚服务器 B 发送过来的内容的一个确认,同时也提出期望,希望服务型下次发送消息时的 seq 为 y + 1。同时将状态设置为 ESTABLISHED,表示已经建立起连接。

        服务器 B ,收到主机 A 的响应,确认无误后也将状态设置为 ESTABLISHED,表示TCP连接成功建立。

        此时主机 A 和服务器 B 已经建立起了一条TCP连接,双方可以正常进行数据传送。

状态说明
SYN-SENT发送了SYN请求,请求建立TCP连接的第一步
LISTEN监听SYN报文的状态
SYN-RCVD接收到SYN请求报文后的状态
ESTABLISHEDTCP连接建立成功的状态

TCP拆除连接的四次挥手

        当主机 A 发送 FIN = 1 (断开连接)标志后,它会进入 FIN-WAIT-1 状态,等待对方确认关闭。当主机收到对方的 ACK = 1(确认)标志后,主机 A 会进入 FIN-WAIT-2 状态。此时,主机 A 已经断开了到对方的连接,但尚未完全断开TCP连接,仍等待对方发送 FIN 标志以确认对方的关闭。

        只有在主机 A 收到对方的 FIN 标志并发送 ACK 标志确认后,才会进入 TIME-WAIT 状态,此时主机才真正关闭了TCP连接。

状态说明
FIN-WAIT-1发送了第一个 FIN 请求,等待对方确认
FIN-WAIT-2等待对方的 FIN 请求
CLOSE-WAIT等待自己进程发出断开连接的命令
LAST-ACK等待对方最后一次确认
TIME-WAIT等待足够的时间,以确保对方接收到了确认
CLOSED关闭状态

TCP的流量控制

        流量控制是针对两端之间的通信的。考虑的是发送方和接收方之间的数据传输速率之间的差异。

        TCP流量控制是通过可变大小的滑动窗口机制实现的。即 让数据发送端传输的速率不要太快,让数据接收端来得及接收。
    

        数据传输窗口 win 在连接建立时由双方商定。但在通信的过程中,数据接收端可根据自己的资源情况,随时动态地调整对方的传输窗口大小。(上面经过协商后,窗口大小为3)

        接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。

        接收方通常会在接收到数据后立即发送一个 ACK 报文,确认收到数据并通知发送方此时窗口的大小。如果接收方的缓冲区已满,它会将窗口大小设置为0,发送方就会停止发送数据。当接收方处理完数据后,它会将窗口大小设置为一个大于 0 的值,并发送 ACK 报文通知发送方,以便发送方继续发送数据。

TCP的拥塞控制

        拥塞控制是针对整个网络的通信而言的,考虑的是网络中的各个路由器和线路的资源利用情况,以避免因过多的数据流量导致网络拥塞。

        四种常见的拥塞控制方法:

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

拥塞窗口(cwnd):是发送方维护的一个状态变量,其大小取决于网络的拥塞程度,并且会动态变化;

慢开始门限(ssthresh):为了防止拥塞窗口 cwnd 的增长过大而引起网络拥塞所设置的一个门限值;

cwnd < ssthresh执行慢开始算法
cwnd = ssthresh可以使用慢开始算法,也可以使用拥塞避免算法
cwnd > ssthresh使用拥塞避免算法

慢开始:每经过一个传输轮次,cwnd 的值都会加倍,从小到大增大 cwnd;

拥塞避免:每经过一个传输轮次,cwnd 的值都会加 1,从小到大缓慢增大 cwnd;

快重传:接收方每收到一个失序报文段后就会立即发出重复确认 ACK,若发送方一连收到三个重复确认,就会立即重传对方尚未收到的报文段。因此能尽早重传未被确认的报文,而不是等待超时;

快恢复:当发送方连续收到三个重传确认 ACK 时,就执行乘法减小算法,把门限值减半(当前 cwnd值的一半),同时把 cwnd 值设置为减半后的门限值,并执行拥塞避免算法;

乘法减小:出现超时(可能是拥塞时),则 ssthresh 减半(当前 cwnd 值的一半),同时执行慢开始算法;

加法增大:执行拥塞避免算法,使 cwnd 增大;

 

        如上图,初始慢开始门限为16,cwnd 从 1 开始,每当发送方接收到一个 ACK 确认报文时,都会使 cwnd 增大(在达到门限值前使用慢开始算法增大)。

        [① ~ ②] 当到达门限值后,改用避免拥塞算法来缓慢增大 cwnd;

        [② ~ ③] cwnd = 24 时发生超时,则门限减半,即 ssthresh = 12,然后下一次接收到 ACK 确认报文时,cwnd 从 1 开始,使用慢开始算法来递增;

        [③ ~ ④] cwnd = 12 时,到达了门限,则改用拥塞避免算法缓慢递增;

        [④ ~ ⑤] 到 ④ 时,cwnd = 16,发送方一连收到三个重复确认,则门限减为当前 cwnd 的一半,即 ssthresh = 8,而 cwnd 变为与门限值一致;

        [⑤ ~] 由于cwnd = ssthresh,开始采用避免拥塞算法来进行增加;

3、传输层端口号

三类端口号

  • 熟知端口 0 ~ 1023
  • 登记端口 1024 ~ 49151
  • 客户端口号 49152 ~ 65535

一些熟知端口号

端口号服务类型
TCP 20文件传输协议(数据)
TCP 21文件传输协议(控制)
TCP 23Telnet 终端仿真协议
TCP 25SMTP 简单邮件发送协议
TCP 80超文本传输协议(HTTP)
TCP 110POP3 服务器(邮箱接收服务器)
TCP 443安全超文本传输协议(HTTPS)

 

端口号服务类型
UDP 53域名服务器(DNS)
UDP 67DHCP(服务端)
UDP 68DHCP(客户端)
UDP 69简单超文本传输协议(TFTP)
UDP 161SNMP(轮询)
UDP 162SNMP(陷阱)
UDP 520RIP 路由协议

相关文章:

传输层协议——TCP、UDP

目录 1、UDP 协议&#xff08;用户数据报协议&#xff09; 协议特点 报文首部格式 2、TCP 协议&#xff08;传输控制协议&#xff09; 协议特点 报文首部格式 TCP连接建立时的三次握手 TCP拆除连接的四次挥手 TCP的流量控制 TCP的拥塞控制 3、传输层端口号 三类端口…...

优化您的Spring应用程序:缓存注解的精要指南

优化您的Spring应用程序&#xff1a;缓存注解的精要指南 前言详细说明1. Cacheable&#xff1a;2. CacheEvict&#xff1a;3. CachePut&#xff1a;4. Caching&#xff1a;5. CacheConfig&#xff1a; 项目中的实现前提使用 前言 当我们构建和运行Spring应用程序时&#xff0c…...

Java之原子性问题的解决

2. 原子性 2.1 volatile-问题 代码分析 : package com.itheima.myvolatile; ​ public class Demo {public static void main(String[] args) {MyThread1 t1 new MyThread1();t1.setName("小路同学");t1.start(); ​MyThread2 t2 new MyThread2();t2.setName(&q…...

实时目标检测:基于YOLOv3和OpenCV的摄像头应用

一、前言 随着人工智能和计算机视觉技术的不断发展,目标检测成为了智能监控、自动驾驶、机器人等领域的关键技术之一。实时目标检测更是对系统的反应速度和准确度提出了更高的要求。本文介绍使用OpenCV和YOLOv3实现实时目标检测的方法,演示如何使用OpenCV调用YOLOv3模型进行…...

【软考】4.2 关系代数

《 关系代数 》 表和表之间的逻辑运算 笛卡尔积&#xff1a;S1 x S2 投影&#xff1a;π&#xff1b;选择某一列&#xff08;属性&#xff09;&#xff1b;一个关系R的投影操作结果也是一个关系&#xff0c;记作Πa&#xff0c;它由从关系R中选出的A列元素构成&#xff1b;选择…...

STM32F4学习笔记读取芯片UID和MAC地址

一、简介 在嵌入式设备开发过程中有时会需要为设备设置唯一的ID用以标识设备唯一&#xff0c;比如要求同一总线上的所有设备ID不能重复&#xff0c;要求设备具体唯一的MAC地址等等。每个STM32微控制器都自带一个96位的唯一ID&#xff0c;这个ID在任何情况下都是唯一且不允许修…...

webpack优化策略

这三点是webpack优化策略的一部分&#xff0c;具体解释如下&#xff1a; 优化正则匹配&#xff08;Test&#xff09;&#xff1a;在webpack的配置中&#xff0c;test属性是一个正则表达式&#xff0c;用于匹配需要应用该loader的文件的扩展名。在您提供的代码中&#xff0c;te…...

讲讲项目里的仪表盘编辑器(三)布局组件

布局容器处理 看完前面两章的讲解&#xff0c;我们对仪表盘系统有了一个大概的理解。接着我们讲讲更深入的应用。 上文讲解的编辑器只是局限于平铺的组件集。而在编辑器中&#xff0c;还会有一种组件是布局容器。它允许其他组件拖拽进入在里面形成自己的一套布局。典型的有分页…...

Linux- 后台运行符、nohup、disown

& &在Unix-like的操作系统&#xff08;如Linux和macOS&#xff09;的shell中&#xff0c;特别是在Bash这样的shell中&#xff0c;经常用作后台运行符号。让我们深入了解一下其功能和用法。 &作为后台运行符号&#xff1a; 基本用法: 当我们在一个命令或者一组命令…...

开发过程教学——交友小程序

交友小程序 1. 我的基本信息2. 我的人脉2.1 我的关注2.2 我的粉丝 3. 我的视频4. 我的相册 特别注意&#xff1a;由于小程序分包限制2M以内&#xff0c;所以要注意图片和视频的处理。 1. 我的基本信息 数据库表&#xff1a; 我的基本信息我的登录退出记录我的登录状态&#x…...

正则表达式 Regular Expression学习

该文章内容为以下视频的学习笔记&#xff1a; 10分钟快速掌握正则表达式_哔哩哔哩_bilibili正则表达式在线测试工具&#xff1a;https://regex101.com/, 视频播放量 441829、弹幕量 1076、点赞数 19330、投硬币枚数 13662、收藏人数 26242、转发人数 2768, 视频作者 奇乐编程学…...

代谢组学最常用到的数据分析方法(五)

代谢组学是一门对某一生物或细胞所有低分子质量代谢产物&#xff08;以相对分子质量<1000的有机和无机的代谢物为研究核心区&#xff09;进行分析的新兴学科。因此从复杂的代谢组学数据中确定与所研究的现象有关的代谢物&#xff0c;筛选出候选生物标记物成为代谢物组学研究…...

105.从前序与中序遍历序列构造二叉树

力扣题目链接(opens new window) 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a; class Solution { public:Tr…...

分支定界、分支切割、分支定价的区别

目录 1.从原理的角度 &#xff08;1&#xff09;分支定界&#xff1a; &#xff08;2&#xff09;分支切割&#xff1a; &#xff08;3&#xff09;分支定价&#xff1a; 2.从分支树的角度 &#xff08;1&#xff09;分支定界 &#xff08;2&#xff09;分支切割 &…...

数字IC前端学习笔记:数字乘法器的优化设计(阵列乘法器)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 数字信号处理作为微处理器的核心部件&#xff0c;是决定着总体处理器性能的因素之一&#xff0c;而数字乘法器是最常见的一种数字信号处理电路。通常情况下&#…...

批量删除wordpress文章修订版本/自动草稿残留数据(3种方法)及四种方法禁用WordPress文章历史修订/自动保存/自动草稿功能

目录 1、批量删除wordpress文章修订版本/自动草稿残留数据&#xff08;3种方法&#xff09; 方法一&#xff1a;SQL命令批量删除 命令&#xff1a; 方法二&#xff1a;利用PHP代码来删除 方法三&#xff1a;利用数据库清理优化插件 WP Clean Up 或 WP Cleaner 批量删除 2…...

HTTP初识,fiddler的使用,URL各部分介绍,QueryString

目录 一、什么是HTTP 二、抓包工具 三、请求的首行 URL 四、URL的各部分详细介绍 一、什么是HTTP 现在网页上&#xff0c;我们常见的是https,但是在二十年前是以http为主&#xff0c;这个协议也叫超文本传输协议&#xff0c;文本->字符串&#xff0c;“超文本”->图片…...

计算机毕业设计 基于SpringBoot的图书馆管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

第三章:最新版零基础学习 PYTHON 教程(第十二节 - Python 运算符—Python 中的运算符函数 - 套装1)

Python 在“operator”模块下预定义了许多数学、逻辑、关系、位等运算的函数。本文介绍了一些基本功能。 1. add(a, b):- 该函数返回给定参数的加法。 操作-a +b。 2. sub(a, b):- 该函数返回给定参数的差值。 操作-a -b。 3. mul(a, b):- 该函数返回给定参数的乘积。 操…...

AAD基础知识(identity/token/PRT)

简介 AAD(Azure Active Directory/Azure AD)是微软基于云身份验证和访问控制的解决方案&#xff0c;通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID&#xff0c;官网&#xff1a;https://www.microsoft.com/zh-cn/security/b…...

告别手动建造:TEdit免费地图编辑器如何10倍提升泰拉瑞亚创作效率

告别手动建造&#xff1a;TEdit免费地图编辑器如何10倍提升泰拉瑞亚创作效率 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also l…...

【UEFI实战】Secure Boot的密钥管理与策略配置

1. Secure Boot基础概念与核心价值 Secure Boot是UEFI规范中定义的安全启动机制&#xff0c;它的本质是通过密码学手段确保系统只加载经过授权的代码。想象一下这就像小区门禁系统——只有录入人脸信息的住户才能自由进出&#xff0c;而陌生人会被拒之门外。在实际应用中&#…...

从龟速到极速:如何用trackerslist项目彻底解决BT下载瓶颈

从龟速到极速&#xff1a;如何用trackerslist项目彻底解决BT下载瓶颈 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 你是否曾经面对BT下载时那令人沮丧的进度条&#xff1…...

“面”之跃升:系统化协同的演进与企业级智能体

展望2026 年&#xff0c;AI 能力的演进或将正式迈入“面”的维度。这是一种“系统化协同”&#xff0c;意味着AI 与企业核心IT 系统、组织架构以及外部生态实现了深度融合。 系统化协同的特征&#xff0c;从 “面”的层级看&#xff0c;AI 不再是一个外挂的工具或独立的流程&am…...

别再只调包了!用PyTorch从零手搓一个Unet,搞懂语义分割的每个细节

从零构建Unet&#xff1a;深入解析语义分割的代码实现与设计哲学 在计算机视觉领域&#xff0c;语义分割一直是极具挑战性的任务之一。不同于简单的图像分类&#xff0c;语义分割需要模型对图像中的每一个像素进行分类&#xff0c;这要求模型既要理解全局上下文信息&#xff0c…...

Go语言规则同步器airulesync:自动化聚合与更新网络过滤规则

1. 项目概述&#xff1a;一个自动同步上游规则的“规则同步器”如果你和我一样&#xff0c;长期在维护自己的网络过滤规则集&#xff0c;无论是用于广告屏蔽、隐私保护还是内容过滤&#xff0c;那么你一定对“规则更新”这件事深有体会。手动去各个开源项目的主页查看更新、下载…...

神经科学启发的边缘AI持续学习:从突触修剪到双记忆系统的架构设计

1. 项目概述&#xff1a;为什么我们需要一个“会学习”的边缘大脑&#xff1f;想象一下&#xff0c;你家里的扫地机器人&#xff0c;第一天它学会了绕过餐桌腿&#xff0c;第二天你搬来一把新椅子&#xff0c;它却一头撞了上去&#xff0c;然后彻底忘记了怎么绕过餐桌腿。这听起…...

MarkFlowy:基于智能感知的Markdown写作流工具设计与实现

1. 项目概述&#xff1a;一个为Markdown而生的高效写作流工具 如果你和我一样&#xff0c;每天的工作都离不开Markdown——写技术文档、整理项目笔记、构思博客文章&#xff0c;那你一定体会过那种在“专注写作”和“格式调整”之间反复横跳的痛苦。刚进入心流状态&#xff0c;…...

Unity中Spine混合模式插槽的Shader实现与优化

1. Spine混合模式插槽的核心问题解析 当你把Spine动画导入Unity后&#xff0c;发现角色颜色变得灰蒙蒙的&#xff0c;就像蒙了一层雾。这种情况在游戏开发中特别常见&#xff0c;尤其是当美术同学在Spine编辑器中精心调制的渐变效果&#xff0c;到了Unity里却完全走样。问题的根…...

Neovim涂抹光标插件:提升编码体验的动态轨迹设计

1. 项目概述&#xff1a;一个为Neovim设计的“涂抹光标”插件 如果你和我一样&#xff0c;是个重度Neovim用户&#xff0c;每天有超过8小时的时间泡在终端和代码编辑器里&#xff0c;那你肯定对光标的“存在感”有要求。默认的方块或下划线光标&#xff0c;在长时间编码后&…...