TCP三次握手和自连接的条件和缺点

news2024/11/24 18:44:14

详解三次握手

在这里插入图片描述
在这里插入图片描述
为什么 SYN 段不携带数据却要消耗一个序列号呢?
记住:
• 不占用序列号的段是不需要确认的,比如纯 ACK 包
• SYN 段需要对方的确认,需要占用一个序列号
• 凡是消耗序列号的 TCP 报文段,一定需要对端确认。如果这个段
没有收到确认,会一直重传直到达到指定的次数为止。

三次握手第二步:服务端回复 SYN + ACK

服务端收到客户端的 SYN 段以后,将 SYN 和 ACK 标记都置位
「序列号」存放服务端自己的序列号
「确认号」字段指定了对端(客户端)下次发送 段的序号,这里等于客户端 ISN 加一
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三次握手中的状态变迁

在这里插入图片描述

如果客户端发出去的 SYN 包,服务端⼀直没有回 ACK 会发⽣什么?

客户端重传 SYN 的次数由什么决定?

重传总时间:63s = 1s+2s+4s+8s+16s+32s
$ sysctl -a | grep tcp_syn_retries
net.ipv4.tcp_syn_retries = 6
在这里插入图片描述
在这里插入图片描述

TCP ⾃连接:⼀个看似 Bug 的现象

源端⼝号和⽬标端⼝号都是⾃⼰可能吗?
测试脚本

 self_connect.sh
while true
do
 telnet 127.0.0.1 50000
done

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何解决⾃连接问题
• 让服务监听的端⼝与客户端随机分配的端⼝不可能相同即可
• 当出现⾃连接的时候,主动关掉连接

让服务监听的端⼝与客户端临时端⼝号不可能相同即可
客户端临时端⼝号的范围由 /proc/sys/net/ipv4/iplocalport_range
⽂件决定,只要服务端监控的端⼝号不在这个范围内就可以了。

当出现⾃连接的时候,主动关掉连接

