【计算机网络】详解TCP协议(上) TCP协议头结构 | ACK确认应答 | 超时重传机制

news2024/11/25 5:31:12

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多计算机网络知识专栏:计算机网络🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述


目录

  • 一、TCP协议的特点
  • 二、TCP协议头结构
  • 三、ACK确认应答机制
  • 四、超时重传机制
    • 往返时延RTT和超时重传时间RTO

一、TCP协议的特点

TCP 是⾯向连接的可靠的基于字节流的传输层通信协议

  • 1.⾯向连接的:⼀定是⼀对⼀才能连接,不能像 UDP 协议可以⼀个主机同时向多个主机发送消息,也就是⼀对多是⽆法做到的
  • 2.可靠的:⽆论的⽹络链路中出现了怎样的链路变化,TCP 都可以保证⼀个报⽂⼀定能够到达接收端。可靠有序,不丢不重
  • 3.字节流:消息是没有边界的,所以⽆论我们消息有多⼤都可以进⾏传输。并且消息是有序的,当前⼀个消息没有收到的时候,即使它先收到了后⾯的字节,那么也不能扔给应⽤层去处理,同时对重复的报⽂会⾃动丢弃

二、TCP协议头结构

在这里插入图片描述

首先是源端口目的端口,共占32个字节。这两个是UDP中也有的,但是UDP中只有这两个,没有后面的校验数据

序列号:在建立连接时由计算机生成的随机数作为初始值,发送端和接收端每发送一次数据,就累加一次数据大小。

序列号保证了网络包不会乱序

确认号:指下一次期望收到的数据的序列号,发送端收到确认应答后代表确认序号之前的网络包都已成功收到

确认应答号保证了不丢包

数据偏移:首部长度

控制位: 哪一位置为1,对应的字段变为有效

  • URG:紧急指针,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用

  • ACK:ACK=1时确认号有效,除了最初SYN包,其余ACK都置为1

  • PSH:推送位,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付

  • RST:表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接

  • SYN:连接请求/连接接受报文,最初需要设定序列号初始值

  • 窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量

  • 检验和:检验首部和数据部分长度

  • 紧急指针: URG=1时才有意义,指出本报文段中紧急数据的字节数

  • 选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认…

三、ACK确认应答机制

一个客户端和服务端进行数据传输的简单示例

如下图:

在这里插入图片描述

当客户端发送一个数据包时,它将包含一个序列号seq,以便服务端可以确认数据包的顺序

当服务端收到数据包时,它将通过发送一个带有确认号ack=N+1的ACK包来确认收到N号数据包。这个确认号N+1表示下一个期望接收的数据包序列号,也代表101之前的包我都收到了

在客户端,每次发送完一个数据包后,它都会等待服务端的确认。当客户端收到服务端返回的ack=N+1的确认包ACK时,它会知道服务端已经成功接收到了上一个1—100的数据包。然后,客户端可以继续发送下一个数据包

四、超时重传机制

TCP在传输数据的过程中,为了确保数据的可靠传输,采用了超时重传机制

即TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段

在这里插入图片描述

  • 情况1:数据包丢失

在客户端发送数据后,如果在规定时间没有收到服务端回复的ack(超过超时时间),那么就证明我们发送包丢失,重新给服务端重新发送上次丢失的包(没有收到ack回应的包),直到在规定时间收到服务端回复的ack

  • 情况2:确认应答包丢失

在规定时间(超过超时时间)内没有收到服务端回复的ack包,就再次发送一遍数据,服务端已经接收过这个数据不会再次处理,把重复的包丢弃,然后重新回复一遍ack

往返时延RTT和超时重传时间RTO

RTT:数据从⽹络⼀端传送到另⼀端所需的时间,也就是包的往返时间

RTT表示从发送端发送数据开始,到发送端接收到来自接收端的确认(ACK),总共经历的时延。也就是从发送数据到收到ack的时间

RTT由三个部分决定:
1.链路的传播时间
2.末端系统的处理时间
3.路由器的缓存中的排队和处理时间

RTO:超时重传时间,指发送方发送数据后,等待接收方确认的时间

TCP每发送一个报文段,就会对这个报文段设置一个超时重传计时器,此时计时器设置的超时重传时间RTO应略大于TCP报文段的平均往返时延RTT,一般取RTO=2RTT
在这里插入图片描述

** **


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解服务发现:从基础到实践

随着微服务架构的广泛应用&#xff0c;服务发现已经成为了一个不可或缺的组成部分。服务发现是微服务架构中的一个关键问题&#xff0c;它涉及到如何管理和协调在一个分布式系统中的大量服务。本文将深入探讨服务发现的基本概念、工作原理和实践应用。我们将首先介绍服务发现的…

怎么使用 Go 语言操作 Apache Doris

Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场景。基于此&#xf…

为什么 Lettuce 会带来更长的故障时间?

作者&#xff1a;杨博东&#xff08;凡澈&#xff09; 本文详述了阿里云数据库 Tair/Redis 将使用长连接客户端在非预期故障宕机切换场景下的恢复时间从最初的 900s 降到 120s 再到 30s的优化过程&#xff0c;涉及产品优化&#xff0c;开源产品问题修复等诸多方面。 一、背景 …

【数据结构】排序算法(一)—>插入排序、希尔排序、选择排序、堆排序

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.直接插入排序 2.希尔排序 3.直接选择排…

力扣:112. 路径总和(Python3)

题目&#xff1a; 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点…

用css画一个半圆弧(以小程序为例)

