传输控制协议TCP

目录

TCP报文格式

TCP的特点

TCP原理:

1.确认应答机制

2.超时重传机制

3.连接管理机制

建立连接

​编辑关闭连接

4.滑动窗口机制

​5.流量控制

6.拥塞控制

7.延迟应答

8.捎带应答


TCP报文格式

1.源端口号:发送端的哪一个端口发出的

2.目的端口号:接收端的哪一个端口所接收

3.序号:每一个字节数据都进行了编号

 4.确认序号:通知发送端已接收的TCP信息

5.首部长度:TCP报头的长度总和

6.保留:空着,方便日后对TCP进行调整或升级

7.标志位(一个一位):

  • URG:紧急指针是否有效
  • ACK:确认字符表明信息接收无误
  • PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走
  • RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段
  • SYN:请求建立连接;我们把携带SYN标识的称为同步报文段
  • FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段

8.窗口大小:窗口大小的信息(后面解释)

9.校验和:确认TCP信息传输是否正确

10.紧急指针:标识TCP信息中哪一部分数据是紧急数据

11.选项:可有可无,有就是对TCP报文进行一定的拓展.因为选项的存在,TCP的报头长度是不固定的.

TCP的特点

  1. 面向字节流:随意的读取数据,不像数据报一样规定发出的大小与读取的大小需要一致
  2. 拥有缓冲区:创建Socket时同时会在内核中分别创建一个发送缓冲区与接收缓冲区
  3. 全双工:既可以发送也可以接收
  4. 保活定时器:不定时的向对方发送一个包,检查连接是否还存在.如果不存在了,会自动释放掉连接

TCP原理:

1.确认应答机制

 A给B发送信息后,只有收到B相应的应答信息,才会继续发送下一条信息.

2.超时重传机制

情况一:

A发送信息后,可能会丢包.在一定时间没有收到B的应答信息后,A会重传上一条发送的信息. 

情况二:

A发送信息后,B的应答信息丢失了.在一定的时间后,A重传上一条信息.

此时B就会收到两条相同的信息.可以在B端的接收缓冲区中根据序列号对信息进行去重操作

3.连接管理机制

建立连接

根据前面的确认应答机制,A向B发起连接时需要分四步:

  1. A向B发送SYN请求建立连接
  2. B向A发送ACK表示确认收到信息
  3. B向A发送SYN请求建立连接
  4. A向B发送ACK表示确认收到信息

为了节省资源,可以发现第2步与第3步分别的发出对象与接受对象都是一致的且时间连续.

所以,第2步与第3步可以合并一齐发送.

就有了TCP建立连接中的三次握手.

TCP的三次握手操作,既可以确认连接双方的身份,也可以反映出连接双方的接受功能与发送功能是否正常,并在一定程度上对TCP传输的可靠性起到了辅助作用.

关闭连接

同样的,A向B关闭连接也是一共分为四步:

  1. A向B发送FIN表示即将关闭连接
  2. B向A发送ACK表示确认应答
  3. B向A发送FIN也表示即将关闭连接
  4. A再向B发送ACK表示确认应答

在A最后一次向B发送ACK后,才会分别真正的关闭连接,释放资源

以上就是TCP的四次挥手.

此处中的B不会把ACK与FIN合并成一条TCP发送给A.

因为两条语句之间可能会有一定的时间间隔.

这个if语句中的hasNext是接收到A端的FIN信息后判断的.

在break之后B会立即发送ACK.

至于什么时候发送FIN取决于编写的代码是如何运行的.

(代码来源于:[JAVAee]网络编程-套接字Socket_HY_PIGIE的博客-CSDN博客的TCP示例一中的服务器截取) 

4.滑动窗口机制

我们通过确认应答机制其实可以发现,其效率并不是非常高效.

发送信息后要等待对方发送确认应答后才能发送下一条,不然就要等待超时重传了.

于是,便有了滑动窗口机制.

滑动窗口机制是:

根据一定的大小,可以等待返回的AC发送后面的TCP信息

如下图:

在A发送1~1000后没有收到ACK也可以紧接着发送后两条TCP信息. 

在A收到了发送1~1000的ACK后,窗口会相应的向后移动一条TCP信息.

当然其中也会发送丢包的情况

情况一:

B端返回的ACK丢包.

像上图中,如果接收了1~1000,下一条为1001的ACK丢包了,但下一条1001~2000的ACK没有丢包.

A就可以通过1001~2000的ACK来确实1~1000已经被B接收到了.

(ACK的含义能够涵盖上面所有的ACK,所以之前的ACK丢包了也没有太大的影响)

情况二:

A发送的信息丢包.

A发送的1~1000丢包,并继续发送后面的TCP信息.

