详解TCP协议多种机制

1.TCP报文格式

为了方便后续各位深入理解TCP机制,我们有必要先了解一下TCP的报文格式,首先我们先来看如下图
在这里插入图片描述
第四行那六个单词分别有不同的作用,初始为0,无作用,置为1即代表不同作用,具体后面会介绍

我们后面要介绍的各种机制,实际都与这些息息相关,OK,话不多说,我们首先来介绍第一个机制——-——
可靠性机制

2.可靠性机制

可靠性机制主要是由确认应答,超时重传,连接管理(重中之重之重之重之重),拥塞管理实现的,下面我们来一一介绍。

2.1确认应答

详细解析:发送端每发送一条数据都会根据数据生成一个序号,然后把这个序号写入TCP报文头中,也就是上面报文图的第二行,接收端在接收这条数据之后,会将序号加1然后填入确认序号,并将ACK 置为1表示是对之前数据的应答,也是按照TCP报文格式发送的,那么发送端在接收到这个报文之后就知道接收端确实接收到了之前的数据,就会放心的去继续发送数据,然后接收端继续发送ACK应答,如此循环直到数据发送完毕。

这么看确实比UDP好不少,UDP管你收没收到,发完就润。

补充:注意区分应答响应
应答:在传输层层面,只是一个标记,虽然是按照TCP报文格式发送的,但是数据项为空
响应:在应用层层面,是针对客户端请求计算出来的结果,包含真实数据

白话版:想象一下你跟女生激情告白,写了三千字小作文,第一种情况:女生看完扣了个1表示消息收到了,但是没有任何表态,仅此而已。
第二种情况:女生热泪盈眶,写了三万字小作文明确的拒绝了你。哈哈。。。
那么应答就是扣了一1
响应则是三万字小作文,针对你的要求(在一起)给出了明确的结果(拒绝)。

2.2超时重传

