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

UDP,TCP协议的格式与机制

目录一UDP1.UDP协议端格式2.UDP的特点二TCP1.TCP协议段格式2.确认应答机制1.确认应答的原理2.为什么有两个序号——捎带应答3.超时重传4.快速重传3.连接管理机制1.三次握手2.四次挥手shutdown函数COLSE_WAIT状态TIME_WAIT状态4.滑动窗口1.滑动窗口是什么2.拥塞控制一UDP1.UDP协议端格式目的端口号Destination Port接收方主机收到 UDP 报文后根据这个端口号决定把数据交给哪个应用程序处理。 比如DNS 常用 53、TFTP 常用 69、QUIC 常用 443 等。源端口号Source Port标识发送方自己是哪个程序发出的数据。一般由操作系统随机分配方便对方收到数据后按这个端口原路回复给你。16 位 UDP 长度UDP Length表示整个 UDP 数据报的总字节长度 UDP 固定头部8 字节 数据部分 16 位所以取值范围8 65535 字节64KB16 位 UDP 校验和UDP Checksum校验和不一致认为传输出错直接丢弃不重传、不纠错2.UDP的特点⽆连接: 知道对端的IP和端⼝号就直接进⾏传输,不需要建⽴连接;不可靠: 没有确认机制,没有重传机制;如果因为⽹络故障该段⽆法发到对⽅,UDP协议层也不会给 应⽤层返回任何错误信息;⾯向数据报: 不能够灵活的控制读写数据的次数和数量;二TCP1.TCP协议段格式源/目的端口号:表⽰数据是从哪个进程来,到哪个进程去;32位序号/32位确认号:序号和确认序号可以同时存在序号保证数据有序交付确认序号累计确认已接收的数据触发发送方重传未确认数据4位TCP报头长度[0 - 15]乘以一个单位规定是4字节等于报头的长度[0 - 60]字节。所以一个报头的长度范围是[20 -60]字节。6位标志位SYNSynchronize发起连接请求或响应典型用于三次握手前两次把携带SYN标识的称为同步报文段ACKAcknowledgment确认已接收数据 / 控制信息使确认序号生效FINFinish发起正常关闭连接释放发送方的发送权核心用于四次挥手称携带FIN标识的为结束报文段RSTReset复位异常连接强制关闭处理连接超时、端口未监听、协议错误等场景把携带RST标识的称为复位报文段PSHPush推送数据要求接收方立即递交给应用层不缓存适用于键盘输入、聊天消息等实时数据传输URGUrgent标识段中包含紧急数据需优先处理需配合 “紧急指针” 字段使用。紧急指针字段会指向紧急数据的最后一个字节的下一位16 位窗口字段自己的接收缓冲区还剩余多少可用空间6位校验和:发送端填充,CRC校验.接收端校验不通过,则认为数据有问题.此处的检验和不光包含 TCP⾸部,也包含TCP数据部分.16位紧急指针:标识哪部分数据是紧急数据;2.确认应答机制1.确认应答的原理怎么保证我们发送的报文被对方收到了 ——对方收到报文后返回确认应答我们收到确认应答就可以保证之前的数据成功被对方接收了TCP将每个字节的数据都进行了编号.即为32位序号SEQTCP 报文段头部的 SEQ 字段代表的是该报文段携带的第一个数据字节的序号。ISNTCP 连接刚建立时双方各自随机选的第一个 “字节编号”就是 ISN。为了安全ISN 是系统随机生成的安全层面防止攻击者轻易猜到序列号实施 TCP 会话劫持、伪造恶意报文等攻击可靠性层面避免历史连接的重复报文被新建立的同四元组源 IP、源端口、目的 IP、目的端口连接错误接收造成数据错乱。双方各有一个 ISN客户端第一次握手发的seq x→ 客户端的 ISN服务器第二次握手发的seq y→ 服务器的 ISNTCP 的确认应答不是对单个报文段的确认而是对连续字节流的累计确认这是机制的核心设计。接收方回传的 ACK 报文中的确认号有严格的定义确认号 接收方已经成功、连续接收的最后一个字节的序号 1含义「确认号 - 1」及之前的所有字节已全部成功接收接下来期望收到的第一个字节的序号就是该确认号。举个完整的基础示例发送方发送 SEQ1001、数据长度 1000 字节的报文覆盖 1001~2000接收方成功收到该报文回传 ACK 报文其中ACK 号 2001发送方收到 ACK2001即可确认 1001~2000 的所有字节已成功交付无需再关注这段数据。累计确认的核心优势一个 ACK 可以确认连续的多个报文段无需为每个报文单独回 ACK大幅减少网络开销强制要求只有连续的字节被完整接收才会推进确认号从根本上解决乱序问题。2.为什么有两个序号——捎带应答为了减少网络中的纯 ACK 报文数量提升传输效率TCP 规范定义了两个优化规则延迟 ACK接收方不会对每个报文都立刻回 ACK而是等待最多 200ms若这段时间内有反向数据要发送给对端就将 ACK 确认号捎带在反向数据报文的 TCP 头部中一起发送无需单独发 ACK 包——既是对上一个接收报文的确认又是一个发送报文所以既有序号又有确认序号。强制立即 ACK遇到乱序报文、重复报文、丢包后补传的报文等异常场景接收方会立即发送 ACK不触发延迟让发送方尽快感知网络状态及时调整传输策略。3.超时重传如果发送的报文丢失或者ACK丢失怎么办呢发送方每发出一个报文段就会启动一个重传计时器RTORetransmission TimeOutRTO 的超时时间基于网络往返时延RTT动态计算适配网络波动。若 RTO 超时后仍未收到对应 ACK发送方判定该报文段丢失立即重传该报文段并重置计时器再次等待 ACK直到收到对应 ACK 为止。累计到⼀定的重传次数,TCP认为⽹络或者对端主机出现异常,强制关闭连接.4.快速重传连续收到 3 个重复 ACK不等超时就立刻重传速度更快。3.连接管理机制1.三次握手三次握手的核心目的让通信双方客户端 服务器互相确认自己的发送 / 接收能力正常、对方的发送 / 接收能力正常并同步双方的初始序列号ISN。两次握手无法完成双向收发能力的全验证为什么不是四次握手第二次握手中服务器的 ACK确认客户端请求和 SYN同步自身序列号可以合并在一个报文中发送没有必要拆分成两个独立报文2.四次挥手四次挥手的核心目的双方各自独立关闭自己的发送通道互相确认对方的关闭请求确保所有数据都传输完毕安全、完整地断开连接。为什么是 4 次不能是 3 次TCP 连接的两个传输方向是完全独立的。一方关闭自己的「发送通道」发 FIN 报文仅代表自己不再发送新数据但依然可以接收对方发来的数据直到对方也关闭发送通道。shutdown函数#include sys/socket.h int shutdown(int sockfd, int how);sockfdTCP 连接的套接字文件描述符how关闭方式参数宏定义数值作用TCP 通道控制关键行为SHUT_RD0关闭读通道无法再接收数据内核丢弃缓冲区数据发送通道正常SHUT_WR1关闭写通道本方不再发送数据主动发送 FIN 报文触发四次挥手第一次挥手仍可以接收对方数据SHUT_RDWR2关闭读写双通道同时关闭读写等价于先 SHUT_RD 再 SHUT_WR发送 FINCOLSE_WAIT状态server不关闭fdclient断开后就会一直处于CLOSE_WAIT状态导致文件描述符一直被占用内存泄漏等问题。TIME_WAIT状态TIME_WAIT 是TCP 主动关闭连接的一方在发送完第四次挥手的 ACK 报文后进入的一种等待状态核心作用① 保证第四次挥手的 ACK 能被对方收到主动方发完 ACK 后不直接关闭等待 2MSLMSL单个报文在网络中能存活的最大时间若服务端没收到 ACK会超时重传 FIN主动方在 TIME_WAIT 期间收到重传的 FIN会重新发送 ACK确保服务端能顺利从 LAST_ACK → CLOSED释放资源② 防止旧连接的延迟报文干扰新连接网络中可能存在延迟、迷路的旧报文如果主动方立刻关闭并新建相同四元组源 IP 端口、目的 IP 端口的连接旧报文可能会被新连接错误接收导致数据错乱TIME_WAIT 期间不能重新bind相同端口可以使用setsockopt()函数允许地址复用4.滑动窗口1.滑动窗口是什么窗口大小指的是⽆需等待确认应答而可以继续发送数据的最大值.上图的窗口大小就是4000个字节(四个段)发送前四个段的时候,不需要等待任何ACK,直接发送;收到第⼀个ACK后,滑动窗口向后移动,继续发送第五个段的数据;依次类推;操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答;只有确认应答过的数据,才能从缓冲区删掉;窗口越⼤,则⽹络的吞吐率就越高;滑动窗口把发送缓冲区分为了三部分a.已发送且被确认的部分窗口外左侧b.可以直接发送的部分,包含已发送但未被确认的部分窗口内c.不能发送的部分窗口外右侧那么滑动窗口的大小该如何决定呢窗口大小 min (拥塞窗口cwnd,接收窗口rwnd)接收窗口rwnd大小为tcp报文中的窗口大小字段下面介绍拥塞窗口cwnd2.拥塞控制拥塞窗口(cwnd)发送方自己维护代表网络能承受的最大发送量单位通常是 MSS一个报文最大数据量。慢启动门限 ssthresh阈值用来区分「慢启动阶段」和「拥塞避免阶段」1. 慢启动刚建立 TCP 连接时不知道网络好坏cwnd 初始很小一般从 1 个 MSS 开始。规则每收到 1 个 ACKcwnd 翻倍指数增长1→2→4→8→16…目的快速试探网络能承受多大流量不一开始就猛发。退出条件cwnd 增长到 ≥ ssthresh切换到拥塞避免。2. 拥塞避免不再指数暴涨改为线性缓慢增长。规则每经过一个往返时间 RTTcwnd 1目的慢慢逼近网络极限避免突然拥塞。触发场景ssthresh 变化cwnd 变化后续阶段拥塞判定等级超时重传当前 cwnd/2直接重置为初始值1/10 个 MSS重新进入慢启动严重拥塞链路大概率不通 / 大面积丢包3 次重复 ACK 快速重传当前cwnd/2先设为新的 ssthresh后续线性增长进入快速恢复→拥塞避免轻度拥塞仅个别报文丢包链路通畅

