计算机网络入门 -- TCP详解

news2024/9/24 2:23:29

计算机网络入门 – TCP详解

1.TCP协议

1.1 报文格式

alt text

  • 1.32位序号:该条TCP数据携带的起始序号。

  • 2.32位确认序号:期望对方发送数据从那个序号开始发送。

  • 3.4位首部长度:最大为0xF(15),指的是TCP头部长度。
    首部长度 = 4 位首部长度 ( D E C ) ∗ 4 首部长度 = 4位首部长度(DEC) \ast 4 首部长度=4位首部长度(DEC)4

  • 4.6个标志位:

    • URG:紧急标志位(直接越过发送缓冲区等待的数据优先传输到网络层,一般配合底下16位紧急指针使用)。
    • ACK:确认标志位。
    • PSH:发送数据标志位。
    • RST:重置连接标志位(当无法识别对方发来的连接请求时,会使用RST)。
    • SYN:发起连接标志位。
    • FIN:断开连接标志位。
  • 5.16位窗口大小:告知消息发送方,自己对消息的接收能力为多少,该值是动态变化的。

  • 6.16位校验和:校验数据在传输过程中是否失真。

  • 7.16位紧急指针:配合URG标志位发送带外数据。

  • 8.MSS:最大报文段长度

1.2 传输机制

1.2.1 确认应答(ACK)机制

alt text

TCP通过肯定的确认应答实现可靠数据传输,当发送端发出数据后会等待对方的确认应答,若有确认应答则数据发送成功,反正数据可能丢失。在一定时间内没有等到确认应答,发送端就认为发送数据已经丢失,并重新发送。因此,即使产生数据丢包,仍然能够保证数据传输到对方。

  • 传输时丢包:当发送端发出数据后未得到接收端确认,在认定数据丢失后发送端将重新发送数据。
  • 确认应答丢失:若此时接收端已接收到发送端的数据,但应答信息在传输过程中未到达发送端则会重新发送。

1.2.2 超时重传

重发超时指在重发数据之前,等待确认应答到来的那个特定时间间隔。若超过该时长仍未接收到应答信息,发送端将重新发送数据,以下时时间定义:TCP要求不论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵情况发生何种变化,都必须保持这一特性。为此,它在每次发包时都会计算往返时间(Round Trip Time也叫RTT。是指报文段的往返时间。) 及其偏差(RTT时间波动的值、方差。有时也叫抖动。) 。将这个往返时间和偏差相加重发超时的时间,就是比这个总和要稍大一点的值。
R T O = R T T ( 上次 ) × i + R T T ( 上上次 ) × ( 1 − i ) RTO = RTT(上次) \times i + RTT(上上次) \times (1 - i) RTO=RTT(上次)×i+RTT(上上次)×(1i)

1.2.3 连接管理机制

即TCP连接时的三次握手和断开的四次挥手

1.2.4 滑动窗口机制

TCP以1个单位,每发一个段进行一次确认应答处理,保证数据传输可靠性,但缺点是包的往返时间越长则通信性能越低。为了解决传输效率低下,TCP引入窗口概念。即在往返时间较长的情况下,也能控制网络性能下降。确认信息不再以单个分段,而是以更大的单位进行确认时,转发时间将大幅缩短。简单来说就是当发送端主机发送一个段后不必要一直等待确认应答,而是继续发送。

alt text

滑动窗口在遇到数据丢包时处理方法如下:

  • 1.数据包已传给对方但ACK丢失

alt text

  • 2.传输的数据包直接丢失,或者说是某个报文段丢失的情况。

alt text

1.3 流量控制

发送端根据自己实际情况发送数据,但接收端可能收到一个毫无关系的数据包有可能会在处理其他问题上花费一些时间。因此在为这个数据包做其他处理时会消耗一些时间,甚至在高负载情况下无法接收任何数据,从而导致接收端将发送端数据放弃,出发重传机制,浪费流量。而TCP提供了一种可以让发送端根据接收端的实际接收能力控制发送的数据量的机制,即流量控制。
流量控制具体操作是接收端向发送端通知自己能够接收的数据大小,此时发送端就不会发送比该限度更大的数据。该限度为窗口大小。
TCP首部中有一个专门字段用于通知窗口大小。接收主机将自己可以接收的缓冲区大小放入该字段中发送给发送端。值越大说明网络吞吐量越大。
当接收端缓冲区数据溢出时,窗口大小就会改变,通知发送端。