介绍;ACK是一个确认信号,ACK置为1即表示你刚才发的数据我都收到了。
所谓ACK应答也即是把ACK置为1的TCP报文。
详细解析:数据在传输过程中要经过很多网络设备,比如:路由器,交换机,运营商网络等等,,
在此过程如果任何一个设置出问题,比如太阳耀斑,地球爆炸,网络中断,本次数据传输就会出现超时现象(规定时间内没有拿到刚发送数据的ACK应答

那么设计TCP协议的大牛是如何处理这个问题呢,啊听名字就知道,如果确定出现超时现象了我就重新发一次数据。

那会不会发送端成功发送了数据1-1000,接收端也接收了,但是接收端发送ACK应答时出现了丢包,导致发送端判定为超时了重新发了数据1-1000,那么接收端会接收两个数据1-000吗,答案是不会,接收端会根据报文中序号来判断是否接收过这些数据,如果发现接收过就舍弃第二次收到的数据1-1000,然后重新发送数据1-1000ACK应答.

2.3连接管理(重中之重之重之重之重之重之重)

介绍:上面讲的都是发送端和接收端数据传输之间的设计,那发送端和接收端是如何建立连接呢,大牛对于建立连接又有怎样的设计呢😮。

概要:
连接建立时:三次握手
连接断开时:四次挥手
(礼貌这一块👍)

先看图:
在这里插入图片描述

SYN就是握手字符,我们前面说SYN等都是置为0的,不发挥作用,那么当SYN置为1就表示我想要和你建立连接,是一个握手信号

ACK前面已经说过了不赘述。

那么现在我们来看图说话吧!
第一步: 首先发送端 发送了一个SYN为1的TCP报文表示我想和你建立连接,接收端同意建立连接(不然怎么传数据),这表示发送端的发送能力没有问题
第二步:接收端发送了ACK为1 和SYN为1的TCP报文,ACK为1表示我收到了你的连接请求,SYN为1表示我也跟你建立连接,这表示接收端的接收能力和发送能力没有问题
第三步:发送端再发送一个ACK为1的TCP报文,表示我也收到了你的连接请求。这表示发送端的接收的能力没有问题

如此大功告成!!!发送端和接收端就可以开启没羞没臊的数据传输生活辣!

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

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

相关文章

Python蓝桥杯刷题-小数第n位详解

题目描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0,它们就有了统一的形式。 本题的任务是:在上面的约定下,求整数除法小数点后的第 n 位开…

android,flutter 混合开发,pigeon通信,传参

文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…

Redis 客户端C++使用

安装 redis-plus-plus 在C中使用Redis,通常需要借助第三方库来实现与Redis服务器的交互。目前比较流行的库有 redis-plus-plus 和 hiredis。redis-plus-plus 是基于 hiredis 实现的,hiredis 是⼀个 C 语⾔实现的 redis 客⼾端,因此需要先安装…

Python的那些事第二十二篇:基于 Python 的 Django 框架在 Web 开发中的应用研究

基于 Python 的 Django 框架在 Web 开发中的应用研究 摘要 Django 是一个基于 Python 的高级 Web 框架,以其开发效率高、安全性和可扩展性强等特点被广泛应用于现代 Web 开发。本文首先介绍了 Django 的基本架构和核心特性,然后通过一个实际的 Web 开发项目案例,展示了 Dj…

亲测Windows部署Ollama+WebUI可视化

一. Ollama下载 登录Ollama官网(Ollama)点击Download进行下载 如果下载很慢可用以下地址下载: https://github.com/ollama/ollama/releases/download/v0.5.7/OllamaSetup.exe 在DeepSeek官网上,你可以直接点击【model】 到达这个界面之后,…

SpringBoot2.0整合Redis(Lettuce版本)

前言: 目前java操作redis的客户端有jedis跟Lettuce。在springboot1.x系列中,其中使用的是jedis, 但是到了springboot2.x其中使用的是Lettuce。 因为我们的版本是springboot2.x系列,所以今天使用的是Lettuce。关于jedis跟lettuce的区别&#…

自由学习记录(36)

Linux Linux 是一个开源的操作系统,其内核及大部分组件都遵循自由软件许可证(如 GPL),允许用户查看、修改和分发代码。这种开放性使得开发者和企业可以根据自己的需求定制系统​。 “Linux”严格来说只是指由Linus Torvalds最初开…

【数据分享】1929-2024年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站…

如何使用Redis实现分布式锁

通常情况下,我们一般会选择基于 Redis 或者 ZooKeeper 实现分布式锁,Redis 用的要更多一点,我这里也先以 Redis 为例介绍分布式锁的实现。 基于 Redis 实现分布式锁 如何基于 Redis 实现一个最简易的分布式锁? 不论是本地锁还是…

【办公类-90-02】】20250215大班周计划四类活动的写法(分散运动、户外游戏、个别化综合)(基础列表采用读取WORD表格单元格数据,非采用切片组合)

背景需求: 做了中班的四类活动安排表,我顺便给大班做一套 【办公类-90-01】】20250213中班周计划四类活动的写法(分散运动、户外游戏、个别化(美工室图书吧探索室))-CSDN博客文章浏览阅读874次&#xff0…

scroll、offset、client三大家族和getBoundingClientRect方法

scroll、offset、client三大家族和getBoundingClientRect方法 1.offset(只能读,不能修改)2.client(只能读,不能修改)3.scroll滚动家族4.getBoundingClientRect方法 1.offset(只能读,不能修改) offsetParent:离当前元素最近的有定位的祖先元素…

【LeetCode】LCR 139. 训练计划 I

题目 教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。 示例 1: 输入:actions [1,2,3,4,5] 输出&#…

Ubuntu 20.04源码安装opencv 4.5.0

安装依赖项 sudo apt install -y g sudo apt install -y cmake sudo apt install -y make sudo apt install -y wget unzip安装opencv依赖库 sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev l…

阿里云上的网站配置HTTPS

1. 获取SSL证书 创建证书 下载证书 下载 上传 .key .pem 文件 到 阿里云服务器 /etc/nginx/ssl nginx.conf 配置 server { listen 443 ssl; server_name yuming; ssl_certificate /etc/nginx/ssl/*.pem; ssl_certificate_key /etc/nginx/ssl/*.key;

jetbrains IDEA集成大语言模型

一、CodeGPT ‌CodeGPT‌是由CSDN打造的一款生成式AI产品,专为开发者量身定制。它能够提供强大的技术支持,帮助开发者在学习新技术或解决实际工作中的各种计算机和开发难题‌1。 idea集成 1.在线安装:直接在线安装 2.离线安装 JetBrains Mar…

记录一次部署PC端网址全过程

当我查看我之前写的文章时、顿时惊奇发出感慨:啥时候写的?是我写的么?疑惑重重… 所以说,好记性不如烂笔头。 记录一次部署PC端网址全过程 部署PC端网址分是三步:第一步:申请域名并映射到外网IP &#xff0…

鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案

往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录) ✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~ ✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

C#项目05-猜数字多线程

本项目利用多线程,通过点击按钮猜数字, 知识点 线程 基本概念 进程:一组资源,构成一个正在运行的程序,这些资源包括地址空间、文件句柄以及程序启动需要的其他东西的载体。 线程:体现一个程序的真实执行情况, 线…

广西壮族自治区园区投促中心党委书记陶德文率团到访深兰科技

2月16日,广西壮族自治区园区投促中心党委书记、主任,自治区园区办党组成员陶德文率团来到深兰科技集团上海总部考察调研,并与深兰科技集团创始人、董事长陈海波等集团管理层座谈交流,双方围绕深兰科技人工智能项目落地广西的相关事…

推荐几款较好的开源成熟框架

一. 若依: 1. 官方网站:https://doc.ruoyi.vip/ruoyi/ 2. 若依SpringBootVueElement 的后台管理系统:https://gitee.com/y_project/RuoYi-Vue 3. 若依SpringBootVueElement 的后台管理系统:https://gitee.com/y_project/RuoYi-Cl…