相关文章:

UDP,TCP协议的格式与机制

目录 一:UDP 1.UDP协议端格式 2.UDP的特点 二:TCP 1.TCP协议段格式 2.确认应答机制 1.确认应答的原理 2.为什么有两个序号?——捎带应答 3.超时重传 4.快速重传 3.连接管理机制 1.三次握手 2.四次挥手 shutdown函数 COLSE_WAI…...

ContextMenuManager:3步实现Windows右键菜单精准管理的开源解决方案

ContextMenuManager:3步实现Windows右键菜单精准管理的开源解决方案 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单是操作系统中最频…...

Kubernetes集群能耗监测:RAPL与Prometheus方案对比

1. 项目概述在Kubernetes集群中实现精确的能耗监测一直是系统优化领域的难点问题。作为一名长期从事分布式系统性能调优的工程师,我最近完成了一项关于RAPL与Prometheus在Kubernetes集群能耗监测中的对比研究。这项研究源于我们在实际工作中遇到的一个具体问题&…...

FanControl风扇控制软件:5分钟快速上手指南,轻松解决电脑噪音与散热难题

FanControl风扇控制软件:5分钟快速上手指南,轻松解决电脑噪音与散热难题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gi…...

百度网盘直链解析:5分钟实现全速下载的完整指南