一、html结构 圆弧的html结构是 两个块级元素嵌套。 <View classNamewrap><View className"inner">{/* 图标下的内容 */}</View></View>二、css样式&#xff1a;原理是两个半圆叠在一起&#xff0c;就是一个半圆弧。那么&#xff0c;如何画一…

【小白专属03】SpringBoot实现增删改查

目录 前言 一、新建Controller层 二、使用PostMan测试接口 前言 上节回顾 上一节我们SpringBoot集成了MybatisPlus。MybatisPlus是一个Mybatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 本节介绍 这一节&#x…

基于微信小程序的明星应援小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

DirectX12_Windows_GameDevelop_0:启程之旅

前言 今天是2023年9月28日&#xff0c;明天就是中秋节了&#xff0c;先祝福大家中秋快乐&#xff01;时光飞逝&#xff0c;岁月如梭&#xff0c;大学四年一晃而逝&#xff0c;眨眼间我们即将毕业。毕业不是意味着要面对社会的险恶&#xff0c;也不是意味着要当打工社畜&#x…

cesium在vue中引入报错解决;cesium在vue中初始化地球

第一步&#xff1a; npm install cesium 第二步&#xff1a; 找到node_modules/cesium/Build/Cesium 文件夹&#xff0c;把这个 Cesium 文件夹复制一份到项目的 public 文件夹下 第三步&#xff1a; 在public文件夹下的index.html 文件中&#xff0c;head 标签里面&#…

51单片机实训项目之产品数量计数器

/********************************************************************************* * 【实验平台】&#xff1a; QX-MCS51 单片机开发板 * 【外部晶振】&#xff1a; 11.0592mhz * 【主控芯片】&#xff1a; STC89C52 * 【编译环境】&#xff1a; Keil μVisio3 * 【程序…

BiMPM实战文本匹配【上】

引言 今天来实现BiMPM模型进行文本匹配&#xff0c;数据集采用的是中文文本匹配数据集。内容较长&#xff0c;分为上下两部分。 数据准备 数据准备这里和之前的模型有些区别&#xff0c;主要是因为它同时有字符词表和单词词表。 from collections import defaultdict from …

3 OpenCV两张图片实现稀疏点云的生成

前文&#xff1a; 1 基于SIFT图像特征识别的匹配方法比较与实现 2 OpenCV实现的F矩阵RANSAC原理与实践 1 E矩阵 1.1 由F到E E K T ∗ F ∗ K E K^T * F * K EKT∗F∗K E 矩阵可以直接通过之前算好的 F 矩阵与相机内参 K 矩阵获得 Mat E K.t() * F * K;相机内参获得的方式…

spring6-IOC容器

IOC容器 1、IoC容器1.1、控制反转&#xff08;IoC&#xff09;1.2、依赖注入1.3、IoC容器在Spring的实现 2、基于XML管理Bean2.1、搭建子模块spring6-ioc-xml2.2、实验一&#xff1a;获取bean①方式一&#xff1a;根据id获取②方式二&#xff1a;根据类型获取③方式三&#xff…

Zilliz@阿里云:大模型时代下Milvus Cloud向量数据库处理非结构化数据的最佳实践

大模型时代下的数据存储与分析该如何处理?有没有已经落地的应用实践? 为探讨这些问题,近日,阿里云联合 Zilliz 和 Doris 举办了一场以《大模型时代下的数据存储与分析》为主题的技术沙龙,其中,阿里云对象存储 OSS 上拥有海量的非结构化数据,Milvus(Zilliz)作为全球最有…

华为摄像头智能安防监控解决方案

云时代来袭&#xff0c;数字化正在从园区办公延伸到生产和运营的方方面面&#xff0c;智慧校园&#xff0c;柔性制造&#xff0c;掌上金融和电子政务等&#xff0c;面对各种各样的新兴业态的涌现&#xff0c;企业需要构建一张无所不联、随心体验、业务永续的全无线网络&#xf…

多线程锁-线程锁知识概述、乐观锁和悲观锁

3. 说说Java"锁"事 3.1 从轻松的乐观锁和悲观锁开讲 悲观锁&#xff1a; 认为自己在使用数据的时候一定有别的线程来修改数据&#xff0c;因此在获取数据的时候会先加 锁&#xff0c;确保数据不会被别的线程修改&#xff0c;synchronized和Lock的实现类都是悲观锁…

【通意千问】大模型GitHub开源工程学习笔记(2)

使用Transformers来使用模型 如希望使用Qwen-chat进行推理,所需要写的只是如下所示的数行代码。请确保你使用的是最新代码,并指定正确的模型名称和路径,如Qwen/Qwen-7B-Chat和Qwen/Qwen-14B-Chat 这里给出了一段代码 from transformers import AutoModelForCausalLM, Aut…

正点原子lwIP学习笔记——WebServer实验

1. WebServer简介 Web Server就是提供Web服务的Server&#xff0c;主要功能是&#xff1a;存储、处理和传递网页给客户端&#xff0c;他只需支持HTTP协议、HTML文档格式以及URL&#xff0c;与客户端的网络浏览器配套。 其中&#xff0c;HTTP的协议就是基于TCP进一步实现的&…

零代码编程:用ChatGPT批量修改文件夹名称中的大小写

一个文件夹下面有很多个子文件夹&#xff0c;要把文件夹中的大写数字全部重命名为小写数字&#xff0c;比如将二 三 四&#xff0c;改成&#xff1a; 2 34 在ChatGPT中输入提示词如下&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个文件夹重命名的任务。具体步骤如…