TCP协议面试灵魂12 问(三)

news2025/2/25 2:01:21

等待2MSL的意义

如果不等待会怎样?

如果不等待,客户端直接跑路,当服务端还有很多数据包要给客户端发,且还在路上的时候,若客户端的端口此时刚好被新的应用占用,那么就接收到了无用数据包,造成数据包混乱。所以,最保险的做法是等服务器发来的数据包都死翘翘再启动新的应用。

那,照这样说一个 MSL 不就不够了吗,为什么要等待 2 MSL?

  • 1 个 MSL 确保四次挥手中主动关闭方最后的 ACK 报文最终能达到对端

  • 1 个 MSL 确保对端没有收到 ACK 重传的 FIN 报文可以到达

这就是等待 2MSL 的意义。

为什么是四次挥手而不是三次?

因为服务端在接收到FIN, 往往不会立即返回FIN, 必须等到服务端所有的报文都发送完毕了,才能发FIN。因此先发一个ACK表示已经收到客户端的FIN,延迟一段时间才发FIN。这就造成了四次挥手。

如果是三次挥手会有什么问题?

等于说服务端将ACKFIN的发送合并为一次挥手,这个时候长时间的延迟可能会导致客户端误以为FIN没有到达客户端,从而让客户端不断的重发FIN

同时关闭会怎样?

如果客户端和服务端同时发送 FIN ,状态会如何变化?如图所示:

004: 说说半连接队列和 SYN Flood 攻击的关系

三次握手前,服务端的状态从CLOSED变为LISTEN, 同时在内部创建了两个队列:半连接队列全连接队列,即SYN队列ACCEPT队列

半连接队列

当客户端发送SYN到服务端,服务端收到以后回复ACKSYN,状态由LISTEN变为SYN_RCVD,此时这个连接就被推入了SYN队列,也就是半连接队列

全连接队列

当客户端返回ACK, 服务端接收后,三次握手完成。这个时候连接等待被具体的应用取走,在被取走之前,它会被推入另外一个 TCP 维护的队列,也就是全连接队列(Accept Queue)

SYN Flood 攻击原理

SYN Flood 属于典型的 DoS/DDoS 攻击。其攻击的原理很简单,就是用客户端在短时间内伪造大量不存在的 IP 地址,并向服务端疯狂发送SYN。对于服务端而言,会产生两个危险的后果:

  1. 处理大量的SYN包并返回对应ACK, 势必有大量连接处于SYN_RCVD状态,从而占满整个半连接队列,无法处理正常的请求。

  2. 由于是不存在的 IP,服务端长时间收不到客户端的ACK,会导致服务端不断重发数据,直到耗尽服务端的资源。

如何应对 SYN Flood 攻击?

  • 增加 SYN 连接,也就是增加半连接队列的容量。

  • 减少 SYN + ACK 重试次数,避免大量的超时重发。

  • 利用 SYN Cookie 技术,在服务端接收到SYN后不立即分配连接资源,而是根据这个SYN计算出一个Cookie,连同第二次握手回复给客户端,在客户端回复ACK的时候带上这个Cookie值,服务端验证 Cookie 合法之后才分配连接资源。

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

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

相关文章

C++高级教程——C++ 异常处理

C 异常处理C 异常处理抛出异常捕获异常C 标准的异常定义新的异常C 异常处理 异常是程序在执行期间产生的问题。C 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。 异常提供了一种转移程序控制权的方式。C 异常处理涉及到三个关键字:try、c…

【Linux】gdb的使用

文章目录🎪 Linux下gdb的使用🚀1.gdb调试准备🚀2.gdb指令集🚀3.gdb指令演示⭐3.1 展示源文件代码⭐3.2 断点与多步调试操作⭐3.3 常用操作指令🎪 Linux下gdb的使用 GDB 全称“GNU symbolic debugger”,是一…

dp(十)* 0-1背包与完全背包的组合数问题 搞清组合数与排列数

目录 兑换零钱(二)_牛客题霸_牛客网(完全背包) 494. 目标和(0-1背包) 分割等和子集_牛客题霸_牛客网 兑换零钱(二)_牛客题霸_牛客网(完全背包) 描述 给定一个整数数组 nums 表示不同数额的硬币和一个正…

拉伯证券|社会消费复苏将是2023年主旋律

安排指出,兔年新年黄金周社会消费平稳复苏。全国范围看,依据国家税务总局增值税发票数据,2023年新年黄金周(1月21日-27日,阴历岁除至正月初六),全国消费相关工作销售收入同比2022年新年假日添加…

Qt 进程(基本用法)

进程的使用情况: 运行的当前的应用中调用外部程序来实现功时调使用到进程。 比如:在你的运行程序中,开启迅雷或开启其他程序QProcess类用来 启动一个外部程序并与之通信QProcess类 常用一些函数: start()…

