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

news2024/11/25 3:03:14

错误现象

丢包
  • 网络问题:网络不稳定可能导致丢包,例如信号弱或干扰强。带宽限制可能导致路由器或交换机丢弃包,尤其是在高流量时段。网络拥塞时,多个数据流竞争有限的资源,也可能导致丢包。
  • 缓冲区溢出: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.coloradmin.cn/o/1588197.html

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

相关文章

2024年【T电梯修理】证考试及T电梯修理模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理证考试考前必练!安全生产模拟考试一点通每个月更新T电梯修理模拟考试题题目及答案!多做几遍,其实通过T电梯修理作业模拟考试很简单。 1、【多选题】《特种设备安全法》规定…

YOLOv5算法进阶改进(20)— 更换主干网络之RepViT | 从ViT视角重新审视移动CNN

前言:Hello大家好,我是小哥谈。RepViT是一种基于Transformer的视觉模型,它的全称是Representation Learning with Visual Tokens。与传统的卷积神经网络不同,RepViT使用了Transformer的自注意力机制来提取图像中的特征。具体来说,RepViT将图像分成若干个视觉标记(visual …

股权融资成本GLS模型计算

一、模型公式 式中: r 为股权融资成本 P为股价 B为每股净资产 FROE为预测每股净资产收益率 目标:求解股权融资成本r 二、模型口径参考来源 PS:实际以代码为准 ①FROE(预测每股净资产收益率): 资本市场开放与…

2024 MathorCup C 题 物流网络分拣中心货量预测及人员排班

一、问题重述 电商物流网络在订单履约中由多个环节组成,图1是一个简化的物流网络示意图。其中,分拣中心作为网络的中间环节,需要将包裹按照不同流向进行分拣并发往下一个场地,最终使包裹到达消费者手中。分拣中心管理效率的提升&…

一文搞懂OSI七层!

1.OSI OSI (Open System Interconnect),即开放式系统互联是一个完整的、完善的宏观模型。 TCP/IP协议提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。更加侧重的是互联网通信核…

动态代理 --java学习笔记

什么是动态代理? 当一个类的很多方法都存在重复冗杂的部分,就可以使用代理来处理那些重复部分的任务,到了各自的实现部分再丢回给原方法处理,同时也可以提高方法的扩展性,而动态则是指在运行时动态地创建代理对象&…

算法题解记录8+++爬楼梯(百日筑基)

题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶…

2024年【安全员-A证】最新解析及安全员-A证模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年【安全员-A证】最新解析及安全员-A证模拟考试题,包含安全员-A证最新解析答案和解析及安全员-A证模拟考试题练习。安全生产模拟考试一点通结合国家安全员-A证考试最新大纲及安全员-A证考试真题汇总&a…

AI投研分析,模块化赛道可能会出现新的头部公链

随着比特币ETF的通过,再加上比特币第四次减半临近,备受期待的新一轮牛市周期已经开启了,然而对于那些刚穿越过熊市的新韭菜而言,因为总觉得没这么快涨起来,而对二级市场交易变得非常谨慎,导致了很多新韭菜在…

Unity之Unity面试题(六)

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之Unity面试题(六) TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取…

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

情形:Spring配置类注解方式整合MyBatis 异常: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解决: 检查mapper的全类名和mapper.xml的namespace是否一致检查mapper下的方法名和mapper.xml的sql的id是否…

电脑离线调用微信 ocr.exe 使用 python 调用 WeChatOCR.exe 附python代码

微信的OCR识别能力还是可以的,并且可以得到位置,速度也快,我想要把微信的这个exe 单独提取出来,可以供其他项目使用,目前已有的应该都是需要依赖微信运行状态的,我这个独一份 相当于把微信运行它的OCR的环境完全剥离出来,只需要几个代码文件加上几个模型文件就可以离线…

react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

先看样子 组件代码: import React, { useState, useEffect } from react import { Row, Col, Modal, Spin, Input, Button, message, Form } from antd import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from ant-design/icons import * as Serve from …

如何申请做快团团购帮卖团长?免费试用教程一学就会!

新手小白想要自己做快团团,有两种方法。 1、自己提供货源,自己开团做团长。 这种方法流程非常简单,从微信小程序中找到快团团,点击右上角“一键开团”,然后“创建普通团购”,按照操作设置就可以开团了。 …

Java高频面试之JVM篇

说一下 Jvm 的主要组成部分?及其作用? 类加载器执行器运行时数据区域本地接口 谈谈对运行时数据区的理解? 堆和栈的区别是什么? 堆中存什么?栈中存什么? 堆总存对象,栈中存局部变量,引用 为什么要把堆…

静音检测电路芯片D3703F——工 作 电 压 范 围 宽 : 3.2V ~ 16.0V,可以用于汽 车 音 响 系 统

概 述 : D3703F 是 一 块 汽 车 音 响 静 音 检 测 电 路 。 用 于 音 响 系 统 检 测 在 放 音 或 快 进 / 退 时 进 行 静 音 检 测 。 D3703F 的 的 电 压 范 围 : 3.2V ~ 16V , 信 号 检 测 和 静 音 时 间 可 通 过 外 围…

参花期刊投稿发表论文

《参花》是由国家新闻出版总署批准,吉林省文化和旅游厅主管,吉林省文化馆主办的正规文学类期刊。文学是用语言塑造形象反映社会生活的一种语言艺术,是自觉、独立而又面向整个社会的艺术,是文化中极具强烈感染力的重要组成部分&…

Java List基础篇

目录 前言一、常用List1.1 List1.1.1 特点1.1.2 常用API 1.2 ArrayList1.2.1 特点1.2.2 使用 1.3 LinkedList1.3.1 特点1.3.2 使用 1.4 CopyOnWriteArrayList1.4.1 特点1.4.2 使用 1.5 Arrays.asList()1.5.1 特点1.5.2 使用 二、对比总结 前言 一、常用List 1.1 List List是…

C++STL--谓词

谓词 ① 可调用的表达式称为谓词,包括仿函数,自定义函数,lambda表达式。 ② 接受一个参数的谓词,称为一元谓词。 ③ 接受两个参数的谓词,称为二元谓词。 可调用的表达式:对于一个对象或者表达式,如果可以使用调用运算符(),就称它为可以调用的。 一元谓…

2024年【T电梯修理】考试总结及T电梯修理考试技巧

题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理考试总结考前必练!安全生产模拟考试一点通每个月更新T电梯修理考试技巧题目及答案!多做几遍,其实通过T电梯修理试题及解析很简单。 1、【多选题】修理工陶、陈&#xff0c…