TCP三次握手

news/2024/11/15 7:34:07/

TCP三次握手


文章目录

  • TCP三次握手
    • 1. TCP三次握手过程和状态变迁
      • 1. 准备工作
      • 2. 进行连接
    • 2. 能把三次握手改为两次握手吗?
    • 3. 改为两次握手会出现什么后果?
    • 4. 改为四次握手行不行?
    • 5. TCP第三次握手失败了怎么办?
    • 6. 三次握手是否可以携带数据?
    • 7. SYN泛洪攻击


1. TCP三次握手过程和状态变迁

在这里插入图片描述

TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。

1. 准备工作

TCP服务器先创建传输控制块TCB,时刻准备接收客户进程的连接请求,此时服务器处于LISTEN(监听)状态,客户端处于CLOSE(关闭)状态。

什么是传输控制块?

TCB传输控制块包含了数据发送双方对应的socket信息以及拥有装载数据的缓冲区。
在两个设备在建立连接之前,双方都必须要做一些准备工作,分配内存建立起TCB传输控制块就是连接之前必须要做的工作。

2. 进行连接

第一次握手: 客户端给服务器发送一个同步报文段SYN,并指定客户端的初始序列号ISN(Initial Sequence Number),此时客户端处于SYN_SENT状态。首部的同步位SYN = 1(SYN只是一个比特位,0表示不是SYN,1表示是SYN),初始序列号seq = m。SYN = 1的报文段不能携带任何的数据,但要指定序号。

第二次握手: 服务器接收到来自客户端的同步报文段SYN后,会以自己的SYN报文作为应答, 并且也指定了自己的初始序列号ISN。同时会把客户端的 seq+1 确认序列号ack的值,表示自己已经收到了客户端的同步报文段SYN,此时服务器处于SYN_RCVD的状态。确认报文段中SYN = 1,ACK = 1(ACK也只是一个比特位,0表示不是ACK,1表示是ACK),确认序列号ack = m+1,初始序列号seq = n。

第三次握手: 客户端收到来自服务器的同步报文段SYN之后,会发送一个确认报文段ACK,以服 务器的 seq+1作为ack的值 ,表明自己已经收到来自服务器的同步报文段SYN。客户端进入ESTABLISHED状态,服务器确认报文段ACK之后,也会进入ESTABLISHED状态。确认报文段中,ACK = 1,确认序列号 ack = n+1,序列号 seq = m+1。

双方已经建立起连接,可以正常的发送数据。

2. 能把三次握手改为两次握手吗?

第三次握手是为了防止失效的请求连接到达服务器,让服务器错误的打开连接。

经过三次握手让客户端和服务器互相知道了自己的发送、接收和对方发送、接收都是正常的。

3. 改为两次握手会出现什么后果?

假如客户端发出了连接请求,但因为网络波动导致服务器并没有收到来自客户端的请求连接,于是客户端又重发了一次连接请求,客户端和服务器经过两次握手就建立好连接。双方开始传输数据,数据传输完成以后,双方断开连接。过一段时间后,原本在网络传输中搁置的连接请求到达了服务器。服务器以为是客户端又发出来一次新的连接请求,于是就向客户端发送确认报文段,同意建立连接(两次握手只需要服务器发出确认报文段,就建立好连接)。此时服务器一直在等待客户端发送的数据,一直浪费着系统资源。

4. 改为四次握手行不行?

TCP三次握手原本应该是"四次握手",但是中间的同步报文段SYN和应答报文ACK是可以合在一起的,这两个操作在时间上是同时发送的。

当客户端的到达同步报文段SYN到达服务器的时候,服务器的内核就会第一时间进行应答报文段ACK, 同时也会第一时间发起同步报文段SYN,这两件事情同时触发,于是就没必要分成两次传输,直接一步到位。分成两次反而会更浪费系统资源(需要进行两次的封装和分用)。

5. TCP第三次握手失败了怎么办?

