(学习笔记-TCP连接建立)为什么每次建立TCP连接时,初始化的序列号都要求不一样?

news/2024/12/26 19:05:53/

主要原因有两个方面:

  • 为了防止历史报文被下一个相同的四元组的连接接收(主要)
  • 为了安全性,防止黑客伪造相同序列号的TCP报文被对方接收

展开第一点:

假设每次建立连接,客户端恶核服务端的初始化序列号都是从0开始:

 过程如下:

  • 客户端和服务端建立一个TCP连接,在客户端发送数据包被网络阻塞了,然后超时重传这个数据包,而此时服务端设备断电重启了,之前与客户端建立的连接就消失了,于是在收到客户端的数据包的时候就会发送RST报文。
  • 紧接着,客户端又与服务端建立了与上一个连接相同的四元组连接。
  • 在新连接建立完成后,上一个连接中被网络阻塞的数据包刚好到达了服务端,刚好该数据包的序列号正好是在服务端的接收窗口内,所以该数据包会被服务端正常接收,就会造成数据错误。

 可以看到,如果每次建立连接,客户端和服务端的初始化序列号都是一样的话,很容易出现历史报文被下一个相同四元组的连接接收的问题。

如果每次建立连接客户端和服务端的初始化序列号都不一样,就有大概率因为历史报文的序列号不在对方的接受窗口,从而很大程度上避免了历史报文

 如果每次建立连接客户端与服务端的初始化序列号都一样,就有很大概率遇到历史报文的序列号刚好在对方的接收窗口内,从而导致历史报文被新连接成功接收。


初始序列号ISN是如何随机产生的?

RFC793 提到初始化序列号 ISN 随机生成算法:ISN = M + F(localhost, localport, remotehost, remoteport)。

  • M是一个计时器,这个计时器每隔4微秒+1
  • F是一个Hash算法,根据源IP,目的IP,源端口号,目标端口号生成的一个随机数值。要保证Hash算法不能被外部轻易推算出,用MD5算法是一个比较好的选择

可以看出,随机数是会基于时钟计时器递增的,基本不可能会随机成一样的初始化序列号。


http://www.ppmy.cn/news/921909.html

相关文章

如何去掉右键菜单中的上传到qq网络硬盘

1、删除QQ目录下的AddEmotion.htm、AddPanel.htm、AddToNetDisk.htm三个文件。 2、打开注册表 定位到 HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt,删除MenuExt下的QQ右键菜单。 3、下载eXeScope 用eXeScope打开QQ目录下的QQRes.dll文件&…

关于 QQ网络硬盘最新免排队 的两个方法

关于 QQ网络硬盘最新免排队 的两个方法 根据网络文章整理后发布与大家分享~~~ 一,就是从网络上找到" QQ网络硬盘最新免排队 补丁" ,复制到QQ安装目录下即可 二,就是将QQ切换到TM状态,在网络硬盘下载,搞完后,再切换回QQ状态即可

禁止QQ扫描硬盘

QQ运行时扫描硬盘已经不是新闻了,但在被360爆出新闻之后,QQ并没有做出什么修改,2011的最新版本还是继续扫描你的电脑硬盘。不相信的话,就装个360,用“隐私保护器”中的“文件访问检测”就可以看到。我曾有一次看到QQ在…

QQ扫描硬盘

最近发现QQ扫描硬盘事件,大家也比较关注。 早先在园子里就有人发表了QQ扫描硬盘的事情,我一直在关注这个事情。有时候觉得很有趣,两个IT巨头不知道是否就此拉开战幕,真的很期待两大巨头对用户的玩弄! 今天无意中发现一…

Android平台GB28181设备接入侧音频采集推送示例

技术背景​ GB/T28181是广泛应用于视频监控行业的标准协议规范,可以在不同设备之间实现互联互通。今天我们主要探讨Android平台的Audio采集部分。 先说如何拿到数据源,在Android平台上采集音频,常用的方式如下: 1. 使用MediaRe…

前端学习记录~2023.7.10~CSS杂记 Day5

前言一、样式化表格1、一个典型的 HTML 表格2、进行样式化(1)间距和布局(2)简单地排版(3)图形和颜色(4)图案(5)样式化标题 最终效果如下 ![在这里插入图片描述…

解决:Docker 运行镜像创建容器后,使用docker ps 没有显示正在运行的容器

最近在使用docker在安装jenkins容器时,遇到了通过运行Jenkins镜像后,使用docker ps 没有显示正在运行的容器信息,解决方法如下: 1.使用mkdir -p /home/jenkins命令,创建映射Jenkins目录 2.使用:docker run …

Python异步编程框架Tornado使用方法

Tornado简介 Python异步编程框架Tornado是一个轻量级的Web框架和异步网络库,它能够处理大量并发连接和请求,非常适合高并发的网络应用和实时应用。 Tornado基本概念: 协程:Tornado采用协程并发模型,可以让单线程同时…