TCP与UDP协议
TCP与UDP协议
1、TCP协议:
1、TCP特性:
- TCP 提供一种面向连接的、可靠的字节流服务。
- 在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP。
- TCP 使用校验和,确认和重传机制来保证可靠传输。
- TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复。
- TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制。
滑动窗口协议,属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输,提高网络吞吐量。
总的来说,TCP 协议是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现数据稳定可靠性的传输。
2、TCP协议的报文格式:

TCP 报文段包括协议首部和数据两部分,协议首部的固定部分是 20 个字节,头部是固定部分,后面是选项部分。
- 源端口号以及目的端口号:各占 2 个字节,端口是传输层和应用层的服务接口,用于寻找发送端和接收端的进程,一般来讲,通过端口号和IP地址,可以唯一确定一个 TCP 连接,在网络编程中,通常被称为一个 socket 接口。
- 序号:Seq 序号,占 4 个字节。用来标识从 TCP 发送端向 TCP 接收端发送的数据字节流序号,发起方发送数据时对此进行标记。
- 确认序号:Ack 序号,占 4 个字节,包含接受端所期望收到的下一个序号。只有 ACK 标记位为 1 时,确认序号字段才有效,因此,确认序号应该是上次已经成功收到数据字节序号加 1,即 Ack = Seq + 1。
- 数据偏移:占 4 个字节,用于指出 TCP 首部长度。
- 保留字段:占 6 位,暂时可忽略,值全为 0。
- 六位标志位:值内容含义如下
- 窗口:占 2 个字节,用于流量控制和拥塞控制,表示当前接收缓冲区的大小。
- 校验和:占 2 个字节,范围包括首部和数据两部分
- 紧急指针:指出了紧急数据的末尾在报文段中的位置,和 URG 搭配使用
- 选项和填充:是可选的,默认情况是不选。
3、TCP三次握手:
计算机之间使用 TCP 协议进行传输数据时,每次连接都需要经过 3 个阶段:创建连接、数据传送和释放连接,即传输数据之前,在发送端和接收端建立逻辑连接、然后传输数据、最后断开连接,它保证两台计算机之间比较可靠的数据传输。
1、创建连接:
当两个设备之间准备传输数据之前,TCP 会建立连接,创建连接的阶段需要三次握手。

详细过程如下:
- 第一次握手:客户端向服务器端发出连接请求,等待服务器确认。
- 第二次握手:服务器端收到请求后,向客户端回送一个确认,通知客户端收到了连接请求。
- 第三次握手:客户端再次向服务器端发送确认信息,确认连接。
完成以上 3 次握手之后,可靠性连接建立完成,就可以进行数据传输了。
4、TCP四次挥手:
1、释放连接:当数据传输完毕之后,TCP 会释放连接,连接的释放需要四次挥手。

- 第一次挥手:客户端向服务器端发出请求切断连接,等待服务器确认。
- 第二次挥手:服务器端收到请求后,向客户端回送一个确认信息,并同意关闭请求。
- 第三次挥手:服务器端再次向客户端发出请求切断连接,等待客户端确认。
- 第四次挥手:客户端收到请求后,向服务器端回送一个确认信息,并同意关闭请求。
5、重传机制介绍:
当网络不稳定的时候,很容易出现数据包丢失,TCP 采用了哪些重传手段来解决数据包丢失问题呢?
常见的重传方式有以下几种:
- 超时重传
- 快速重传
- SACK
- D-SACK
-
超时重传:
超时重传,顾名思义,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发数据。
TCP 会在以下两种情况发生超时重传:
- 发送的数据包丢失。
- 确认应答丢失。
那如何来设定超时重传的时间呢?
- RTT:指的是数据从网络的一端传送到另一端所需要的时间,也就是数据包发送出去的往返时间。
- RTO:超时重传时间。
1)当RTO较大时,重传时间间隔就会比较大,会出现数据传输效率差的现象,比如数据包丢失之后,需要等很长时间才重发,性能差;
2)当RTO较小时,可能会出现并没有丢失包就重发,多次重发会造成网络拥堵,导致出现更多的超时,更多的超时意味着更多的重发;
3)TCP每当遇到一次超时重传的时候,会将下一次超时时间间隔设为先前值的两倍,多次超时说明网络环境差,不宜频繁反复重发。
-
快速重传:
-
快速重传就是来补充超时重传机制中时间过长的问题。
-
快速重传不像超时重传那样通过时间来驱动重发,而是通过次数来驱动重发。
-
当收到报文重复的 ACK 数量,到达一定的阀值(一般为3),TCP 会在定时器过期之前,检查丢失的报文段并重传丢失的报文段。
-
-
SACK方法:
具体实现就是需要在 TCP 头部选项字段里加一个 SACK 的东西,接受方可以将缓存的数据地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。
注意:如果要支持 SACK 机制,必须发送方和接受方都要支持。在 Linux 操作系统中,开发者可以通过
net.ipv4.tcp_sack参数打开这个功能(Linux 2.4 后默认打开)。 -
Duplicate SACK 方法:
D-SACK,这个方法实现主要是使用SACK和ACK来告诉发送方有哪些数据被重复接收了,以防止 TCP 反复的重发。使用
D-SACK方法的好处,可以让发送方知道,是发出去的包丢了还是接收方回应的 ACK 包丢了,然后来决定是否需要继续重发包。在 Linux 操作系统下,可以通过
net.ipv4.tcp_dsack参数来开启/关闭这个功能(Linux 2.4 后默认打开)。
2、UDP协议:
1、简介
UDP协议是一种在计算机网络中广泛使用的传输层协议。与TCP协议相比,UDP协议具有更轻量级、无连接和不可靠的特点。
UDP协议基于IP协议,它提供了一种简单的数据传输机制。与TCP协议不同,UDP协议不需要在通信双方建立可靠的连接。它通过将数据划分为一系列称为"数据报"的小块来传输数据。每个数据报都包含了源端口号、目标端口号、数据长度和校验和等信息。