func (sd *sysDialer) doDialTCP(ctx context.Context, laddr, raddr *TCPAddr) (*TCPConn, error) {
 fd, err := internetSocket(ctx, sd.network, laddr, raddr, syscall.SOCK_STREAM, 0, "dial", sd.Dialer.Control)
 for i := 0; i < 2 && (laddr == nil || laddr.Port == 0) && (selfConnect(fd, err) || spuriousENOTAVAIL(err)); i++ {
 if err == nil {
 fd.Close()
 }
 return newTCPConn(fd), nil
}
func selfConnect(fd *netFD, err error) bool {
 // If the connect failed, we clearly didn't connect to ourselves.
 if fd.laddr == nil || fd.raddr == nil {
 return true
 }
 l := fd.laddr.(*TCPAddr)
 r := fd.raddr.(*TCPAddr)
 return l.Port == r.Port && l.IP.Equal(r.IP)
}

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

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

相关文章

旅游宣传软文怎么写吸引人?纯干货

世界那么大&#xff0c;我想去看看&#xff0c;旅游是一种非常放松解压的方式&#xff0c;在旅行中放飞自我&#xff0c;在旅行中寻找自我&#xff0c;一个景点的客流量很大程度取决于其宣传效果&#xff0c;旅游宣传软文就是一种通过文字来吸引人们前往旅游目的地的宣传手段。…

嵌入式系统中详解 Modbus 通信协议(清晰易懂)

本文总结关于 Modbus 相关的知识&#xff0c;浅显易懂&#xff0c;旨在对 Modbus 有一个很直观的了解。如有错误&#xff0c;欢迎修改意见和建议。 什么是协议 在了解什么是Modbus之前&#xff0c;我们先来看下什么是协议。 协议是一个汉语词汇&#xff0c;读音为xi y&#…

Nftables栈溢出漏洞(CVE-2022-1015)复现

背景介绍 Nftables Nftables 是一个基于内核的包过滤框架&#xff0c;用于 Linux 操作系统中的网络安全和防火墙功能。nftables 的设计目标是提供一种更简单、更灵活和更高效的方式来管理网络数据包的流量。 钩子点&#xff08;Hook Point&#xff09; 钩子点的作用是拦截数…

Linux环境下配置安装RocketMQ

1.下载 官网下载&#xff1a;下载链接 根据需要下载自己需要的版本、本文使用下载的是:4.7.0版本 2.安装 创建目录&#xff0c;使用ftp工具上传下载的包到上面创建的目录下。 cd /usr/local mkdir rocketmq-all-4.7.0注意&#xff1a;rocketmq 需要 Linux 上安装JDK&…

7、卷积神经网络:基础部件+LeNet

1、图像卷积 1. 互相关运算 严格来说&#xff0c;卷积层是个错误的叫法&#xff0c;因为它所表达的运算其实是互相关运算&#xff08;cross-correlation&#xff09;&#xff0c;而不是卷积运算。在卷积层中&#xff0c;输入张量和核张量通过(互相关运算)产生输出张量。 首先…

【运维工程师学习】安装ubuntu20.04并配置SSH

【运维工程师学习】安装ubuntu20.04 1、镜像获取2、创建虚拟机3、开始安装4、配置SSH(1) 查看本地ssh版本(2) 安装ssh(3) 查看ssh运行状态(4) 设置开机自动启动(5) 重启(6) 安装net-tools(7) 查看ip5、SSH连接 1、镜像获取 https://next.itellyou.cn/Original/#cbpProduct?ID…

pdf如何导出为图片?分享三个方法PDF转图片!

将PDF文件转换为图片是在许多场景下都非常有用的操作&#xff0c;不仅能够保留原始文档的内容&#xff0c;还方便在各种平台上共享和展示。在本文中&#xff0c;我们将介绍三种简便的方法&#xff0c;帮助您将PDF文件快速转换为图片格式。 方法一&#xff1a;使用记灵在线工具…

黑客是这样的炼成的

---黑客的态度 黑客们解决问题&#xff0c;建设事物&#xff0c;信仰自由和双向的帮助&#xff0c;人人为我, 我为人人。 要想被认为是一名黑客&#xff0c;你的行为必须显示出你已经具备了这种态度。要想做的好象你具备这种态度&#xff0c;你就不得不真的具备这种态度。但…

物理人机交互Physical human-robot interaction (pHRI)

物理人机交互是指人与机器之间通过物理接触或力传递进行交互的过程。它可以通过各种感知和操控技术实现,包括传感器、执行器、机器人和人体接口等。这种交互方式可以在多个领域和应用中发挥重要作用,例如机器人操作、虚拟现实、协作机器人和康复医疗等。 在物理人机交互中,…

Neo4J 特性CQL语句,函数,Springboot集成

Neo4J Neo4J Neo4J一、Neo4J相关介绍1.为什么需要图数据库方案1&#xff1a;Google方案2&#xff1a;Facebook 2.特性和优势3.什么是Neo4j4.Neo4j数据模型图论基础属性图模型Neo4j的构建元素 5.软件安装 二、CQL语句1.CQL简介2.CREATE 命令3.MATCH 命令4.RETURN 子句5.MATCH和R…

node版本管理工具nvm手册

文章目录 下载使用命令node.js其他版本下载下载exe版解压改名放入到指定位置 下载 github下载 使用命令 查看当前版本 nvm -v 查看被管理的node nvm list 切换node版本 nvm use 14.21.3 node.js其他版本下载 下载链接 下载exe版 解压改名放入到指定位置

Echarts柱状图数据过多设置滚动条效果

未设置前&#xff1a; 可以看出数据全部挤压在一起了 设置后&#xff1a; 下面多出一个滚动条&#xff0c;并且鼠标可以拖动数据 dataZoom: [{show: true,height:8,bottom:0,startValue: 0, //起始值endValue: 5, //结束值showDetail: false,fillerColor: "rgba(1, 132, …

10 Web全栈 组件化设计

前端架构层次设计 前端技术体系庞大&#xff0c;层级也非常分明&#xff0c;在架构设计领域中不能一概而论&#xff0c;任何应用种类都有自己独立的架构体系。比如在前端开发领域&#xff0c;在框架基础上进行应用构建的开发者锁思考的问题&#xff0c;与在组件库设计方面的开…

科大讯飞狂撒钱,400 万助力 AI 大赛

大家好&#xff0c;我是二哥呀。 6 月 15 日&#xff0c;科大讯飞的星火认知大模型 APP 上线&#xff0c;我第一时间带大家体验了一把&#xff0c;当时可以说是好评如潮。 后续有很多读者&#xff0c;比如说下面这位&#xff0c;私下找到我&#xff0c;让我帮忙审核通过一下他…

SpringCloud入门实战(十)- SpringCloud Bus消息总线

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

MySQL表聚合函数

前言 哈喽&#xff0c;各位小伙伴大家好&#xff0c;本篇文章为大家介绍几个MySQL中常用的聚合函数&#xff0c;什么是聚合函数&#xff0c;相信第一次看到这个名词的小伙伴是比较懵的&#xff0c;举个例子&#xff0c;比如说统计表中数据的个数&#xff0c;就可以使用MySQL中提…

软件测试技术分享丨支付测试

支付测试 引言&#xff1a;如今&#xff0c;随着非现金支付手段的不断推广和应用&#xff0c;“非现金社会”正在形成。非现金支付已成为日常生活中不可或缺的伙伴。那么&#xff0c;对于互联网产品来说&#xff0c;支付也是涉及到公司收入的一个重大环节。对于我们测试人员&am…

JavaScript 处理字符串数组数据方法

前端三件套中 JavaScript 就是充电处理业务逻辑的一个角色&#xff0c;在很多情况之下&#xff0c;或像在做项目之中去发起一些数据请求之后待服务器响应回馈给到客户端的时候&#xff0c;对于返回的数据需要进行一个格式的处理&#xff0c;比如有JSON&#xff0c;字符串&#…

Python 集合探索:解密高效数据操作和快速算法的奇妙世界

前言 在 Python 的众多数据结构中&#xff0c;集合&#xff08;Sets&#xff09;是一个引人注目且实用的概念。集合提供了一种存储无顺序、唯一元素的数据结构&#xff0c;它们不仅可以帮助我们高效处理数据&#xff0c;还能应用于各种算法和问题。 本博客将带您踏上一段关于…

python 从一个文件夹里面复制 符合要求的文件

记事本格式 import os def copy(src_file, dst_file):import shutil# 执行复制操作shutil.copy2(src_file, dst_file)def main(parent,data,dest_path):_list []for line in open(data, encoding"utf-8"):line line.strip()_list.append(line.split("\t&quo…