百度网盘直链解析:5分钟实现全速下载的完整指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘蜗牛般的下载速度而烦恼吗?今天我要向你…...

同步、异步与互斥:从通用OS到RTOS的全面解析

一、基础概念:进程与线程1.1 什么是进程?进程是操作系统进行资源分配和调度的基本单位,是一个正在运行的程序实例。1.2 什么是线程?线程是操作系统进行CPU调度的基本单位,是进程内部的一条执行路径(轻量级进…...

别再硬背公式了!用Python手把手带你调参二维卡尔曼滤波(附完整代码与可视化对比)

别再硬背公式了!用Python手把手带你调参二维卡尔曼滤波 卡尔曼滤波作为状态估计的黄金算法,在机器人导航、金融预测、传感器融合等领域有着广泛应用。但许多工程师在掌握基础理论后,面对实际项目时却常常陷入参数调优的困境——那些教科书上的…...

Unity3d之随机生成数字

UnityEngine.Random.Range(min,max)‌包含最小值‌‌不包含最大值Mathf.Clamp是限定范围...

不止.htaccess:盘点文件上传漏洞中那些‘借壳’执行的奇技淫巧

文件上传漏洞中的"借壳"执行艺术:超越.htaccess的攻防博弈 在Web安全领域,文件上传功能就像一扇半开的门——它为用户提供便利的同时,也为攻击者创造了可乘之机。当开发者试图通过简单的黑名单过滤来阻挡恶意文件时,攻击…...

【公安基础知识】01

治安管理处罚- 行政处罚 治安管理处罚- 行政处罚概念特点处罚种类适用范围违反行为处罚程序立案(旧 受案)调查 &&&&&&&&&&&&&&&&&&&&&&&&&&&…...

今天开始学爬虫1

1.1:import urllib错误 module urllib has no attribute request应该import urllib.requestimport urllib.requesturlhttp://www.baidu.com/ responseurllib.request.urlopen(url) contentresponse.read().decode(utf-8) print(content)2.1#返回字节 contentrespons…...

Kafka基础篇

Kafaka安装和使用以及整和一、 安装(docker)1)创建docker-compose.yml文件2)测试二、 kafaka基础知识1)kafaka核心架构2) 工作流程三、Spring Boot 整合Kafka1. 导入依赖 ,配置yml文件2. API讲解2.1&#x…...

