十分钟搞定TCP三次握手面试

news2024/12/26 1:05:48

三次握手过程

1.客户端与客户端都处于close状态,服务器主动对某端口进行监听后处于LISTEN状态

2.客户端将SYN标志位置为1,向服务器发,SYN和初始序列号seq后处于SYN_SENT状态

2.服务器处于LISTEN状态,收到客户端发来的请求后将SYN和ACK的标志位置为1,将确认应答号ack填入客户端的seq+1;

向客户端发送SYN,服务器的初始序列号,ACK和确认应答序号为客户端初始序列号+1,服务器变为SYN_REVD状态

3.客户端收到服务器后,将ACK标志位置为1,确认应答号ack填入服务器的初始序列号+1;

发送ACK和确认应答号为服务器初始序列号+1,客户端变为ESTABLISHED状态,本次握手可以携带数据

4.服务器收到客户端的确认应答后,变为ESTABLISHED状态

为什么是3次握手而不是2次?

因为TCP协议是全双工通信,就是两端都可以发送数据;

三次握手的目的是确认自己和对方的发送接收功能都是正常的

而如果只有两次握手,

首先:

因为TCP协议是全双工通信,就是两端都可以发送数据;而此时客户端能知道服务器可以接受自己发送的数据,而服务器不知道客户端能否收到自己发送的数据;这就违背了全双工通信的定义;

其次:

因为网络往往是非理想状态,客户端第一次发送给服务器的连接请求,有时由于网络拥塞,迟迟没有得到响应;触发超时重传而后第二次发送请求,服务器回应,连接建立;一段时间后,第一次的连接请求到达服务器,服务器会创建一个冗余的连接,这样就造成了资源浪费;

总结:防止已失效的报文突然传送到服务器引起错误

第一次握手丢失会发生什么?

客户端发送SYN报文请求建立连接后,进入SYN_SENT状态,此时他会维持一个计时器,在一定时间内收不到服务器的SYN_ACK报文,就会触发超时重传机制,重传SYN报文,而且每次重传的SYN报文的序列号都是一样的;每次重传时间是上一次的二倍,如果重传次数达到上限就会断开连接

 

注:这个超时时间是写在内核中的,如果想要修改需要重新编译内核,比较麻烦

第二次握手丢失会发生什么

1.因为第二次握手包含对客户端第一次握手的ACK确认报文,所以如果客户端在一定时间内没有收到二次握手报文,客户端会认为是自己的SYN报文丢失,会触发超时重传机制,重传SYN报文

2.因为第二次握手中报文服务器的SYN报文,客户端收到后需要发送ACK确认报文,这样服务器才会知道SYN报文成功被客户端接收;所以当二次握手丢失时,服务器也收不到第三次握手,服务器会触发超时重传机制重新发送SYN_ACK报文

3.当客户端与服务器到达最大重传次数时,就会断开连接

第三次握手丢失会发生什么

因为第三次握手的ACK是对第二次握手的SYN的确认报文,所以当第三次握手丢失,服务端在一定时间内收不到确认报文,就会触发超时重传机制,重传SYN_ACK报文;

注:第三次握手的ACK是不会重传的,若ACK丢失,就由对方重传对应报文

什么是SYN攻击

正常情况下:

1.当服务器接收到客户端的SYN报文时,会创建一个半连接对象,然后将其加入到内核的【SYN队列】

2.接着发送SYN+ACK给客户端,等待客户端回应ACK报文;

3.服务器接收到ACK报文后,从【SYN队列】中取出一个半连接对象,然后创建一个新的连接对象放入【accept队列】

4.应用通过调用accept() socket接口,从【accept队列】中取出连接对象

无论是【SYN队列】还是【accept队列】,都有最大长度限制,超过限制时,默认情况都会丢弃报文

所以,SYN攻击方式就是短时间伪造不同IP地址的SYN报文发送给服务端,久而久之就会占满TCP半连接队列,这样当TCP半连接队列满了,后续就算再收到正确的SYN报文也会丢弃,导致客户端无法和服务器建立连接

什么是半/全连接队列

半连接队列(SYN队列):服务器第一次收到客户端的SYN后,会处于SYN_RCVD状态,此时双方还没有完全建立连接,服务器会把此状态下的请求连接放在一个队列里,我们把这种队列成为半连接队列

全连接队列(accept队列):已经完成三次握手,建立起连接的就会放在全连接队列

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

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

相关文章

基于DCT和扩频的音频水印嵌入提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................................................................... N 10; %嵌入一…

ubuntu安装编程字体DejaVu Sans Mono

DejaVu Sans Mono 安装命令: sudo apt-get install ttf-dejavu

唐刘:关于产品质量的思考 - 如何评估质量

在上一篇文章《 关于产品质量的思考 - 我的基本认知 》中,作者通过亲身经历分享了对产品质量的思考和认知:高质量的产品不仅仅是通过测试来保证的,更是通过在真实场景中不断打磨和改进得来的。本文为“关于产品质量的思考”系列的第二篇&…

2024.4.2-day07-CSS 盒子模型(显示模式、盒子模型)

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 作业 2024.4.2 学习笔记CSS标签元素显示模式1 块元素2 行内元素3 行内块元素4…

