计算机基础之-TCP 别再问我啦

news2024/9/20 6:21:05

TCP

  • 协议 格式及部分含义
    • 根据端口号找到上一层的进程
    • 如何解包-整个包长度
  • ACK应答机制
    • 序号-确认序号-实现TCP的可靠传输和流量控制:
    • 为什么要有两个字段(序号和确认序号)?
  • 16位窗口大小-缓冲区
  • 流量控制
  • 16位紧急指针
  • 三次握手
  • 四次挥手
    • 为啥 TIME_WAIT
  • 滑动窗口

协议 格式及部分含义

协议

源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;
32位序号/32位确认号: 后面详细讲;
4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60。(上面讲的)
6位标志位:
URG: 紧急指针是否有效
ACK: 确认号是否有效 序号-确认号-ACK应答机制
PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
16位窗口大小: 后面再说

16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP首部, 也包含TCP数据部分.
16位紧急指针: 标识哪部分数据是紧急数据;
40字节头部选项: 暂时忽略

根据端口号找到上一层的进程

因为TCP报头中含有16位目的端口号,可以根据端口号找到上一层的进程然后交付。

如何解包-整个包长度

TCP的报头是变长报头,因为有选项的加入。每次我们先提取前20个字节,然后我们根据提到的报头中的 4位首部长度来得到整个报头(包括选项)的大小。

ACK应答机制

确认应答机制(ACK)是计算机网络中一种通信机制, 在TCP通信中,当发送方向接收方发送数据时,发送方会等待接收方返回一个确认应答(ACK)来确认已成功接收到数据。

    实现的方式:序号和确认序号保证了 响应应答针对的是哪一条消息的应答.
    序号字段指示TCP数据报中数据部分的第一个字节的序号,用于对数据进行编号和排序
    确认序号字段表示发送方期望下一个收到的字节的序号

序号-确认序号-实现TCP的可靠传输和流量控制:

1.保证请求和应答进行一一对应.
2.确认序号:确认序号之前的数据已经全部收到。(比如我发送了1000,2000,3000,然后接收方发送了确认序号1001,2001,3001,如果最后发送方只收到了3001,那么代表3001之前数据已经全部收到了,这是确认序号的含义所确定的)
3.允许部分确认丢失,或者不给应答。
确认部分丢失:例如发送方发送了1000,2000,3000,然后接收方接收到了并应答给发送方,发送方最后只收到了3001,但此时也没有问题 ,因为这代表3001之前的数据已经全部收到了
不给应答:当发送方发送了1000,2000,3000给接收方,但接受方只收到了1000,3000,此时只能给发送方1001应答,不能给3001应答,因为没有收到2000,通知发送方2000 3000需要重传

为什么要有两个字段(序号和确认序号)?

TCP是全双工的,任何一方,即可以收,也可以发!如果不加以区分,会使发送的数据和接收的数据混在一起。比如发送方可能把接收方发送的数据当做一个应答,或把对方的应答当做一个发送的数据。

5.如何保证顺序,报文中会携带序号,收到后会进行排序重组保证数据的顺序。确保数据按正确的顺序交付给应用层。

16位窗口大小-缓冲区

16位窗口大小表示接收方在接收数据时的可用缓冲区大小。该字段指示了发送方在不需要等待确认应答的情况下,可以连续发送给接收方的数据的最大量。

缓冲区
TCP也是全双工的,即发送数据的同时也可以接收数据,

TCP发送端和接收端都有发送缓冲区和接收缓冲区,而UDP是没有发送缓冲区的。

流量控制

为什么控制:接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送,就会造成丢包, 继而引起丢包重传等等一系列连锁反应.造成效率的下降。

接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “16位窗口大小” 字段, 通过ACK端通知发送端;
窗口大小字段越大, 说明网络的吞吐量越高;
接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端,发送端接受到这个窗口之后, 就会减慢自己的发送速度;
如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端.

16位紧急指针

16位紧急指针和URG标志位联系在一起。

当URG标志位被设置时,代表紧急指针有效,表示该报文数据段中有部分数据被标记位紧急数据,需要尽快优先处理。