手机店还会存在吗

这两年买手机,有个很常见的小场景:人先进店,把样机拿起来拍几张照片,摸一下边框,试试重量,再问店员有没有现货。问完价格以后,很多人会低头打开电商平台。 门店最尴尬的地方就在这里。它承担了体…...

Langchain的学习(一)

目录 一,实操 编码 Runnable Runnable 是什么 核心方法(所有 Runnable 都有) 最关键能力:用 | 组合(LCEL) 常用内置 Runnable 总结 二,聊天模型-核心能力 定义模型 init_chat_model 本地部署 调用工具 定义工具-Tool version1 schema: version2(基于…...

ETime:高效推动你的时间

我做了一个开源时间工作台:ETime 如果你也试过很多时间管理工具,可能会遇到同一种疲惫:记录本身变成了另一件需要坚持的事。 ETime 想解决的不是“怎样把每一分钟都管起来”,而是更朴素的一件事:让开始更轻&#xff…...

别再让一条宽带拖慢整个公司!手把手教你用H3C防火墙配置双WAN口负载均衡(附HCL模拟器配置)

中小企业网络优化实战:H3C防火墙双WAN负载均衡配置指南 当视频会议频繁卡顿、文件传输速度像蜗牛爬行时,单条宽带已成为制约企业效率的瓶颈。对于50-200人规模的中小企业,双WAN负载均衡技术能以极低成本实现带宽翻倍,本文将用一台…...

别再手动拖拽了!用Java POI + XSSFDrawing,5行代码搞定Excel单元格图片批量插入(附完整源码)

5行代码实现Excel图片批量插入:Java POI XSSFDrawing高效开发指南 1. 为什么需要自动化Excel图片插入? 在日常报表开发中,我们经常遇到需要将大量图片(如用户头像、产品图)嵌入Excel单元格的场景。传统手动操作存在三…...

MiniMax Agent 正式更名 Mavis 上线多智能体协作

如果你用过AI助手,大概都有过这种感受:一个AI同时干太多事,要么顾此失彼,要么卡在某个环节原地转圈。 MiniMax显然也看到了这个问题。 5 月 13 日,他们正式宣布旗下Agent产品全面升级,并给它起了个新名字—…...

Day33-1: Serilog(日志中间件)VS OperLogHelper(操作日志帮助类)

一、一句话分清它们的作用 1. Serilog(日志中间件) 作用:记录系统运行日志 → 给程序员看的 控制台打印文件保存报错、异常、请求信息用于排查问题、调试、监控 2. OperLogHelper(操作日志帮助类) 作用&#xff1…...

5分钟搞定U盘验货!这款绿色工具真香到离谱

兄弟们,你有没有买过那种“1TB只要39块还包邮”的U盘? 醒醒!那玩意儿大概率是扩容盘——实际容量可能只有64GB,超出部分写进去的数据全是空气,轻则文件损坏,重则项目代码全丢,救都救不回来&…...

【Java杂项】为什么 b += 1 可以,但 b = b + 1 会报错?类型提升与复合赋值详解

【Java杂项】为什么 b 1 可以,但 b b 1 会报错?复合赋值与类型提升讲清楚前言一、先给结论:它不是简单的文本替换二、先看认知冲突2.1 普通赋值为什么报错2.2 复合赋值为什么能通过三、类型提升到底是什么3.1 常见类型提升结果3.2 为什么小…...

人类的自然关系与AI的形式化关系

“人类的自然关系”与“AI的形式化关系”是理解下一代人机环境系统智能的两个核心哲学维度。它们分别代表了智能系统在物理世界中的生存根基与在数字世界中的运行逻辑。我们可以从以下三个层面来深度解析这两者的区别与融合:人类的自然关系:从“征服掠夺…...

一文搞懂工业机器人通讯协议:TCP/IP、Modbus与专用协议对比

在我十年的工控开发生涯中,通讯问题永远是项目延期的第一大原因。我见过太多团队花了几个月时间做运动控制和视觉算法,最后却卡在了机器人通讯上:要么是数据传输不稳定,要么是速度跟不上产线节拍,要么是换个品牌机器人就要全部重写代码。 很多新手工程师觉得通讯就是&quo…...

态是相关,势是因果,感是具身,知是离身

态是相关,势是因果,感是具身,知是离身,用四个高度概括的词,切中了“人机环境系统智能”中态势感知四个核心维度的本质属性。我们可以结合之前的探讨,来深入拆解一下这句“十六字真言”:态是相关…...

C#上位机开发工业机器人:从零搭建第一个机器人控制程序

作为一名在工控行业摸爬滚打了十年的老工程师,我见过太多自动化工程师卡在"机器人上位机开发"这一关。很多人C#基础不错,也懂机器人原理,但就是不知道怎么把两者结合起来,写出一个能在生产环境运行的控制程序。 今天这篇文章,我会带着你从零开始,搭建一个完整…...

Google Cloud Dataflow 背后的流式处理模型

原文:towardsdatascience.com/the-stream-processing-model-behind-google-cloud-dataflow-0d927c9506a0?sourcecollection_archive---------3-----------------------#2024-04-27 在无界数据处理中的正确性、延迟和成本平衡 https://medium.com/vutrinh274?sour…...

5分钟搞定!NewGAN-Manager终极配置指南:让Football Manager游戏体验焕然一新

5分钟搞定!NewGAN-Manager终极配置指南:让Football Manager游戏体验焕然一新 【免费下载链接】NewGAN-Manager A tool to generate and manage xml configs for the Newgen Facepack. 项目地址: https://gitcode.com/gh_mirrors/ne/NewGAN-Manager …...

【MySQL百日打怪升级第8天】SELECT执行流程

【第8天】每天一个MySQL知识点,百日打怪升级 SQL基础:SELECT执行流程 大家好,我是一名拥有10年以上经验的DBA老兵。 做这个系列,源于一个朴素的愿望:把踩过的坑、总结的经验系统化输出,希望能帮到刚入行或…...

堆叠集成方法

原文:towardsdatascience.com/the-stacking-ensemble-method-984f5134463a 发现堆叠在机器学习中的力量——一种将多个模型组合成一个单一强大预测器的技术。本文从基础知识到高级技术探讨了堆叠,揭示了它是如何结合不同模型的优势以提高准确性的。无论你…...

离谱!上海交大一学生私吞 5000 奖金,还用豆包 P 假收据骗队友。网友:学历虽高但人品太低

①5 月 18 日,上海交大一则学生违纪通报冲上热搜,实锤了前几天网上曝光的一名学生侵占团队竞赛奖金、造假欺骗队友的恶劣行为。②在 2025 下半年,樊同学(上交大智慧能源学院女生)与 K 同学(电院男生&#x…...