计算机网络-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给发送端。

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

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

相关文章

【深度学习】最强算法之:Transformer

Transformer 1、引言2、Transformer2.1 引言2.2 核心概念2.3 应用2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥,昨天的感受咋样 小鱼:啥感受啊? 小屌丝:你确定不知道? 小鱼:我… 小屌…

查看每月网站的带宽以及网站访问记录

接到一位用户反馈想要了解知道在带cPanel面板的虚拟主机中如何查看每个网站使用的带宽数值以及网站访问记录,这边私信进行沟通了解到他当前使用的是Hostease 的LInux虚拟主机,由于是属于新手,对于cPanel面板也不是很了解,因而在论…

Python爬虫之Scrapy框架基础

Scrapy爬虫框架介绍 文档 英文文档中文文档 什么是scrapy 基于twisted搭建的异步爬虫框架. scrapy爬虫框架根据组件化设计理念和丰富的中间件, 使其成为了一个兼具高性能和高扩展的框架 scrapy提供的主要功能 具有优先级功能的调度器去重功能失败后的重试机制并发限制ip使用次…

基于spring boot的大学生体质测试管理系统

基于spring boot的大学生体质测试管理系统设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 …

【SQL Sever】3. 用户管理 / 权限管理

1. 创建登录名/用户/角色 在SQL Server中,创建用户通常涉及几个步骤。 首先,你需要创建一个登录名,然后你可以基于这个登录名在数据库中创建一个用户。 以下是如何做到这一点的步骤和相应的SQL语句: 创建登录名 首先&#xff0c…

面试算法-171-翻转二叉树

题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 解 class Solution {public TreeNode invertTree(TreeNode root) {if (root n…

STM32电机控制SDK实战

一、前言 本次测试基于ST开发板NUCLEO-F302R8,驱动板X-NUCLEO-IHM07M1,使用无刷直流电机BLDC实现FOC控制;采样三霍尔传感器检测电机转子位置;基于速度环闭环控制实现电机转动; 二、实战环境 软件环境: 1…

IP地址查询的应用

IP地址是互联网中用于唯一标识设备的数字地址,通过查询IP地址,我们可以获取到与之相关的各种信息。IP地址查询在网络安全、网络管理、市场营销等领域都有着广泛的应用。本文将探讨IP地址查询的各种应用场景及其重要性。 IP地址准查询:IP数据…

【架构六】系统架构风格

一、数据流风格 批处理:每一步都是独立的,并且每一步都是顺序执行的,只有当前一步处理完毕后,后一步处理才开始。数据必须是完整的,作为一个整体进行传递。如日志分析、计费程序等。管道/过滤器:每个构件都…

50-服务编排(下):基于Helm的服务编排部署实战

制作IAM Chart包 我们假设IAM项目源码根目录为${IAM_ROOT},进入 ${IAM_ROOT}/deployments目录,在该目录下创建Chart包。具体创建流程分为四个步骤, 第一步,创建一个模板Chart。 Chart是一个组织在文件目录中的集合,…

【汇编语言实战】已知10个整数求最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a[]{11,33,23,54,12,51,2,4,34,45};int maxa[0];for(int i1;i<9;i){if(a[i]>max){maxa[i];}}printf("%d",max); }汇编语言&#xff1a; include irvine32.inc .data arr dword 11…

深入了解Redis——持久化

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

c++ 字符串与STL用法

文章目录 StringVector构造增加删除大小清空排序 map定义添加数据遍历数据查找清空删除长度判断空交换排序常用用法 String Vector vector是动态扩充的数组 构造 ​ vector()​:创建一个空vectorvector(int nSize)​:创建一个vector,元素个数为nSize​vector(int nSize,co…

【MATLAB】基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据(附代码)

基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据 WiFi指纹匹配是室内定位最为基础和常见的研究&#xff0c;但是WiFi指纹的采集可以称得上是labor-intensive和time-consuming。现在&#xff0c;给大家分享一下我们课题组之前在做WiFi指纹定位时的基于射线跟踪技术仿真WiFi…

Josephus排列:组合数学与跨学科应用

Josephus排列&#xff1a;组合数学与跨学科应用 一、背景二、定义和历史三、问题的形式化描述四、解决方案4.1 n2&#xff0c;任意m4.2 m1&#xff0c;任意n4.3 n为奇数&#xff0c;m为偶数4.4 n和m都是奇数 五、红黑树简介六、Josephus排列问题描述七、使用红黑树解决Josephus…

设计模式之备忘录模式(上)

备忘录模式 1&#xff09;概述 1.定义 在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;可以在以后将对象恢复到原先保存的状态。 2.作用 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便…

展厅设计方案需要考虑哪些因素环节

1、整体展厅规划 整体规划是展厅搭建中需要优先考虑的环节&#xff0c;必须为搭建成本和效果提供坚实的基础。需确定整体展厅面积、展厅的使用目的、产品布局以及进入展厅的路线、确定展厅的整体框架之后&#xff0c;还需考虑展品种类、产生的呈现效果&#xff0c;这些都将影响…

el-table动态合并列

需要合并列&#xff0c;并且不确定需要合并多少列的&#xff0c;可以参照如下代码 首先需要再el-table上传入span-method方法 arraySpan({ row, column, rowIndex, columnIndex }){if (row.groupName 汇总 && columnIndex 0) {return [0,0]} else if (row.groupName…

迷宫 — — 蓝桥杯(动态规划)

迷宫 题目&#xff1a; 输入样例&#xff1a; 3 1 1 1 2 3 4 5 6 7 8 9 2 2 1 3 1 R输出样例&#xff1a; 21思路&#xff1a; 题目大意&#xff1a;给定一个n x m的平面网格&#xff0c;并且每一个格子都有一定的代价&#xff0c;并且设有障碍物和陷阱&#xff0c;障碍物的意…

win11 连接海康摄像头 ONVif协议

目录 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 海康摄像头设置支持onvif协议 安装onvif协议 onvif协议示例代码 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 第一步、桌面右键新建一个 txt 的文档 第二步、打开文档并且复制粘贴下面代码 CreateObject(&…