alt text

1.4 拥塞控制

TCP虽然有流量控制,但在一开始就发送大量数据则会引发问题,因此TCP引入慢启动机制。即先发送少量数据,测试网络情况。当网络情况正常则在按照多大的速度传输

alt text

1.5 延迟应答机制

接收端若每次接收数据后都立即做出应答,则可能会返回一个比较小的窗口。当某个接收端以一个小窗口应答后,发送端会认为这是数据传输上限,则会降低传输速度和流量。为了避免这种事情,引入延迟应答机制。

  • 数量限制:每个N个数据包应答一次
  • 时间限制:超过最大延迟就应答一次

alt text

1.6 心跳机制

当客户端与服务端连接后可能会出现在很长一段时间内无任何数据传输的情况,此时服务端会定时向客户端发送一个心跳数据来确认客户端与服务端是否连接正常。该心跳数据会每隔75s发送一次,当发送10次后客户端无任何响应则视为客户端下线。

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

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

相关文章

huawei USG6001v1学习---防火墙高可靠性(双机热备)

1.什么是双机热备 如图:当左图的防火墙发生故障时,整个系统都会收到影响,而右图即使有防火墙发生故障,但是还有一台防火墙做备份,相对于只有一台防火墙,要可靠些。 由于防火墙上不仅需要同步配置信息&…

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作,本次操作需要java8的版本,将之前安装的java17卸…

大模型学习笔记 - LLM模型架构

LLM 模型架构 LLM 模型架构 1. LLM 核心模型 Transformer2. 详细配置 2.1 归一化方法2.2 归一化模块位置2.3 激活函数2.4 位置编码 2.4.1 绝对位置编码2.4.2 相对位置编码2.4.3 旋转位置编码 RoPE2.4.4 ALiBi位置编码 2.5 注意力机制 2.5.1 完整自注意力机制2.5.2 稀疏注意力机…

【QT】QT 概述(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)

一、Qt 背景介绍 1、什么是 Qt Qt 是一个跨平台的 C 图形用户界面应用程序框架。 它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展。Qt 为开发者提供了一种基于组件的开发模式,开发者可以通过简单的拖拽和…

Puromycin(嘌呤霉素)— pac基因筛选抗生素

Puromycin是由Streptomyces alboniger(白黑链霉菌)产生的一种氨基糖苷类抗生素,可抑制原核细胞和真核细胞的肽基转移。Puromycin可抑制革兰氏阳性菌、多种动物细胞和昆虫细胞的生长,但是真菌和革兰氏阴性菌对Puromycin具有抗性&am…

大屏系统类优质UI风格

大屏系统类优质UI风格

JetBrains IDE 使用git进行多人合作开发教程

以下DEMO可以用于多人共同开发维护一个项目时,使用Git远程仓库的实践方案 分支管理 dev:开发分支test:测试分支prod:生成分支 个人开发也最起码有一个masterdev,作为主分支和当前开发分支。master永远是稳定版本&am…

工厂方法模式java

文章目录 1. 概念2. 示例3. 代码示例 1. 概念 定义: 工厂方法模式又叫工厂模式,通过定义工厂父类创建对象的公共接口,而子类负责创建具体的对象 作用: 由工厂的子类来决定创建哪一个对象 缺点: 工厂一旦需要生成新的东西就需要修改代码,违背的开放封闭原则 2. 示例 3. 代码示…

RabbitMQ发布确认及交换机类型

