| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP安全可靠连接讨论(三次握手与两次握手) -> 正文阅读 |
|
[网络协议]TCP安全可靠连接讨论(三次握手与两次握手) |
谈论课题一:TCP三次握手 第一次握手:client发送连接请求报文[SYN=1,seq=x]给server,client进入SYN_SENT状态 第二次握手:server收到连接请求报文,分配资源,将相关信息放入半连接队列中,回应client一个报文[ACK=1,SYN=1,ack=x+1,seq=y],server进入SYN_RECV状态 第三次握手:client收到server回应报文,回server一个ACK报文[ACK=1,ack=y+1],此时client进入ESTABLISHED状态,即可发送数据,server收到client[ACK]报文,将相关信息从半连接队列中转移到全连接队列中,认为连接建立成功,进入ESTABLISHED状态 论题:丢包问题 1、第一次握手client连接请求报文[SYN=1,seq=x]丢失 超过一定时间,client没有收到server的ACK+SYN报文,认为连接请求报文丢失,重传连接请求报文[SYN=1,seq=x2],此时序列号变了。根据《TCP/IP详解卷Ⅰ:协议》中的描述,此时会尝试三次,间隔时间分别是 5.8s、24s、48s。三次连接不成功放弃连接 2、第二次握手server回应报文[ACK=1,SYN=1,ack=x+1,seq=y]丢失 超过一定时间,client没有收到server的ACK+SYN报文,认为连接请求报文丢失,放弃此次连接,重传连接请求报文[SYN=1,seq=x2],此时序列号变了 超过一定时间,server没有收到client的ACK报文[ACK=1,ack=y+1],知道自己的 SYN+ACK 丢了,于是又重传了若干次 SYN+ACK报文 client收到SYN+ACK报文,然而client已经放弃此次连接,将不予理会 3、第三次握手client回应报文ACK报文[ACK=1,ack=y+1]丢失 超过一定时间,server没有收到ACK报文或者是client发送的数据,认为SYN+ACK报文丢失,重传SYN+ACK报文 此时client已经进入EATABLISHED状态,可以向server发送数据,开始发送数据时会携带上一个ACK确认序号,所以client回应的[ACK]报文丢失,server在收到这个数据包时,依然能够通过包内 ACK 的确认序号,正常进入 ESTABLISHED 状态 论题:包延迟抵达问题 1、第一次握手client连接请求报文[SYN=1,seq=x]延迟抵达 server收到延迟抵达连接请求报文,分配资源,将相关信息放入半连接队列中,server回应报文[ACK=1,SYN=1,ack=x+1,seq=y],然而client已经放弃此次连接,将不予理会,建立连接失败,然半连接队列会占用资源,SYN攻击即是利用发送连接请求给服务器,不回应ACK报文,消耗完半连接队列资源的原理 2、第二次握手server回应报文[ACK=1,SYN=1,ack=x+1,seq=y]延迟抵达 超过一定时间,client没有收到server的ACK+SYN报文,认为连接请求报文丢失,放弃此次连接,重传连接请求报文[SYN=1,seq=x2] 随后client收到延迟抵达回应报文[ACK=1,SYN=1,ack=x+1,seq=y],然而client已经放弃此次连接,将不予理会 3、第三次握手client回应报文ACK报文[ACK=1,ack=y+1]延迟抵达 超过一定时间,server没有收到ACK报文或者是client发送的数据,认为SYN+ACK报文丢失,重传SYN+ACK报文 此时client已经进入EATABLISHED状态,可以向server发送数据,开始发送数据时会携带上一个ACK确认序号,所以client回应的[ACK]报文延迟,server在收到这个数据包时,依然能够通过包内 ACK 的确认序号,正常进入 ESTABLISHED 状态 谈论课题二:二次握手 据《计算机网络》上讲述,三次握手是防止已失效的连接请求又传送到服务器端,从而产生错误 那么我们就假设使用二次握手来进行连接,具体的实现如下 第一次握手:client发送连接请求报文[SYN=1,seq=x]给server,client进入SYN_SENT状态 第二次握手:server收到连接请求报文,分配资源,将相关信息放入全连接队列中,回应client一个报文[ACK=1,ack=x+1],server进入ESTABLISHED状态,认为连接建立成功,client收到server回应报文,进入ESTABLISHED状态,即可发送数据 论题:丢包问题 1、第一次握手client的连接请求报文[SYN=1,seq=x]丢失 超过一定时间,client没有收到server的ACK报文,认为连接请求报文丢失,重传连接请求报文[SYN=1,seq=x2],此时序列号改变 2、第二次握手server回应报文[ACK=1,ack=x+1]丢失 超过一定时间,client没有收到server的ACK+SYN报文,认为连接请求报文丢失,放弃此次连接,重传连接请求报文[SYN=1,seq=x2],此时序列号变了,然而server已经进入ESTABLISHED状态,白白等待client发送数据,浪费资源 论题:包延迟抵达问题 1、第一次握手client连接请求报文[SYN=1,seq=x]延迟抵达 超过一定时间,client没有收到server的ACK报文,认为连接请求报文丢失,放弃此次连接,重传连接请求报文[SYN=1,seq=x2] server收到延迟抵达连接请求报文,server回应报文[ACK=1,SYN=1,ack=x+1,seq=y],然而client已经放弃此次连接,将不予理会,不发送数据,然而server已经进入ESTABLISHED状态,白白等待client发送数据,浪费资源 2、第二次握手server回应报文[ACK=1,ack=x+1]延迟抵达 超过一定时间,client没有收到server的ACK报文,认为连接请求报文丢失,放弃此次连接,重传连接请求报文[SYN=1,seq=x2] 随后client收到延迟抵达回应报文,然而client已经放弃此次连接,将不予理会,然而server已经进入ESTABLISHED状态,server白白等待client发送数据,浪费资源
三次握手是TCP安全可靠连接最少握手次数,是防止已失效的连接请求又传送到服务器端,从而产生错误 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:37:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |