计算机网络-TCP连接建立阶段错误应对机制

错误现象

丢包
  • 网络问题:网络不稳定可能导致丢包,例如信号弱或干扰强。带宽限制可能导致路由器或交换机丢弃包,尤其是在高流量时段。网络拥塞时,多个数据流竞争有限的资源,也可能导致丢包。
  • 缓冲区溢出:TCP使用缓冲区暂存数据包。如果缓冲区满了,新的数据包就会被丢弃。这通常发生在高速发送端和低速接收端之间的通信中。
  • 程序处理错误:软件错误,如编程错误或资源管理不善,也可能导致数据包丢失。
损坏
  • 传输链路上的噪声:电磁干扰等噪声可能导致比特级的错误,从而损坏数据包。
  • 设备故障:路由器、交换机或其他网络设备的硬件故障也可能导致数据包损坏。
延迟
  • 网络拥塞:当网络中的数据包数量超过网络能够处理的能力时,会导致延迟。
  • 路由选择:数据包可能因为路由算法选择了较长的路径而导致延迟。
    • 乱序:由于网络中的不同延迟路径,数据包可能会以不同的顺序到达目的地。
    • 历史报文:旧的TCP连接的数据包可能在新的连接中被错误地接收。

连接建立阶段

  • 三次握手:三次握手的目的是确保双方都具有接收和发送的能力,防止乱序报文影响,以及确保双方的初始序列号能被可靠地同步。如果只有两次握手,可能会因为网络时延和超时重发导致资源浪费。但是如果有第三次握手,服务端可以等待第三次握手的结果再判断进入什么状态。

  • 初始化序列号随机:初始化的序列号需要随机,以避免历史报文的影响和防止黑客冒充TCP报文。如果碰到序列号不在接收方的接收窗口的直接丢弃。

  • 序列号回环:TCP的SEQ号是有限的,一共32位,SEQ开始是递增,溢出之后从0开始再次依次递增。因为存在序列号回环,就仍然存在历史报文被错误接收的现象。此时需要开启TCP的时间戳功能,从而启用PAWS机制,如果收到的包时间戳不是递增的就丢弃。

  • 报文丢失:如果是握手阶段的报文丢失,那么由发送方进行超时重传,每次发送触发的RTO翻倍,直到达到最大重传次数断开。如果是第二、三次握手,双方都会认为自己没有发送成功,双方都会进行超时重传,一直没回应就断开。

  • 连接过多:在高压环境下,TCP通过半连接队列(SYN队列)和全连接队列(accept队列)来应对。如果accept队列满,可以设置服务端发来的ACK还是回复RST断开连接,或者调大accept队列大小。如果SYN队列满,可以启用syncookies功能,或者调大SYN队列大小。

  • SYN攻击:SYN攻击是攻击者伪造IP地址发送SYN请求,服务端收到大量请求但是发送的SYN+ACK没有回应,导致半连接队列占满,后续的SYN报文就会丢弃。防范措施包括调大接收数据包的队列的大小,减少SYN+ACK重传次数,增大SYN队列大小,以及启用syncookies功能。

数据传输阶段

  • TCP分段:TCP分段的目的是尽量避免IP层的分片。因为IP层没有重发机制,如果在TCP层不分段而有IP层分片,如果丢了其中的一个IP分片,在接收端由于没有收到完整的TCP报文(被IP层割断),不会发送ACK报文,发送端就会触发超时重传,重发整个TCP报文。因此在连接的开始阶段,双方就要协商MSS大小,设定为传输路径上的最小值PMTU(Path MTU)。

  • 粘包:粘包是因为TCP是面向字节流的协议,因此会存在两个消息分到同一个TCP报文中,无法区分边界。解决粘包的方法包括固定用户消息的长度,使用特殊字符作为边界,如回车、换行,以及自定义消息结构,结构体存储数据和本段数据长度。

  • 乱序/丢包/重复:TCP会先将乱序的包放入缓冲区的乱序队列中,如果后续收到了这个报文的前一个报文,TCP就从缓冲区中取出这个乱序报文,然后按照正确的顺序处理这些报文。如果长时间没有收到,就会认为是丢包了,接收方发送ACK/SACK,发送方会进行重传。当接收端收到重复的数据包时,会发送DSACK给发送端。

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

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

相关文章

网络安全之代码签名证书申请

代码签名,作为一种数字安全机制,对于软件开发、分发及用户使用环节具有至关重要的意义。以下从六大方面阐述代码签名必不可少的重要性: 确保代码来源可信: 代码签名如同软件的“身份证”,通过数字证书对开发者身份进…

微信被拉黑删除的提示差异和检测方法

拉黑 被拉黑的提示是“消息已发出,但被对方拒收了”。 拉黑方能发消息且被拉黑方能接到,被拉黑的人无法发送成功,并灰色字提示。 删除 仅删除的时候,才能发送消息时不是提示拒收,可“发送朋友验证”添加&#xff0…

推荐两个可以直接使用的ChatGPT 开源应用

freegpt35, FreeAskInternet 无需注册账号即可使用。 FreeAskInternet https://github.com/nashsu/FreeAskInternet git clone https://github.com/nashsu/FreeAskInternet.git cd ./FreeAskInternet docker-compose up -dfreegpt35 https://github.com/missuo/FreeGPT35 …

Android开发环境部署Windows环境变量

JAVA_HOME C:\Program Files\Java\jdk-17 Path 里增加%JAVA_HOME%\bin; %JAVA_HOME%\jre\bin CLATHPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

头歌-机器学习 第11次实验 softmax回归

第1关:softmax回归原理 任务描述 本关任务:使用Python实现softmax函数。 相关知识 为了完成本关任务,你需要掌握:1.softmax回归原理,2.softmax函数。 softmax回归原理 与逻辑回归一样,softmax回归同样…

Python的re模块

re模块中的常用方法 Python中的正则表达式处理模块是re,re模块比较简单,包括以下几个方法: 查找 re.search():查找符合模式的字符,只返回第一个匹配到的,返回Match对象,匹配不到返回None re.match():和search一样,但要求必须从字符串开头匹配 re.findall():返回所有…

【星戈瑞】DBCO-NH2在生物成像技术中的应用

DBCO-NH2作为一种生物标记分子,在生物成像技术中发挥诸多应用作用。其点击化学反应特性使得它能够在生物体内进行特异的标记,从而为生物医学研究提供工具。 在生物成像技术中,DBCO-NH2常被用于标记生物分子,如蛋白质、核酸等。通…

Android 9.0 framework层实现app默认全屏显示

1.前言 在9.0的系统rom产品定制化开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app 的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 fram…

Recommended Books:《Pride and Prejudice》

Recommended Books:《Pride and Prejudice》 Author Introduction: Jane Austen, born on December 16, 1775, in Steventon, England, is one of the most renowned English novelists of all time. Her works, including “Pride and Prejudice,” are known for…

【科研】搜索文献的网站

文章目录 paperswithcode【最新论文,代码】huggingface【大语言模型,最新论文】dblp【关键词搜索】arxiv【最新文章】semanticscholar【相关引用查询】connectedpapers【相关引用查询】github【工程,代码,论文开源代码】 paperswi…

mmdetection模型使用mmdeploy部署在windows上的c++部署流程【详细全面版】

0. 前置说明: 该文档适用于:已经使用mmdetection训练好了模型,并且完成了模型转换。要进行模型部署了。 1. 概述 MMDeploy 定义的模型部署流程,如下图所示: 模型转换【待撰写,敬请期待…】 主要功能是:把输入的模型格式,转换为目标设备的推理引擎所要求的模型格式…

andorid 矢量图fillColor设置无效

问题:andorid 矢量图fillColor设置无效 解决:去掉如下 android:tint一行

零基础考24上软考高级要备考多久呢?

对于零基础考软考高级的考生来说,备考时间是一个关键问题。 软考高级是国家信息技术行业的专业资格认证,对考生的能力要求较高,因此需要一定的备考时间来充分准备。那么,针对零基础考软考高级的考生,需要备考多久呢&a…

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(下)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分,上部将首先简要介绍方法工作…

antdesign 1.7.8 vue2 table实现列合并

无分页,需要根据mac列进行列合并,最终效果如下所示: 核心实现如下: // 核心代码 const getRowspan (dataScroce, filed) > {let spanArr [];let position 0;dataScroce.forEach((item, index) > {if (index 0) {spanAr…

金三银四面试题(十九):MySQL中的锁

在MySQL中,锁是非常重要的,特别是在多用户并发访问数据库的环境中,因此也是面试中常问的话题。 请说说数据库的锁? 关于MySQL 的锁机制,可能会问很多问题,不过这也得看面试官在这方面的知识储备。 MySQL …

深入了解Redis——持久化

一,Redis持久化 Redis持久化即将内存中的数据持久化到磁盘中,在下一次重启后还能进行使用,Redis持久化分为RDB和AOF两种,我们接下来分别介绍RDB和AOF的内部原理和区别 RDB Redis运行时会将当前的内存快照存入至磁盘中&#xff…

./build/examples/openpose/openpose.bin在windows中调用

直接看这个更简单的方法:https://blog.csdn.net/weixin_45615730/article/details/137591825?spm1001.2014.3001.5501 问题描述: 在跑pifuhd,需要两个输入,一个图片,一个关键点json文件。这是人家给的例子&#xff0…

【Linux】tcpdump P1 - 网络过滤选项

文章目录 选项 -D选项 -c X选项 -n选项 -s端口捕获 port选项 -w总结 tcpdump 实用程序用于捕获和分析网络流量。系统管理员可以使用它来查看实时流量或将输出保存到文件中稍后分析。本文将演示在日常使用 tcpdump时可能想要使用的几种常见选项。 选项 -D 使用-D 选项的 tcpdu…

中文域名有必要注册吗?

随着互联网的普及和全球化,中文域名作为一种新兴的网络标识,逐渐进入了公众的视野。中文域名,顾名思义,是以中文字符为主要组成部分的域名,它允许用户直接使用中文来访问网站,而不需要记忆或输入一串英文字…