2.1(TCP)

TCP—传输控制协议

是一种面向连接的可靠传输协议。可靠、有序、无丢弃和不重复。

特点:

  • TCP是面向连接(虚连接)的传输层协议
  • 每一条TCP连接有且只能有两个端点。
  • 可靠、有序、无丢弃和不重复。
  • TCP协议提供全双工通讯
    • 发送缓存
      • 存放发送方TCP准备发送的数据。
      • TCP已发送但是没有收到确认的数据。
    • 接收缓存
      • 存放发送端发送来的不按照顺序到达的数据
      • 按照顺序到达的数据,但并未被应用程序读取
  • TCP是面向字节流的。TCP将应用层数据仅看做是一串无结构的字节流。
TCP连接的四元组(源IP、源端口、目IP、目端口)--->唯一标识一条TCP连接。

套接字--->IP:port
TCP报文:

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fhwh-1258460726.cos.ap-nan在这里插入图片描述

确认序列号:接收方期望收到发送方发送的下一个字节的序号。1.接收方希望接收到的报文序号;2.该序号之前的数据以全部接收。-----累积确认机制

选项字段:长度可变。MSS数值、窗口扩大因子、时间戳、选择确认机制。

确认位ACK:当ACK=1时,确认号有意义。在连接建立以后,所有传输的报文段都必须将该标志位置为1.
同步位SYN:SYN=1时,代表该数据段是一个连接请求报文。
终止位FIN:当FIN=1时,表明此报文段发送方数据已发送完毕,要求释放连接。

复位RST:表明TCP连接出现严重错误,需要释放连接并重新建立连接。

紧急位URG:代表该报文中存在高优先级的数据,应尽快处理。需要配合紧急指针使用。
推送位PSH:接收方应尽快将接收到的数据交付给对应应用程序。(现在接受的所有)