B端照常接收,但会申请1~1000的信息,当连续三次申请后.

A会重传1~1000的信息 

5.流量控制

接收端处理数据的速度是有限的。

如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。

因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制

(如果接收端缓冲区满了,就会将窗口置为0;这时发送方不再发送数据,但是需要定期发送一
个窗口探测数据段,使接收端把窗口大小告诉发送端。)

6.拥塞控制

在网络上,计算机可能会进入拥塞状态.如果在拥塞状态下,TCP还使用滑动窗口增大效率的进行传输信息.会导致许多信息丢失,加重拥塞状态.

对此,TCP引入了慢启动.

开始先发少量的数据,对网络状态进行试探,并使用窗口对信息的发送进行了一定的限制.

初始,窗口大小为1,在发送M1并收到确认应答后.窗口的大小成倍的增加,发送方继续根据扩大后的窗口发送信息.

(图片来自《计算机网络》[第七版]谢希仁编著) 

虽然叫"慢启动",但他增加的速度是以指数形式增加的.到了后面速度会非常快.

这就不符合为了应对计算机拥塞状态的初心了.

于是,便有了一个阈值.在窗口大小达到这个阈值后,会以线性的方式递增.

拥塞控制主要作用是,在避免给网络造成太大压力的同时尽快传输信息的方案.

7.延迟应答

在接收端中的接收缓存区,加设内存空间为10.

一次收到了5大小的信息并返回ACK.

返回ACK后,接收端就会将缓存区的信息进行刷新.那缓存区还有额外5的空间就会一直没有被使用到,浪费了许多性能.

对此,TCO引入了一个延迟应答.

接收端接收一次信息,往缓存区中写入了5.且并没有立刻返回ACK.

而是,间隔一段时间后再返回ACK.在这段间隔的时间中,就可以接收第二次发送的信息,这时接收缓存区又写入了5.

再返回ACK的时候就可以一次性将10大小的缓存区全部刷掉

但也并不是每一条信息都会延迟应答.

  • 数量限制:每隔N个包就应答一次;(N一般为2)
  • 时间限制:超过最大延迟时间就应答一次
     

8.捎带应答

在延迟应答的基础上,我们发现,很多情况下,客户端服务器在应用层也是 "一发一收" 的.

在A发送了1~24后并向B申请1~5的信息.

B可以将确认1~24的ACK与发送1~5的信息合并成一个包发送.

总的来说,TCP这么多原理与属性.实现了其可靠性和帮助提升性能的为: 

可靠性:

  • 校验和
  • 序列号(按序到达)
  • 确认应答
  • 超时重发
  • 连接管理
  • 流量控制
  • 拥塞控制

提高性能:

  • 滑动窗口
  • 快速重传
  • 延迟应答
  • 捎带应答

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

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

相关文章

如何使用Python编写小游戏?

大家好,我是沐尘而生,如果你是一个热爱编程的小伙伴,又想尝试游戏开发,那么这篇文章一定能满足你的好奇心。不废话,让我们马上进入Python游戏开发的精彩世界吧! Python游戏开发的魅力 编写小游戏不仅仅是锻…

Markdown编辑器 Mac版Typora功能介绍

Typora mac是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。 Typora Mac版除了支持常见的Markdown语法外&#…

机器学习需要面对的两大问题:泛化性和可信性

随着人工智能的迅速发展,机器学习成为了炙手可热的领域,它让计算机能够从数据中学习并做出智能决策。然而,机器学习在取得巨大成功的同时,也面临着两个重大挑战:泛化性和可信性。这两大问题的解决关系到机器学习应用的…

【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)

案例引入 通过解释器模式来实现四则运算,如计算ab-c的值,具体要求 先输入表达式的形式,比如abc-de,要求表达式的字母不能重复在分别输入a,b,c,d,e的值最后求出结果 传统方案 编写一个方法,接收表达式的形式&#xf…

长胜证券:宁德时代发布神行超充电池 信创利好政策陆续出台

昨日,两市股指早盘震动回升,午后再度回落,尾盘加快下行。截至收盘,沪指跌0.82%报3150.13点,深成指跌0.94%报10579.56点,创业板指跌0.73%报2132.97点,科创50指数跌1.71%;两市算计成交…

最新Ubuntu LVGL SDL模拟器安装

前言 本文主要说明Ubuntu 23.4安装LVGL 9.0以及基于SDL的模拟环境。 代码下载 访问lv_port_pc_eclipse可以看到相信信息,官方已经打包好了整个代码环境。 安装CMAKE。 sudo apt install cmake安装SDL。 sudo apt-get update && sudo apt-get install …

云原生 envoy xDS 动态配置 java控制平面开发 支持restful grpc实现 EDS 动态endpoint配置