每日OJ题_优先级队列_堆③_力扣692. 前K个高频单词

目录 力扣692. 前K个高频单词 解析代码 力扣692. 前K个高频单词 692. 前K个高频单词 难度 中等 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率&#xff0c…

技术再度取得优势,人工智能兴起推动需求,美芯涨价收割市场,收割中国制造?...

独家首发 ------------- 分析机构指出一季度全球存储芯片涨价了15%左右,而近期三星半导体预测全球存储芯片的价格还将继续上涨,预计二季度至少上涨两成,显示出美系芯片在忍受了一年多的亏损之后再度联手涨价。 2022年中国存储芯片取得了重大进…

数据流图

数据字典 数据流图平衡原则 父图与子图之间的平衡子图内平衡

IP地址到底有什么用

IP地址在计算机网络中的作用至关重要,它不仅是设备在网络中的唯一标识,更是实现网络通信、网络管理和安全的关键要素。下面,我们将从多个方面详细阐述IP地址的作用。 首先,IP地址作为设备的唯一标识,为网络通信提供了…

Leetcode 17.电话号码的字母组合

题目 思路 输入的digits有几个数就有几层。 一层中有几个数则取决于输入的数字对应的字母有几个。 1.确定递归函数的返回值及参数: 其实参数不是一开始就确定好的,而是你在写递归函数的时候缺啥,就往进去传啥。 这里我就直接全部写出来。…

什么是物联网云平台

在信息化和智能化浪潮的推动下,物联网云平台作为连接物理世界与数字世界的桥梁,正日益成为企业数字化转型的关键支撑。物联网云平台通过集成先进的云计算、大数据分析和人工智能等技术,为企业提供了高效、安全、智能的数据处理和应用服务&…

爬虫实战一、Scrapy开发环境(Win10+Anaconda3)搭建

#前言 在这儿推荐使用Anaconda进行安装,并不推荐大家用pythonpip安装,因为pythonpip的坑实在是太多了。 #一、环境中准备: Win10(企业版)Anaconda3-5.0.1-Windows-x86_64,下载地址,如果打不开…

Linux 著名的sudo、su是什么?怎么用?

一、su 什么是su? su命令(简称是:substitute 或者 switch user )用于切换到另一个用户,没有指定用户名,则默认情况下将以root用户登录。 为了向后兼容,su默认不改变当前目录,只设…

记录Ubuntu安装yum报错解决方法

安装问题分析 首先:分析一下,你按照别的博客安装yum出现的的大部分问题,都是说是在软件包里面无法定位yum,如下图一样,想必应该是这样的!!如果不是这个问题,放心这篇博客也可以帮你解…

可视化场景(9):智慧看板,可能是最直观的数据展示

10年经验的大数据可视化和数字孪生老司机,该领域的专家,是您可信赖的技术合伙人,分享该领域的项目和作品,欢迎互动交流。 hello,我是贝格前端工场,本期分享可视化大屏在安全生产与设备运维场景的应用&#…

【Web】纯萌新的BUUCTF刷题日记Day1

目录 [RoarCTF 2019]Easy Java [网鼎杯 2018]Fakebook [CISCN2019 华北赛区 Day2 Web1]Hack World [BJDCTF2020]The mystery of ip [网鼎杯 2020 朱雀组]phpweb [BSidesCF 2020]Had a bad day [BJDCTF2020]ZJCTF,不过如此 [BUUCTF 2018]Online Tool [GXYCTF…

pringboot2集成swagger2出现guava的FluentIterable方法不存在

错误信息 Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: springfox.documentation.spring.web.scanners.ApiListingScanner.scan(ApiListingScanner.java:117) The following method did not ex…

解决Idea导入项目:Unable to import maven project: See logs for details

2019.1版本idea,使用3.9.4版本maven,导入项目出现如下问题: 1.尝试修改配置参数 2.参数修改没有效果,查看具体日志 可以看到如下报错信息 3.解决办法 猜想Maven与IDEA版本不一致导致 由高版本:apache-maven-3.9.4 降…

C++11: 右值引用,移动语义,万能引用,完美转发,新的默认成员函数

C11: 右值引用,移动语义,万能引用,完美转发,新的默认成员函数 一.左值和右值1.左值2.右值3.左值,右值和能否被修改的关系 二.左值引用的好处和局限1.完全解决了传值传参时的深拷贝问题2.传引用返回时需要注意的点1.坑点:传引用返回用值接收2.传引用返回用引用接收3.应该怎么办?…

智慧工厂EMS能效管理解决方案

安科瑞电气股份有限公司 祁洁 15000363176 一、传统工厂现状 1、缺乏顶层设计,智慧化建设碎片化,不成体系,建成即落后。 2、弱电系统、网络、数据中心等基础设施老化,服务感知差。 3、缺乏设备在线监视,无法及时…

Vue+OpenLayers7入门到实战:OpenLayers如何销毁已经创建好的地图容器

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上如何销毁已经创建好的地图容器。 在某些场景下,可能会需要销毁之前的地图,重新创建新的地图的需要,因此本章介绍一下在开始创建地图前如何先销毁之前的地图的功能。…