在这里插入图片描述
在这里插入图片描述![

TCP的可靠性

确认、重传、排序、流控

排序:
MTU:最大传输单元--->以太网环境下1500字节--->数据包大小。
    MTU = IP + TCP/UDP + 数据(MSS)
MSS:最大数据段长度

IPv4:分段后可以分片
IPv6:PMTU整条路经找最小

确认:

ACK

重传:
超时重传:
RTT--->往返时间(指发出端将数据发送后,到本端接收到对端反馈的确认报文的时间总和)
RTO--->超时重传时间

RTO取值略大于RTT值。


快速重传机制--->根据接收方的反馈信息进行数据重传。客户端需要连续接收到三次确认序列号相同的ACK报文,则认为数据丢失,需要进行数据重传。
	快速重传机制会导致部分数据重复传输,降低数据传输效率。
	
解决思路:使用选择确认机制。--->在TCP首部的选项字段中,添加上未接收到的数据信息。发送方接收到该确认报文后,会根据选项字段内容,重新传输缺少的数据部分。
	选择确认机制是否可以执行是需要通讯双方进行协商的。--->在三次握手的前两次SYN报文中进行协商。

RTO数值是动态变化的数值超时,间隔,加倍

流控:(滑动窗口机制)
窗口:窗口的大小是可以指定的,窗口大小指的是无需等待确认报文,而可以直接发送的数据包的最大值。
	rwnd(接收窗口)---最开始等于整个缓存区的大小,浮动变化。

TCP要求发送方依据rwnd发送数据量。发送方的发送窗口大小是依据接收方的反馈信息中的接收窗口大小而设定的。

在这里插入图片描述

TCP连接的建立
TCP连接连接需要解决的问题:
1、知晓对端的套接字信息
2、允许双方进行参数的协商(窗口值、选择确认机制、是否使用窗口扩大因子)
3、对设备进行资源分配

在这里插入图片描述

c/s架构,谁先发送报文谁就是客户端

1.服务(CLOSED-->LISTEN)
      创建接受缓存空间,等待客户端的连接请求
      
2.客户(CLOSED-->SYN-SENT)
      创建接受缓存空间,发送请求报文(SYN=1,seq=x),不携带数据,x(初始序列号随机数且循         环)
          循环带来报文延迟与下一次循环的同序列号报文先后到达
          解决:时间戳(双向,在前俩次握手协商)  
        
      
3.服务(LISTEN-->SYN-RCVD)
      发送接收并且请求的报文(ACK=1,ackeq=x+1,SYN=1,seq=y)
      
4.客户(SYN-SENT-->EATABLISHED)
      收到报文进入下一状态,发送接收报文(ACK=1,ackeq=y+1,                                 seq=x+1),可以携带数据
      
5.服务(SYN-RCVD-->EATABLISHED)
      接受到报文进入下一状态

当TCP连接建立成功,但是客户端突发故障。
此时服务端会等到2小时时间,若2小时时间内没有收到任何客户端的数据,则服务端发送一个探测报文,以后每隔75秒发送一次。若一连发送10次仍没有回复,则服务器认为客户端出现故障,关闭连接。
TCP连接释放
释放前提
1、TCP连接的释放实际上是在释放本地分配给TCP连接的资源
2、本地没有新的数据需要发送

三次握手、四次挥手以及TCP标志位的详细介绍_JHCan333的博客-CSDN博客_tcp握手标记

客户和服务都可以释放,但一般都是客户端

1.客户(ESTABLISHED-->FIN-WAIT-1)
      发送报文(FIN=1,seq=m,ACK=1,ackeq=v)m非随机值,而是累计确认机制最后得到的值
      
2.服务(ESTABLISHED-->CLOSE-WAIT)
      发送报文(ACK=1,ackeq=m+1,seq=v)

3.客户(FIN-WAIT-1-->FIN-WAIT-2)
      接受到报文

4.服务(CLOSE-WAIT-->LAST-ACK)
      发送报文(FIN=1,seq=p,ACK=1,ackeq=m+1)p非随机值,在此之前客户到服务的连接关闭,但       服务还可以发送数据,所有seq还在累计的增加

5.客户(FIN-WAIT-2-->TIME-WAIT-->CLOSED)
      发送报文(ACK=1,ackeq=p+1,seq=m+1),在发送后,会等个2MSL时间后进入连接断开状态,
      MSL是报文段在网络中存活的时间,为两分钟。

6.服务(LAST-ACK-->CLOSED)
      接受到报文
双方同时释放连接

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

phpStudy安装thinkCMF8时,如何解决服务器rewrite和APIrewrite不支持的问题

解决步骤: 一:服务器rewrite 点击后面的问号跳转到官方文档链接: 复制红框内的代码 打开phpstudy,找到配置的站点,点击管理,找到伪静态 点击确认保存即可。 phpstudy会自动重启站点。 此时,…

Hive-技术补充-ANTLR词法语法分析

一、背景 要清晰的理解一条Hql是如何编译成MapReduce任务的,就必须要学习ANTLR。下面是ANTLR的官方网址,下面让我们一起来跟着官网学习吧 ANTLR 二、ANTLR元语言 1、启发 静下来想想,一门语言有什么组成,比如我们的中文&…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+GTX 8b/10b编解码SFP光口传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI…

基于Logstash的动态表同步方案

文章目录 引言I 动态表的同步1.1 利用数据库函数进行动态表名拼接1.2 利用shell脚步进行动态日期表名拼接1.3 方案小结II 增量同步III 同步多数据表引言 基于Logstash由SQLServer向Elasticsearch同步数据,兼容SQL Server 2005,在连接数据库时,url后面加上一个encrypt=false或…

【Mysql数据库基础02】单行函数、排序

单行函数、排序 1 单行函数1.1 常用函数1.1.1 length 字符串的长度1.1.2 ifnull 判断表达式是否为空 1.2 字符函数1.2.1 substr 提取自串1.2.2 转换大小写1.2.3 instr 返回起始索引1.2.4 trim 去除两端指定字符1.2.5 lpad 左填充指定长度 1.3 数学函数1.3.1 round 四舍五入1.3.…

Vue.js中使用Web Workers来创建一个秒表

在Vue.js中使用Web Workers来创建一个秒表应用可以提高性能,因为Web Workers可以在后台线程中运行,不阻塞主线程。下面是一个简单的Vue.js秒表应用的示例,该应用使用Web Worker来执行计时功能。 首先,我们创建一个Web Worker文件…

【iOS】——Blocks

文章目录 前言一、Blocks概要1.什么是Blocks 二、Block模式1.block语法2.block类型变量3.截获自动变量值4._Block修饰符5.截获的自动变量 三、Blocks的实现1.Block的实质2.截获自动变量值3._Block说明符4.Block存储域 前言 一、Blocks概要 1.什么是Blocks Blocks是C语言的扩…

国创证券|超五成私募看好AI成为年度行情主线

3月18日,2024年度全球游戏开发者大会(GDC)与英伟达GPU(图形处理器)技能大会(GTC)举行,出资者关于A股商场的“人工智能”也给予了更多等待。 2月6日至3月15日期间,商场对…

使用 nsenter 排查容器网络问题

需求 我想进入容器中执行 curl 命令探测某个地址的连通性,但是容器镜像里默认没有 curl 命令。我这里是一个内网环境不太方便使用 yum 或者 apt 安装,怎么办? 这个需求比较典型,这里教大家一个简单的方法,使用 nsent…

Linux/Bizness

Enumeration nmap 用 nmap 扫描了常见的端口,发现对外开放了22,80,443 ┌──(kali㉿kali)-[~] └─$ nmap 10.10.11.252 Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-08 01:21 EST Nmap scan report for 10.10.11.252 Host is up (0.36s latency). Not…

H266开源视频编码器VVENC现状

VVenC 是由 Fraunhofer HHI 研究团队开发的,主要是视频编码系统组。HHI 是欧洲最大的研究组织 Fraunhofer 协会的成员,该协会是德国的一个大型非营利性组织。源代码在: https://github.com/fraunhoferhhi/vvenc VVenC几乎与H.266视频标准同时…

什么是VR虚拟现实防火体验馆|VR设备购买|元宇宙文旅

VR虚拟现实防火体验馆是利用虚拟现实(VR)技术打造的一个模拟火灾场景的体验空间。通过虚拟现实头盔和交互设备,参与者可以在虚拟环境中感受和学习如何正确面对火灾,并进行逃生和自救。 这种虚拟现实防火体验馆通常会模拟真实的火灾…

CPU生产的生命周期 - 回收篇

电子废物的可持续再利用和回收每年变得更加重要。随着技术在全世界范围内变得越来越普及和普及,电子垃圾的产生率也随之直接增加。计算机的心脏是中央处理单元或CPU。我们认为电子废物的许多产品都包含某种处理器。为了保护环境免受日益严重的电子废物堆积问题的影响…

在Termux中安装个人hexo博客并结合cpolar工具实现远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

fn键设置

1、起因,按F7 F8调试,总是执行Fn功能,让人反感。 2、搜索了下对应的型号Fn键设置 方法一:浮岛式键盘Fn热键切换功能 方法二:通过键盘属性设置Fn锁定功能。【方法一解决了我的问题,方法二不试了。】 3、问题…

Windows电脑上如何进行硬盘分区操作!

在Windows操作系统环境下,对电脑硬盘进行分区是一种常见的硬盘管理手段,它可以帮助用户更好地组织和管理存储空间,确保操作系统、应用程序和用户数据各有所属。本文将详细介绍在Windows PC上进行硬盘分区的步骤,适用于Windows 7到Windows 11等不同版本的操作系统。 步骤一:…

SinoDB数据库运行分析

SinoDB数据库运行主要从数据库互斥资源等待、数据库写类型、备份文件有效性、Chunk状态等15个方向进行分析,具体说明如下: 一、数据库互斥资源等待 检查项目 数据库互斥资源等待 检查命令 onstat -g con |head -20 说明 onstat -g con 查看目前数据处…

mysql的学习笔记

干前端好几年了,只会前端总感觉少了条腿,处处不自在,决定今年学习下后端的东西.以前总想着学node会更快,但是实际工作上却用不上. 出来混,总是要还的,该学的javaWeb这一套体系的东西,总是需要学习的. 那就开始啦. 一,在本地电脑mac上安装mysql 这个参考的这篇文章,照着做一次…

Python:filter过滤器

filter() 是 Python 中的一个内置函数,用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接收两个参数,一个是函数,一个是序列,序列的每个元素作为参数传递给函数进行判定&…

Linux——进程通信(二) 匿名管道的应用:进程池

前言 之前我们学习了进程通过匿名管道进行通信,实现了两个进程的数据传输。 如果我们管理的是很多个进程,通过管道发送指令,因为如果管道中没有数据,读端必须等待,也就是被管理的进程们都在等待我发送的指令&#xf…