紧急指针: 紧急指针是TCP报文头中的一个字段,占用16位,用于指示紧急数据在数据段中的偏移量位置。它表示从报文的起始位置开始,紧急数据的偏移量.

三次握手

在这里插入图片描述

为什么一定要三次握手?
1.为了验证双方的全双工,确保双方能够正常的发送和接收数据.

在第一次握手中,客户端向服务器发送SYN,如果服务器能够接收到该SYN并回复SYN+ACK,便可以确定客户端的发送和接收能力正常; 当客户端给服务端ACK请求并被服务端收到后(服务端收到了ACK确认),说明服务器的发送和接收能力正常。

2.为了服务器的安全

1)如果只有一次握手,那么可能会服务器可能会遭受攻击。比如一台主机同时大量的向服务端发送SYN请求,而我们一开始也说了,这些连接 是需要被维护的,而维护需要占用资源的。所以这样会大量的占用服务器资源,造成瘫痪,所以不可取。这便是SYN洪水攻击。

2)如果只有两次握手,第一次握手服务器连接建立好后,第二次向客户端发送请求,而客户端则可以直接把连接丢弃,这样就造成了服务器还在维护着连接,而客户端没有连接,依然可以大量的发送SYN连接请求,也不太可行.

3)只有三次握手时,当客户端也确认连接后,才正常进行连接。这样客户端便承担与服务端等价的资源消耗。每当客户端发送一个连接请求,必须客户端自己也与服务端成功连接后,服务端再进行维护。这样虽然服务端也维护这些连接,但自己主机上也在维护相同数量的连接。所以这样便可以有效的防止攻击。

拓展:三次握手后 服务端最后一个ack没收到

因为当握手完成后,客户端便会认为自己已经建立完毕,开始发送数据了。与此同时,客户端向服务端发送ACK报文,但如果此时由于一些原因,服务端没有收到这个ACK,服务端便不能建立连接。服务端没有建立连接,而客户端认为自己连接已经建立完毕了,开始发送数据,这肯定会造成问题了。

所以此时服务端会向客户端发送带有RST(重新连接)的标志位的报头,表示重新与客户端建立连接,此时客户端与服务端便重新开始三次握手。

四次挥手

流程:
在这里插入图片描述

1、客户端发送连接断开报文: 客户端首先向服务器发送一个连接连接报文,标志位中设置 FIN(Finish)标志,表示客户端不再发送数据。然后进入 FIN_WAIT_1 状态,等待服务器的确认。

2、服务器发送确认报文: 服务器收到客户端的连接断开报文后,会发送一个确认报文作为响应。服务器的确认报文中的标志位包括 ACK。ACK表示确认收到了客户端的连接断开报文,服务器进入 CLOSE_WAIT 状态。

3、服务器发送连接断开报文: 服务器确认终止与客户端的连接后,会发送一个连接断开报文,标志位中包含 FIN 标志。这表示服务器不再发送数据。服务器进入 LAST_ACK 状态,等待客户端的确认。

4、客户端发送确认报文: 客户端收到服务器的连接断开报文后,会发送一个确认报文作为确认。ACK 标志表示客户端确认收到了服务器的连接释放报文。这样,客户端和服务器都知道对方已确认关闭连接。

但客户端会有一段时间的TIME_WAIT状态之后在close

为啥 TIME_WAIT

确保对端收到最后的确认: 在TCP的四次挥手过程中,最后一次ACK确认报文可能会在网络上延迟或丢失。如果发送方立即关闭连接,这个确认可能不会到达对端,导致对端误认为连接没有正常关闭。通过进入TIME_WAIT状态,发送方可以等待一段时间,以确保对端收到最后的确认。

处理网络中滞留的报文: 在网络中,报文可能会因为网络延迟、路由器缓存或重传等原因而滞留一段时间。如果关闭连接后立即重新创建相同的IP地址和端口号的连接,就有可能接收到之前滞留的报文,这些报文可能会被错误地解释为属于新连接的数据。通过进入TIME_WAIT状态,可以排除滞留报文对新连接的干扰。