服务器发送了SYN+ACK报文后就会启动一个定时器,等待客户端返回的ACK报文。如果服务器在定时器的范围内没有收到来自客户端的ACK报文,服务器会再次重发SYN+ACK报文。重传的次数可以根据/proc/sys/net/ipv4/tcp_synack_retries来指定,默认为5次。

达到重传的指定次数后仍然没有收到ACK应答,那么一段时间后,服务器自动关闭这个连接。但是client认为这个连接已经建立好了。

如果客户端向服务器发送数据,服务器将以RST包(重置连接)响应。

6. 三次握手是否可以携带数据?

第一次、第二次不可以,第三次可以。

如果第一次握手可以携带数据的话,那么将会使服务器更容易遭受攻击。如果第一次握手携带就大量的数据,那么服务器需要花老长的时间才能对此解析。如果进行重复的发送,那么服务器就会因为系统资源殆尽而崩溃。

第三次握手可以携带数据。第三次握手时客户端处于ESTABLISH状态。对于客户端来说,它已经建立好了连接,并且它已经知道服务器的接收能力和自己的发送能力是正常的,所以可以进行正常的发送数据。

7. SYN泛洪攻击

SYN泛洪攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向服务器发出请求,而被服务器发出的响应响应将永远发送不到目的地,那么就会触发服务器的超时重传机制等待客户端的响应(客户端的IP地址不存在,根本不会进行响应)。那么被服务器在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。

措施:

  1. 降低SYN timeout时间
  2. 采用SYN cookie设置
  3. 增加半连接数
  4. 合理地采用防火墙等外部网络安全设施


http://www.ppmy.cn/news/63146.html

相关文章

X.25,帧中继(FR),ATM三种分组交换系统

X.25、帧中继(FR)、ATM 是流行的三种分组交换系统,它们具有不同的特点。 两个术语: DTE(Data Terminal Equipment) ,数据终端设备,如我们的个人电脑、手机。 DCE(Data Circuit Equipment) ,数据…

中国古代文学发展史

一、先秦神话和诗歌 1、上古神话 所谓神话,是上古时代的人们,对其所接触的自然现象、社会现象所幻想出来的艺术意味的解释和描叙的集体口头创作。上古神话以故事的形式表现了远古人民对自然、社会现象的认识和愿望。 上古神话的主要内容有&#xff1a…

实验五 Java多线程程序设计

实验目的 掌握Runnable接口实现多线程的方法掌握Thread类实现多线程的用法掌握Java语言中多线程编程的基本方法 实验内容 线程接力(45分) 编写一个应用程序,除了主线程外,还有三个线程:first、second和third。firs…

AI 工具合辑盘点(七)持续更新 之 AI 音频生成工具

AI 音频生成工具 想要不亲自录制,快速将文本转换为语音?AI 音频生成工具为你提供数千种语音选择,从“普通人”的声音到模仿演员、政治家或电影角色的合成声音,各种声音应有尽有 🗣 AI 音频生成工具可用于创建商业用途…

移动应用中字体库的设计与实现

随着移动设备的普及,用户对于手机应用的字体需求也越来越高。字体是手机应用的重要组成部分,其美观度和可读性直接影响到用户的使用体验。因此,开发一款优秀的字体库是非常必要的。 在 APPCan 中,开发字体库的支持是非常重要的。下…

前端开发代码规范工具

规范化是前端工程化的一个重要部分。现在,有许多工具能够辅助我们实行代码的规范化,比如你一定知道的 ESLint 和 Prettier。 今天,来聊聊这些工具的工作原理和基本使用,了解它们是如何发挥作用的,以及如何更好地利用这些工具去规…

破解马赛克有多「容易」?

刷短视频时,估计大家都看过下面这类视频,各家营销号争相曝光「一分钟解码苹果笔刷背后内容」的秘密。换汤不换药,自媒体们戏称其为「破解马赛克」,殊不知让多少不明真相的用户建立起了错误的认知,也让苹果笔刷第 10086…

OpenFeign详解

OpenFeign概述 Feign Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端。 Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。 Feign旨在使编写Java Http客户端变得更容易。 Feign是一个声明式WebService客户端&…