TCP初始化序列号为什么要不一样

news/2025/2/24 10:03:40

区分不同的连接(包括一些历史连接)、确保数据的顺序性、防止重放攻击(时间戳)

初始化序列号 ISN = M + F(localhost, localport, remotehost, remoteport)。

  • M是一个32位的计时器,这个计时器每隔 4 微秒加1,循环一次4.55小时
  • F 是一个 Hash 算法,根据源IP、目的IP、源端口、目的端口生成一个随机数值,要保证 hash 算法不能被外部轻易推算得出。

这样的算法会让初始化序列号以增长的方式生成,即使这样,当序列号快速回绕,仍然有可能出现问题

为了解决这个问题,就需要TCP时间戳,tcp_timestamps默认开启,开启后,TCP头部就会使用时间戳,便于精确计算RTT并防止序列号回绕

防回绕序列号算法要求连接双方维护最近一次收到的数据包的时间戳(Recent TSval),每收到一个新数据包都会读取数据包中的时间戳值跟 Recent TSval 值做比较,如果发现收到的数据包中时间戳不是递增的,则表示该数据包是过期的,就会直接丢弃这个数据包


http://www.niftyadmin.cn/n/5864197.html

相关文章

深入解析思科 IOS 路由交换设备缓冲区机制

目录 一、数据包缓冲管理 二、数据包缓冲池 Packet buffer pool 1. 静态缓冲池 vs 动态缓冲池 2. 公共池 vs 私有池 三、系统缓冲 System Buffers 1. Buffer elements 2. Public buffer pools 四、缓冲区输出 & 丢包计数详解 1. Show buffers 2. Show interfa…

uni-app集成sqlite

Sqlite SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中&am…

goredis常见基础命令

基本操作 //删除键 exists,err: rdb.Exists(ctx,"key").Result() if err!nil{panic(err) } if exists>0{err rdb.Del(ctx,"key").Err()if err!nil{panic(err)} }string类型 //设置一个键值对 //0表示没有过期时间 err:rdb.Set(ctx,"key1",…

Layer2 扩容解决方案详解

Layer2 扩容解决方案详解 🔄 1. Layer2 基础概念 1.1 什么是 Layer2? Layer2 是建立在以太坊主网(Layer1)之上的扩容解决方案,它: 继承以太坊的安全性提供更高的交易吞吐量降低交易费用保持去中心化特性…

hot100_300. 最长递增子序列

hot100_300. 最长递增子序列 思路动态规划 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 […

细说STM32F407单片机2个ADC使用DMA同步采集各自的1个输入通道的方法

目录 一、示例说明 二、工程配置 1、RCC、DEBUG、CodeGenerator 2、USART6 3、TIM3 (1)Mode (2)参数设置 (3) TRGO (4)ADC1_IN0 1)ADCs_Common_Settings 2&a…

nextjs项目搭建——头部导航

Header.tsx 在src/app/component路径下,创建Header.tsx use client;import Link from next/link; import { usePathname } from next/navigation; import Logo from ./Logo;const Header () > {const pathname usePathname();const navItems [{ label: 首页…

本地部署Qwen2.5-VL-7B-Instruct多模态视觉大模型(Windows篇)

本文已首发于 秋码记录 如果你也想搭建一个与秋码记录一样的网站,可以浏览我的这篇 国内 gitee.com Pages 下线了,致使众多站长纷纷改用 github、gitlab Pages 托管平台 秋码记录网站使用的主题是开源的,目前只在github.com开源。 hugo-the…