确保连接的唯一性: TIME_WAIT状态还可以确保在此状态下的连接的唯一性。在TIME_WAIT状态期间,对应的TCP连接四元组(源IP、源端口、目的IP、目的端口)会被保留一段时间。这样可以防止新建立的连接与该连接的四元组相同,避免可能的混淆和冲突。

虽然TIME_WAIT状态会占用一些资源,并延迟释放连接所使用的端口,但它是TCP协议中的重要机制,有助于维护连接的可靠性、完整性和唯一性。

滑动窗口

为什么:
对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段.这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候.
对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段.这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候.
那么如何控制发送的数据呢? 这里就用到了滑动窗口

滑动窗口是TCP协议中的一种机制,用于控制发送方和接收方之间的数据传输。它是一个动态的数据缓冲区,用于管理已经发送但未确认的数据序列号.
窗口大小指的是 拥塞窗口 和 对方窗口大小(接收能力)的最小值

收到ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;
操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答; 只有确认应答(ACK)过的数据, 才能从缓冲区删掉,即滑动窗口在自己的发送缓冲区中,属于自己的发送缓冲区一部分。
窗口越大, 则网络的吞吐率就越高,因为可发送的数据越多。
在这里插入图片描述

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

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

相关文章

代码随想录冲冲冲 Day40 动态规划Part8

121. 买卖股票的最佳时机 dp[i][0] 代表第i天持有股票手上的金额 dp[i][1] 代表第i天不持有股票手上的金额 初始化: dp[0][0] 持有所以是-prices[0] dp[0][1] 不持有所以是0; 递推公式: dp[i][0] 既然是i天时持有,那么就是之前就持有&…

开放式耳机具备什么特点?2024排行前十的四款百元蓝牙耳机推荐

开放式耳机具有以下特点: 佩戴舒适: 开放式耳机通常不需要插入耳道,能减少对耳道的压迫和摩擦,长时间佩戴也不易产生闷热、疼痛或瘙痒等不适,对于耳道敏感或不喜欢入耳式耳机压迫感的人来说是很好的选择。 这类耳机…

无线通信里的一些参数(dB dBm RSRP RSRQ RSSI SIN) / 天线增益

目录 历史由来dB和dBmRSRP RSRQ RSSI SNRRSSI在实际测试环境中的应用天线增益 详细阅读: 一文搞懂dB、dBm、dBw、dBi的来龙去脉 无线通信中 RSRP RSRQ RSSI SINR的定义和区别 RSRP RSRQ RSSI SNR的含义和区别 历史由来 dB展开应写为decibel,其中“deci…

【震撼】8岁女孩用Cursor编程,你还在等什么

1. Cursor: 革新性的AI代码编辑器 1.1 Cursor的崛起 近期,AI驱动的代码编辑器Cursor在开发者社区中引起了广泛关注。其火爆程度不仅源于AI大咖Andrej Karpathy在社交平台X上的推荐,更因一则令人惊叹的新闻:一位年仅8岁的小女孩利用Cursor和其…

金士顿NV2 2TB假固态硬盘抢救记,RL6577/RTS5765DL量产工具,RTS5765DL+B47R扩容开卡修复

之前因为很长时间不买固态硬盘,没注意到NVME的固态盘也有了假货和扩容盘,花200多块买了个2TB的金士顿NV2固态硬盘,我原本以为NV1的假货最多是用黑片冒充正片,结果没想到NV2居然有扩容的。后来发现是扩容盘的时候,已经过…

C++ 音频

