TCP 三次握手建立连接

一开始,客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口,处于 LISTEN 状态

1. 第一次握手

  • 客户端会随机初始化序号(client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把 SYN 标志位置为 1,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。

  • 第一次握手的 SYN 包丢失:超时重传

2. 第二次握手

  • 服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入 TCP 首部的「序号」字段中,其次把 TCP 首部的「确认应答号」字段填入 client_isn + 1, 接着把 SYN 和 ACK 标志位置为 1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。

  • SYN+ACK 包丢失:服务端syn_ack 和客户端 ack 都超时重传

3. 第三次握手

  • 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次「确认应答号」字段填入 server_isn + 1 ,最后把报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于 ESTABLISHED 状态。

  • 服务端收到客户端的应答报文后,也进入 ESTABLISHED 状态

  • ack 丢失(服务端屏蔽 ACK):客户端已经进入 ESTABLISHED 状态,服务端还在 SYN_RECV 状态,服务端没收到 ACK,重传 syn_ack,超过重传次数后就断开连接,但是客户端一直处于 ESTABLISHED 状态,直到下一次请求才发现服务端已经断开连接了

    如果不是屏蔽 ACK(不接收直接丢弃),而是直接断开连接,服务端收到客户端的 ack 会回 RST 报文,客户端收到就会断开连接而不是不断重发 ACK

4. TCP 的保活机制

如果客户端一直不发数据,就会一直处于 ESTABLISHED 状态,但服务端已经断开了

  • 在一段时间内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个「探测报文」,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序

5. 为什么要三次?

  • 避免建立历史报文的连接:举例

  • 同步双方的序列号

  • 避免资源浪费

6. 两次可以吗?

  • 有可能建立历史连接:两次握手没有中间状态让客户端阻止历史连接

  • 只能确认客户端的序列号被服务端同步了,不能确认服务端的序号是否被客户端同步

  • 两次握手就建立连接会造成服务端的资源浪费:没有第三次握手,服务端每次收到 SYN 报文就会建立一次连接,但是有可能有多个重复的 SYN 报文(历史报文被阻塞延后到达),冗余的 SYN 报文导致服务端建立多个连接,浪费资源

7. 四次可以吗?

  • 第二次握手的作用有两个:ACK 确认收到客户端的第一次握手,同步客户端初始化序列号,SYN 发送服务端初始化序列号,这两次握手可以合并成同一次,所以四次握手没有必要 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

略读ArrayList源码

ArrayList是Java集合框架中的一部分,底层是通过数组实现的,可以动态增长和缩减。 一、首先看成员变量 序列化ID定义。在Java中,如果一个类实现了Serializable接口,那么它的serialVersionUID就非常重要了。serialVersionUID用于确…

python 图片爬虫记录

感谢大家的点赞。再补充一点。 对于这个 url https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEqB5nighYsMZE7kexaVNJfxy3OkRutNEKatksw9u5f-ckHNROLzFyx2Uty3zYWNEaeOmzsljGr3eARiDWaM9DM8G2hPuPf8uZP0NO3kNUCnM2Cjb3ZKtLhJDBwqeR4ElpJ7ID5_wIHGQ/s200 这个url最…

Python进阶 JSON数据,pyecharts制图

目录 json数据格式的转换 什么是json json本质 注意 pyecharts快速入门 画一个最简单的折线图 使用全局配置选项优化折线图 总结 json数据格式的转换 什么是json 一种轻量级的数据交换格式,可以按json指定的格式去组织和封装数据 json本质 带有特定格式的…

汇川技术|Inoproshop基本使用方法:汇川指令库、库文件

哈喽,你好啊,我是雷工! 本节熟悉了解汇川常用指令库的分类及概述,了解Inoproshop库文件; 以下为学习笔记。 01 指令简介与分类 可编程控制系统中,使CPU完成某种操作或实现某种功能的命令及多个命令的组合…

CCRC-DSA数据安全评估师:加快构建大网络安全工作格局

7月31日,第十二届ISC.AI互联网安全大会开幕式在北京国家会议中心隆重举行,本次大会以“构建大型安全防护模型,引领安全产业创新”为主题。 中央网络安全和信息化委员会办公室副主任、国家互联网信息办公室副主任王京涛出席并发表了重要讲话。…

语音平台调研

百度DuerOS开放平台 DuerOS是百度推出的对话式人工智能操作系统,即智能语音交互平台。DuerOS的技术架构包含“对话服务”和“技能框架”两大基础协议。两大协议连通起来的对话核心系统、智能设备开放平台和技能开放平台,构成了完整DuerOS的智能生态系统。…

C#初级——字典Dictionary

字典 字典是C#中的一种集合&#xff0c;它存储键值对&#xff0c;并且每个键与一个值相关联。 创建字典 Dictionary<键的类型, 值的类型> 字典名字 new Dictionary<键的类型, 值的类型>(); Dictionary<int, string> dicStudent new Dictionary<int, str…

Javascript常见算法(二)【学习】

动态规划 斐波那契数列&#xff1a; 经典的动态规划问题&#xff0c;每个数是前两个数的和。 斐波那契数列&#xff08;Fibonacci sequence&#xff09;是一个非常著名的数列&#xff0c;其中每个数是前两个数的和&#xff0c;序列以0和1开始。在JavaScript中&#xff0c;有多…

药厂子母钟系统,强抗干扰能力,满足复杂生产环境

在制药行业中&#xff0c;精确的时间同步对于确保药品生产的质量和合规性至关重要。药厂子母钟系统作为一种高度可靠的时间同步解决方案&#xff0c;不仅能够提供准确的时间信息&#xff0c;还具有强大的抗干扰能力&#xff0c;非常适合在复杂的生产环境中使用。本文将详细介绍…

[STM32]HAL库实现自己的BootLoader-BootLoader与OTA-STM32CUBEMX

目录 一、前言 二、BootLoader 三、BootLoader的实现 四、APP程序 五、效果展示 六、拓展 一、前言 听到BootLoader大家一定很熟悉&#xff0c;在很多常见的系统中都会存在BootLoader。本文将介绍BootLoader的含义和简易实现&#xff0c;建议大家学习前掌握些原理基础。 …

YOLOV8替换Lion优化器

YOLOV8替换Lion优化器 1 优化器介绍博客 参考bilibili讲解视频 论文地址&#xff1a;https://arxiv.org/abs/2302.06675 代码地址&#xff1a;https://github.com/google/automl/blob/master/lion/lion_pytorch.py """PyTorch implementation of the Lion …

C++初学(11)

不知不觉就第11篇了QWQ 11.1、指针和自由存储空间 之前提到了计算机程序在存储数据时必须跟踪的3个基本属性&#xff1a; &#xff08;1&#xff09;信息存储在何处&#xff1b; &#xff08;2&#xff09;存储的值为多少&#xff1b; &#xff08;3&#xff09;存储的信息…

未授权访问漏洞(非重点 中)

6.Hadoop 1.在 fofa 使用 port"8088" && app"Hadoop" 获取资源 2.打开后若无需登录,则存在漏洞 7.ActiveMQ 1.在 fofa 使用 body"ActiveMQ" && port"8161" 获取资源 2.打开后若点击登录,默认账户密码为 admin/adm…

【css】使用CSS绘制奥运五环--巴黎奥运

使用CSS绘制奥运五环 在2024年巴黎奥运会期间&#xff0c;本文来使用 CSS 来画一个奥运五环。奥运五环由五个相互交叠的圆环组成&#xff0c;分别代表五大洲。 奥运五环是相互连接的&#xff0c;因此在视觉上会产生重叠效果&#xff0c;这也是实现五环最有挑战性的部分 HTML结…

Rabbitmq的死信队列与如何利用死信队列实现延迟队列

如果设置了队列的 TTL 属性&#xff0c;那么一旦消息过期&#xff0c;就会被队列丢弃(如果配置了死信队列被丢到死信队列中)。而如果仅设置消息的 TTL 属性&#xff0c;即使消息过期&#xff0c;也不一定会被马上丢弃&#xff0c;因为消息是否过期是在即将投递到消费者之前判定…

HTML常用标签和CSS的运用

目录 1.HTML标签 1.1 文档结构标签 1.2 文本格式标签 1.3 列表标签 1.4 链接和媒体标签 1.5 表格标签 1.6 表单标签 1.7 分区和布局标签 1.8 元数据标签 2.css样式 2.1 字体样式 2.2 文本样式 2.3 背景样式 2.4 边框样式 2.5 间距样式 2.6 宽度和高度 2.7 显示…

AI算力租赁是什么,哪些行业会有需求?

一、AI算力租赁的定义与概述 AI算力租赁是指基于人工智能&#xff08;AI&#xff09;应用需求&#xff0c;将所需的计算能力&#xff08;即算力&#xff09;通过租赁服务的方式提供给企业和个人用户。这种服务允许用户根据需要租用人工智能计算资源&#xff0c;如图形处理单元…

星座运势网源码/星座屋接口/星座配对网站PHP程序带采集

星座运势网源码/星座屋接口/星座配对网站PHP程序带采集 演示站&#xff1a; https://xz.wengu8.com/ 程序说明&#xff1a; 1、前端模板PC手机端自适应。 2、每日运势/当月/当年星座运势调用星座屋API接口&#xff0c;每天只采集一次接口&#xff0c;后保存到本地调用本地…

科普文:万字梳理高性能 Kafka快的8个原因

概叙 科普文&#xff1a;万字详解Kafka基本原理和应用-CSDN博客 科普文&#xff1a;万字梳理31个Kafka问题-CSDN博客 我们都知道 Kafka 是基于磁盘进行存储的&#xff0c;但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点&#xff0c;其吞吐量动辄几十上百万。 在座的…

Zookeeper未授权访问漏洞

Zookeeper是分布式协同管理工具&#xff0c;常用来管理系统配置信息&#xff0c;提供分布式协同服务。Zookeeper的默认开放端口是2181。Zookeeper安装部署之后默认情况下不需要任何身份验证&#xff0c;造成攻击者可以远程利用Zookeeper&#xff0c;通过服务器收集敏感信息或者…