envoy xDS 动态配置 java控制平面开发 支持restful grpc 动态endpoint配置 大纲 基础概念Envoy 动态配置API配置方式动静结合的配置方式纯动态配置方式实战 基础概念 Envoy 的强大功能之一是支持动态配置,当使用动态配置时,我们不需要重新启动 Envoy…

安科瑞变电所运维平台在电力系统中应用分析

摘要:现代居民生活、工作对电力资源的需求量相对较多,给我国的电力产业带来了良好的发展机遇与挑战。探索电力系统基本构成, 将变电运维安全管理以及相应的设备维护工作系统性开展,能够根据项目实践工作要求,将满足要求…

hbase 报错 Master passed us a different hostname to use; was=

原因 wsl2的 /etc/hosts 配置的不兼容,我这里是ubuntu22 命令行输入hostname 看输出什么,比如输出 aaa 那么替换/etc/hosts 127.0.0.1 aaa

Mysql之explain详解

1. explain作用 使用explain可以展示出sql语句的执行计划,再根据sql的执行计划去判断这条sql有哪些点可以进行优化,从而让sql的效率达到最大化。 2. 执行计划各列含义 (1)id:id列是select的序列号,这个…

【BASH】回顾与知识点梳理(三十二)

【BASH】回顾与知识点梳理 三十二 三十二. SELinux 初探32.1 什么是 SELinux当初设计的目标:避免资源的误用传统的文件权限与账号关系:自主式访问控制, DAC以政策规则订定特定进程读取特定文件:委任式访问控制, MAC 32.2 SELinux 的运作模式安…

nvm管理node版本

nvm是什么? NVM全名叫做 nodejs version manage,即Node的版本管理工具。 使用NVM,可以通过命令很方便地在多个NodeJS版本之间进行切换。 nvm的下载与安装 下载地址:Releases coreybutler/nvm-windows (github.com) windows系统下载nvm-setup…

【自动化测试】接口自动化01

文章目录 一、熟悉若requests库以及底层方法的调用逻辑二、接口自动化以及正则和Jsonpath提取器的应用6. 高频面试题:9. 示例:接口关联13. 文件上传示例14. cookie关联的接口 努力经营当下 直至未来明朗 一、熟悉若requests库以及底层方法的调用逻辑 接…

RTT(RT-Thread)ADC设备(RTT保姆级介绍)

目录 ADC设备 前言 ADC相关参数说明 访问ADC设备 配置ADC设备 ADC实例 硬件设计 软件设计 ADC设备 前言 ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。 对于ADC的详细介绍和在STM32中的裸机应用可参考以下…

在CentOS 7上使用kubeadm部署Kubernetes集群

如有错误,敬请谅解! 此文章仅为本人学习笔记,仅供参考,如有冒犯,请联系作者删除!! 前言: Kubernetes是一个开源的容器编排平台,用于管理和自动化部署容器化的应用程序。…

软文发布问题解答:高效宣传与推广指南

以下是一秒推小编针对软文发布的20个常见问题及回答: 1. 什么是软文? 答:软文是指用文学手法、写作技巧撰写的宣传文章,以实现对特定受众的陈述、说明和推销。 2. 发布软文的目的是什么? 答:发布软文的目…

出现ffmpeg.dll丢失的修复方法分享,教你快速修复ffmpeg.dll文件

当你使用或尝试运行与FFmpeg相关的应用程序时,可能会遇到一个常见的问题,ffmpeg.dll文件丢失。这个动态链接库文件对于正常运行FFmpeg应用程序至关重要。在本文中,我们将详细探讨为什么会出现ffmpeg.dll丢失的情况,并提供一些修复…

奥威BI数据可视化工具:360度呈现数据,告别枯燥表格

随着企业数据量的不断增加,如何有效地进行数据分析与决策变得越来越重要。奥威BI数据可视化工具作为一款强大的数据分析工具,在帮助企业深入挖掘数据价值方面具有显著优势。 奥威BI数据可视化工具是一款基于数据仓库技术的数据分析工具,具有…

海外应用ASO优化的小技巧3

编写准确的应用程序描述,有4000个字符限制。用户可以访问应用程序的主要功能和信息,要说服并推动用户去下载我们的应用,需要使用自然流利的语言。 1、填写应用描述的方案。 我们需要知道该应用有什么用,能够解决什么问题&#xf…

在医疗行业数字孪生能做些什么?

数字孪生技术随着发展正在多行业遍地开花,在之前的文章中也为大家介绍过数字孪生的行业应用,今天带大家一起探讨一下数字孪生在医疗行业的表现。其实数字孪生在医疗行业已有很多应用案例,从医疗诊断到手术模拟,再到药物研发&#…