一、采样频率 当前主流的采样频率为22.05KHz、44.1KHz、48KHz 22.05KHz:为FM广播声音品质 44.1KHz:为理论上最高的CD声音品质(直播,录像,acc) 48KHz:人耳可分辨的最高采样频率 (…

使用PXE实现自动化安装rockylinux8.10

PXE 一、简介 实现多台服务器自动化安装系统。 二、部署 这里宿主机是 centos7,PXE 部署的是 rockylinux8.10。宿主机需提前关闭 selinux 和防火墙。 2.1 部署 dhcp 安装 dhcp [roottest-server ~]# yum install -y dhcp修改配置文件 # 复制默认的配置文件 …

极光出席深圳国际人工智能展并荣获“最具投资价值人工智能奖”

9月8-10日,由深圳市工业和信息化局、深圳市发展和改革委员会、深圳市科技创新局、深圳市政务服务和数据管理局、深圳市中小企业服务局共同指导,深圳市人工智能行业协会主办的第五届深圳国际人工智能展正式开幕。作为中国领先的客户互动和营销科技服务商&…

基于人工智能的智能农业监控系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 智能农业是利用现代信息技术和人工智能进行农业生产的优化管理,通过实时监控和预测系统,可以改善作物的生产效…

工控安全需求分析与安全保护工程

工控系统安全威胁与需求分析 工控系统(ICS),是由各种控制组件、监测组件、数据处理与展示组件共同构成的对工业生产过程进行控制和监控的业务流程管控系统 分类:离散制造类和过程控制类 工控系统安全保护机制与技术 工控系统安全…

无人机加速度计的详解!!!

一、加速度计的基本定义 加速度计是一种用于测量物体加速度的传感器。它能够感知物体在各个方向上的加速度变化,并将这些变化转换为电信号进行输出。 二、加速度计的工作原理 加速度计的工作原理基于牛顿第二定律,即力等于质量乘以加速度(…

Pygame中Sprite类实现多帧动画3-2

3.2.3 设置帧的宽度、高度、范围及列数 通过如图6所示的代码设置帧的宽度、高度、范围及列数。 图6 设置帧的宽度、高度、范围及列数的代码 其中,frame_width、frame_height、rect和columns都是MySprite类的属性,在其__init__()方法中定义,…

计算机毕业设计选题推荐-产品委托配送系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

【项目综合】基于 Boost 库的站内搜索引擎(保姆式讲解,小白包看包会!)

目录 一、项目背景 1)搜索引擎是什么 2)Boost 库是什么 3)搜索的结果是什么 二、项目原理 1)宏观原理和整体流程 2)正序索引与倒序索引 3)所用技术栈和项目环境 4)项目源码地址&#x…

[【人工智能学习笔记】4_3 深度学习基础之卷积神经网络

卷积神经网络概述 卷积神经网络(Convolutional Neural Network, CNN)一种带有卷积结构的深度神经网络,通过特征提取和分类识别完成对输入数据的判别;在1989年提出,早期被成功用于手写字符图像识别;2012年更深层次的AlexNet网络取得成功,伺候卷积神经网络被广泛应用于各…

5G毫米波阵列天线仿真——CDF计算(方法一)

累计分布函数(CDF)在统计学上是一个由0增长到1的曲线。5G中CDF被3GPP标准推荐使用,5G 天线阵的有效全向辐射功率EIRP的CDF函数被用来评价设备的质量和性能。由于EIRP是在某一个方向角theta, phi上的辐射功率,幅值由天线增益与激励…

微波无源器件1 一种用于紧凑双极化波束形成网络的新型双模定向耦合器

摘要: 在本文中提出了一种用于实现紧凑双极化波束形成网络的新型定向耦合器。此器件的功能为两个用于矩形波导TE01和TE10模式的独立定向耦合器。这两个模式之间并不耦合。可以获得两个模式的不同耦合值。这个耦合器可以两次用于两个正交计划。因此可以获得此完整网络…

Centos7 安装RocketMQ(二进制版)

一、介绍 RocketMQ:云原生“消息、事件、流”实时数据处理平台,覆盖云边端一体化数据处理场景 在阿里孕育 RocketMQ的雏形时期,我们将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着我们的贸易业务吞吐量的上…

python使用超级鹰识别验证码

1.超级鹰注册 超级鹰: https://www.chaojiying.com/ 注册后购买题分 2.获取要识别的图片 我们以这个附件下载的网页为例: https://gh.lnut.edu.cn/system/_content/download.jsp?urltypenews.DownloadAttachUrl&owner1224556702&wbfileid1504223 点开f12然后刷新几…

不小心格式化了移动硬盘怎么恢复?数据恢复的实用方法

在数字化时代,移动硬盘是我们存储和传输数据的重要工具。然而,由于操作失误或其他原因,我们有时会不小心格式化移动硬盘,导致重要数据的丢失。当面临这种情况时,我们应该如何恢复被格式化的数据呢?本文将为…