RabbitMQ发布确认机制详解 一、引言 在消息队列(MQ)技术中,RabbitMQ因其稳定性、可靠性和易用性而受到广泛欢迎。为了确保消息的可靠传递,RabbitMQ提供了一系列高级特性,其中发布确认(Publisher Confirms&…

顶级 Vue 管理仪表板和模板

Vue.js 是当今繁忙的 Web 开发领域中最受欢迎的 JavaScript 框架之一,用于创建交互式动态用户界面。Vue.js 的组件反应性及其流畅的数据绑定使其在管理仪表板设计方面占据了主导地位。 本文讨论了一些领先的 ​​Vue 管理员仪表板,它们可以节省您制作 We…

昇思25天学习打卡营第11天|基于 MindSpore 实现 BERT 对话情绪识别

BERT是一种先进的语言模型,由Google在2018年推出。它通过双向编码器Transformer的Encoder部分,捕捉词语和句子的深层含义。BERT的创新之处在于其预训练方法,特别是Masked Language Model和Next Sentence Prediction,这使得它在问答…

【Android面试八股文】荣耀面试算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵

文章目录 1. 算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵1.1 题目描述1.2 算法实现1.2.1 步骤说明:1.2.2 算法实现1.2.3 代码实现:1.2.4 程序说明:1.2.5 示例详细讲解如何将一个矩阵顺时针旋转90度1. 算法题:输入一个N阶方…

【练习】链表题

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 两数相加 题目描述 题解 代码实现 两两交换链表中的节点 题目描…

4、可变电阻、可变电感、可变电容(simulink仿真)

4、可变电阻、可变电感、可变电容&#xff08;simulink仿真&#xff09; 1&#xff0c;自己搭建R/L/C元件 2&#xff0c;搭建可变R/L/C元件 以第三讲为基础做此讲 MATLAB中 电气仿真元件 1&#xff0c;U/I 测量, 2&#xff0c;U/I关系方程建立受控源信号 自己的电阻 我们先将其…

基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-排它网关里数字比较大小的处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、在仿钉钉流程中&#xff0c;条件的数字比较跟普通的字符串比较又不一样&#xff0c;同时在flowable里也是不同的表达式&#xff0c;所以需要特殊处理 2、后端方面 增加操作符 //以下为…

Linux 注意事项

Linux 与 Windows 是两个相互独立的操作系统&#xff0c;两者有较大差距&#xff1a; 1.1 Linux 严格区分大小写&#xff08;Windows不严格区分大小写&#xff09;&#xff1b; 1.2 Linux 中所有内容&#xff0c;硬件设备都以文件形式保存在 /dev 目录下&#xff08;万物皆文件…

16_网络IPC4-数据传输

send() 用于流式套接字 向SOCKET发送数据 。 Socket 只是通信节点&#xff0c;通信之前需要连接&#xff0c;即发送端发送之前 需要知道对端的地址&#xff0c;才能找到对端的socket节点&#xff0c;才能发送成功。而接收端不同&#xff0c;接收函数 如 recv () 不需要一定知道…

【ai】学习笔记:电影推荐2:工程+ 深度学习模型

ml_movice_recommend_flask http://127.0.0.1:5000/recommend【ai】学习笔记&#xff1a;电影推荐1&#xff1a;协同过滤 TF-DF 余弦相似性 进行了学习和理解&#xff0c;成功运行了工程。本文进一步分析。不知道是否有引入语义分析&#xff1f;还是单独只是匹配算法&#xff…

吴恩达老师机器学习-ex1

线性回归 有借鉴网上部分博客 第一题 单变量 先导入相关库 import numpy as np import pandas as pd import matplotlib.pyplot as plt 读取数据&#xff0c;并展示前五行 datapd.read_csv(path,headerNone,names["Population","Profit"]) data.head…

C++基础入门(二)(函数重载,引用,内联函数,nullptr)

目录 一. 函数重载 1. 概念 2. 实现 (1). 参数类型不同 (2). 参数个数不同 (3). 参数类型顺序不同 3. 注意事项 (1). 返回值不能作为重载的条件 (2). 不能仅按函数返回类型重载 (3). 与缺省参数的问题 二. 引用 1. 概念和定义 2. 引用的特性 (1). 引用在定义时必须…