Pycharm 中Torch安装方法

1.使用自带工具安装依次打开菜单:File->Setting点击号,搜索torch选择1.13.0版本安装安装错误:具体包含很长一段错误记录,如下:Collecting torch1.13.0Downloading https://files.pythonhosted.org/packages/ec/5e/8…

网络协议栈简单设计(tcp)

网络协议栈简单设计(tcp) 接着这篇文章写的 TCP相对于Udp,分为两个部分:连接(三次握手、四次挥手)、交互(数据传输) 三次握手 tcp包结构体定义 依照tcp包头字段定义就行: 注意,…

jenkins配置

ssh配置 选择Manager Jenkins 选择Configure System,进入页面一直拉到底 Remote Directory:是你需要从jenkins服务拷贝到远程应用服务指定的目录 高级:可以配置ssh密码 配置maven,git,jdk 选择 Global Tool Configur…

dpdk无锁队列rte_ring实现分析

1. 概述 rte_ring(以下简称ring)是一个高效率的无锁环形队列,它具有以下特点: FIFO队列长度是固定的,所有指针存放在数组中无锁实现(lockless)多消费者或单消费者出队多生产者或单消费者入队批量(bulk)出队 - 出队N个对象,否则失…

05.抽象工厂模式

05.抽象工厂模式 概念 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。抽象工厂又称为Kit模式,属于对象创建型模式。 抽象工厂可以将统一产品族的单独工厂封装起来,在正常使用中&#xff0…

08.适配器模式

08.适配器模式 概念: 将一个类的接口转化成用户需要的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式可以分为类适配器和对象适配器两种,区别在于适配器角色对应被适配角色的适配是通过继承还是组合…

单月涨粉30w+,他们掌握引流法宝,小红书1月创作趋势是什么?

新年来到,在刚过去的1月,小红书平台涌现出哪些黑马博主?品牌在投放种草方面有何亮眼表现?为洞察小红书平台的内容创作趋势及品牌营销策略,新红推出1月月度榜单,从创作者及品牌两方面入手,解析月…

计算机网络-I/O多路复用机制

I/O多路复用机制 I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符(File descriptor是计算机科学中的一个术语,是一个用于表述指向文件的…

2.11 PID控制算法(四)补充

文章目录 1、理论1、代码3、分析3.1 比例项:3.2 比例+积分3.3 比例+积分+微分1、理论 1、代码 typedef struct {s32 Uplimit; //输出限幅s32 Downlimit; //输出限幅s32 target; // 目标输出量s3

leveldb源码解析二——SSTable

本章解析leveldb的基本组件——SSTable,SSTable一旦形成,就不会被改变,SSTable的操作有以下2种: 1、构建SSTable,在minor compaction和major compaction时,会构建SSTable,其中minor compaction是…

Opencv DNN C++ CPU 平台编译配置过程

Opencv DNN C CPU 平台编译配置过程 以下内容基于 windows 平台,实际上不同平台在基础工具齐全的情况下,编译过程差异并不大。 opencv 随着版本的更新,对于不同算子的支持也会逐步完善,所以尽量使用新的版本。 同时也可以把对应…

TCP滑动窗口协议与流量控制

谈到TCP的滑动窗口协议与流量控制,便会想起2006年去华为-3COM(现H3C公司时)面试时的场景。 当年毕业后,刚刚学了一点TCP的皮毛,仅仅是知道了TCP是面向连接的协议,以对每个报文都进行确认超时重传的机制来保…

摸鱼时间,画个吃豆人玩一下

Ⅰ . 吃豆人小游戏 Canvas API(画布)是在 HTML5 中新增的标签用于在网页实时生成图像;是一个非常适合,做一些有趣的小游戏 和 动画;下面我们来简单的写一下 这个小例子 👇 文章目录Ⅰ . 吃豆人小游戏Ⅱ. 实…

学习嵌入式必读十本书,从C语言到ARM

学习嵌入式必读的十本书籍,按照C语言、数据结构、Linux、C、QT、单片机、ARM的顺序给大家推荐。 01 C语言 凡是计算机、电子、通信、自动化、机械专业的同学,大一的时候必学C语言,而且大部分高校选择的教材都是谭浩强。这本书在网上的评价褒…

【计算机程序设计思想与方法】2 什么是计算思维?

1.2 什么是计算思维? 如《【计算机程序设计思想与方法】1 什么是计算?》中所述,计算是利用计算机一步一步地执行指令来解决问题的过程,计算机科学是关于计算的科学。 正如数学家在证明数学定理时,有独特的数学思维。工程师在设计制造产品时,有独特的工程思维。艺术家在…