2、UDP协议工作原理:
- 应用程序将数据传递给UDP协议。
- UDP协议将数据封装成数据报,并加上源端口号和目标端口号等信息。
- 数据报通过网络传输到目标主机。
- 目标主机的UDP协议接收数据报,并将数据传递给目标应用程序。
3、UDP协议特点:
-
无连接性:UDP协议在通信之前不需要建立连接,数据报直接发送给目标主机,从而降低了通信的延迟。
-
面向报文:UDP协议将应用程序传递给它的数据封装成独立的数据报进行传输,每个数据报都是独立的实体,不会进行拆分和重组。
-
不可靠性:UDP协议不提供数据的可靠传输,数据报在传输过程中可能会丢失、重复、乱序等。它不保证数据的完整性和顺序性,也不提供重传机制。
-
简单高效:由于UDP协议的简单性,它的开销相对较小,传输效率较高。适用于一些对传输速度要求较高、但对数据完整性要求不那么严格的应用场景。
4、UDP协议的应用:
- 实时音视频传输。
- DNS解析。
- 游戏应用。
- loT设备通信。
- 广播和多播。
相关文章:
TCP与UDP协议
TCP与UDP协议 1、TCP协议: 1、TCP特性: TCP 提供一种面向连接的、可靠的字节流服务。在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP。TCP 使用校验和,确认和重传机制来保证可靠传输。TCP 给数据分节进行排序…...
“ /^A-Z:\\{1,2}^/:\*\?<>\|+\.(jpg|gif|png|bmp)$/i ”这个正则表达式的理解
这个正则表达式可以分解为以下几个部分: ^:这是一个开始符号,表示匹配必须从字符串的开始部分开始。/:这是一个斜杠符号,通常在正则表达式中用来表示特殊字符的转义。A-Z::这部分表示匹配一个大写字母后跟…...
批量下载Sentinel数据脚本2023
批量下载Sentinel数据脚本2023 那些最好的程序员不是为了得到更高的薪水或者得到公众的仰慕而编程,他们只是觉得这是一件有趣的事情! 批量下载Sentinel数据脚本2023 批量下载Sentinel数据脚本2023🌿前言🌿脚本地址📧Su…...
lv11 嵌入式开发 ARM指令集中(伪操作与混合编程) 7
目录 1 伪指令 2 伪操作 3 C和汇编的混合编程 4 ATPCS协议 1 伪指令 本身不是指令,编译器可以将其替换成若干条等效指令 空指令NOP 指令LDR R1, [R2] 将R2指向的内存空间中的数据读取到R1寄存器 伪指令LDR R1, 0x12345678 R1 0x12345678 LDR伪指令可以将任…...
北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595
北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 二.管脚分配 三.实现过程讲解及效…...
麒麟系统安装找不到安装源!!!!设置基础软件仓库时出错
记录--华为RH2288 V3服务器安装麒麟系统遇到的问题 1.遇到的问题--“设置基础软件仓库时出错”报错导致无法继续安装 没办法下一步 先说结论:系统bug 该问题在CentOS、Rocky Linux最新版中均存在 解决: (一)、如果是外网直接配…...
代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II
62.不同路径 题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 求解思路: 动规五部曲 确定dp数组及其下标含义:dp[i][j] 表示从(0,0)出发,到(i,j&#x…...
鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)
一、预览器作用 DevEco Studio预览器概况在HarmonyOS应用开发过程中,通过使用预览器,可以查看应用的UI效果,方便开发者实时查看应用的运行效果,随时调整代码。 二、打开Previewer预览器 1、正常启动 打开预览器的位置在DevEco…...
音视频转换软件Permute mac中文板特点介绍
Permute mac是一款Mac平台上的媒体格式转换软件,由Chaotic Software开发。它可以帮助用户快速地将各种音频、视频和图像文件转换成所需格式,并提供了一些常用工具以便于用户进行编辑和处理。 Permute mac软件特点 - 支持大量格式:支持几乎所…...
前端uniapp列表下拉到底部加载下一页列表【下拉加载页面/带源码/实战】
目录 一. 图片1.2. 二.list.vue三.uni-load-more.vue最后 一. 图片 1. 2. 二.list.vue <template><view><!--列表--><scroll-view scroll-y"true" class"scroll-Y" :style"height: scrollviewHigh px;" lower-threshol…...
超聚变服务器关闭超线程CPU的步骤(完整版)
前言: 笨鸟先飞,好记性不如烂笔头。 我们项目都用不到超线程CPU,所以调测设备的时候都需要关掉,最近新设备换成了超聚变的服务器,这篇记录我关闭(超聚变)服务器超线程CPU的方法步骤。 关闭超线程CPU的步骤…...
智能驾驶汽车虚拟仿真视频数据理解(一)
赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个?不考虑多物体提交。障碍物,尽可能选择状态发生变化的物体。如果没有明显变化的,则考虑周边的物体。车的状态最后趋于减速、停止,时序…...
事关Django的静态资源目录设置(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)
在Django的setting.py中常见的三句静态资源(static)目录设置语句如下: STATICFILES_DIRS [os.path.join(BASE_DIR, static)] STATIC_ROOT os.path.join(BASE_DIR, static) STATIC_URL /static/下面介绍这三句话的作用。 首先说第1句和第2句: STATI…...
Vue.js2+Cesium1.103.0 十四、绘制视锥,并可实时调整视锥姿态
Vue.js2Cesium1.103.0 十四、绘制视锥,并可实时调整视锥姿态 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"><divclass"control"style"position: absolute;right: 50px;top: 50px…...
批量替换WordPress文章内图片链接
在WordPress使用过程中,如果中途更换了域名,原先文章内的图片使用的是原来的域名,就会造成文章页里面的图片链接无法显示。如果从后台文章挨个修改就比较麻烦。可以通过数据库进行批量替换即可。 使用 PHPMyadmin 打开 数据库,登…...
关于DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC的一些发现
任务在哪 这个是11g以后的自动收集统计信息的后台任务,10g之前是在dba_scheduler_jobs里查看 SQL> SELECT CLIENT_NAME ,STATUS ,MEAN_INCOMING_TASKS_7_DAYS,MEAN_INCOMING_TASKS_30_DAYS FROM DBA_AUTOTASK_CLIENT WHERE…...
MatrixOne 支持多样化生态工具
近日,云原生数据库 MatrixOne 支持多样化生态工具,包括:数据集成工具、BI 工具和数据计算引擎这三类生态工具。 云原生数据库使得传统数据库得以充分结合云服务的免运维、高弹性、高可扩展、高可用、高性价比优势,又顺应了云端应…...
力扣刷题篇之位运算
系列文章目录 目录 系列文章目录 前言 一、位运算的基本运算 二、位运算的技巧 三、布隆过滤器 总结 前言 本系列是个人力扣刷题汇总,本文是数与位。刷题顺序按照[力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode࿰…...
asp.net core mvc 控制器使用配置
一、在根目录 添加 mysettings.json 文件 mysettings.json 文件代码如下: {"MySettings": {"Name": "独立配置文件","Site": "lt"} }appsettings.json 文件代码如下: {"Logging": {&quo…...
Hadoop学习总结(MapRdeuce的词频统计)
MapRdeuce编程示例——词频统计 一、MapRdeuce的词频统计的过程 二、编程过程 1、Mapper 组件 WordcountMapper.java package com.itcast.mrdemo;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
