计算机网络——三次握⼿、四次挥手

news2024/12/23 14:35:55

TCP 三次握手在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1、第⼀个SYN报⽂
客户端随机初始化序列号client_isn,放进TCP⾸部序列号段,
然后把SYN置1。把SYN报⽂发送给服务端,表⽰发起连接,
之后客户端处于SYN-SENT状态。

2、第⼆个报⽂SYN+ACK报⽂
服务端收到客户端的SYN报⽂,把⾃⼰的序号server_isn放进TCP⾸部序列号段,
确认应答号填⼊client_ins + 1,把SYN+ACK置1
SYN+ACK报⽂发送给客户端,然后进⼊SYNRCVD状态。

3、第三个报⽂ACK
客户端收到服务端报⽂后,还要向服务端回应最后⼀个应答报⽂

  • ⾸先应答报⽂ TCP ⾸部 ACK 标志位置为 1 ,
  • 其次「确认应答号」字段填⼊ server_isn + 1
  • 最后把报⽂发送给服务端,
    这次报⽂可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。
    服务器收到客户端的应答报⽂后,也进⼊ ESTABLISHED 状态


为什么需要三次握⼿?

总结:

  1. 三次握⼿才可以阻⽌重复历史连接的初始化(主因)
  2. 三次握⼿才可以同步双⽅的初始序列号
  3. 三次握⼿才可以避免资源浪费

解释:
1、阻⽌重复历史连接的初始化(主因)

  1. 当旧的SYN报⽂先到达服务端,服务端回⼀个ACK+SYN报⽂
  2. 客户端收到后可以根据⾃⾝的上下⽂,判断这是⼀个历史连接(序列号过期或超
    时),那么客户端就会发送 RST 报⽂给服务端,表⽰中⽌这⼀次连接。

两次握⼿在收到服务端的响应后开始发⽣数据,不能判断当前连接是否是历史连接。

三次握⼿可以在客户端准备发送第三次报⽂时,客户端因有⾜够的上下⽂来判断当前连接是否是历史连接。

在这里插入图片描述

客户端连续发送多次 SYN(都是同一个四元组)建立连接的报文,在网络拥堵情况下:

  • 一个「旧 SYN 报文」比「最新的 SYN」 报文早到达了服务端,那么此时服务端就会回一个 SYN + ACK 报文给客户端,此报文中的确认号是 91(90+1)。
  • 客户端收到后,发现自己期望收到的确认号应该是 100 + 1,而不是 90 + 1,于是就会回 RST 报文。
  • 服务端收到 RST 报文后,就会释放连接。
  • 后续最新的 SYN 抵达了服务端后,客户端与服务端就可以正常的完成三次握手了。

上述中的「旧 SYN 报文」称为历史连接,TCP 使用三次握手建立连接的最主要原因就是防止「历史连接」初始化了连接。


如果是两次握手连接,就无法阻止历史连接,那为什么 TCP 两次握手为什么无法阻止历史连接呢?

我先直接说结论,主要是因为在两次握手的情况下,服务端没有中间状态给客户端来阻止历史连接,导致服务端可能建立一个历史连接,造成资源浪费

你想想,在两次握手的情况下,服务端在收到 SYN 报文后,就进入 ESTABLISHED 状态,意味着这时可以给对方发送数据,但是客户端此时还没有进入 ESTABLISHED 状态,

  • 假设这次是历史连接,客户端判断到此次连接为历史连接,那么就会回 RST 报文来断开连接,
  • 而服务端在第一次握手的时候就进入 ESTABLISHED 状态,所以它可以发送数据的,但是它并不知道这个是历史连接,它只有在收到 RST 报文后,才会断开连接。

在这里插入图片描述
可以看到,如果采用两次握手建立 TCP 连接的场景下,服务端在向客户端发送数据前,并没有阻止掉历史连接,导致服务端建立了一个历史连接,又白白发送了数据,妥妥地浪费了服务端的资源。

因此,要解决这种现象,最好就是在服务端发送数据前,也就是建立连接之前,要阻止掉历史连接,这样就不会造成资源浪费,而要实现这个功能,就需要三次握手。

所以,TCP 使用三次握手建立连接的最主要原因是防止「历史连接」初始化了连接。

2、同步双⽅的初始序列号
TCP 协议的通信双⽅, 都必须维护⼀个「序列号」, 序列号是可靠传输的⼀个关键因素。

  • 接收端可以去除重复数据。
  • 接收端可以按照序列号顺序接收。
  • 标识发送的数据包,哪些已经被收到。

这样⼀来⼀回,才能确保双⽅的初始序列号能被可靠的同步

3、避免资源浪费。

  1. 两次握⼿会造成消息滞留情况下,服务器重复接受⽆⽤的连接请求 SYN 报⽂,⽽造成重复分配资源。
  2. 只有两次握⼿时,如果客户端的SYN请求连接在⽹络中阻塞,客户端没有收到服务端的ACK报⽂,会重新发送SYN。
  3. 由于没有第三次握⼿,服务器不清楚客户端是否收到了⾃⼰发送的建⽴连接的
    ACK 确认信号,所以每收到⼀个 SYN 就只能先主动建⽴⼀个连接

过程

  1. 客户端发送第⼀个报⽂,携带客户端初始序列号的SYN报⽂。
  2. 服务器发送第⼆个报⽂,携带服务器初始序列号的ACK + SYN的应答报⽂
    表⽰收到客户端的SYN报⽂。
  3. 客户端发送第三个报⽂,携带服务器的ACK应答报⽂。

TCP 四次挥手过程

在这里插入图片描述

断开过程

  1. 假设客户端打算关闭连接,发送⼀个TCP⾸部FIN被置1的FIN报⽂给服务端
  2. 服务端收到以后,向客户端发送ACK应答报⽂
  3. 等待服务端处理完数据后,向客户端发送FIN报⽂
  4. 客户端接收到FIN报⽂后回⼀个ACK应答报⽂。
  5. 服务器收到ACK报⽂后,进⼊close状态,服务器完成连接关闭
  6. 客户端在经过 2MSL ⼀段时间后,⾃动进⼊close状态,客户端也完成连接的关闭。

为什么挥⼿需要四次?

关闭连接时,客户端发送FIN报⽂,表⽰其不再发送数据,但还可以接收数据

客户端收到FIN报⽂,先回⼀个ACK应答报⽂,服务端可能还要数据需要处理和发送,

等到其不再发送数据时,才发送FIN报⽂给客户端表⽰同意关闭连接

从上⾯过程可知:

  1. 服务端通常需要等待完成数据的发送和处理,所以服务端的ACK和FIN⼀般都会分开发送,从⽽⽐三次握⼿导致多了⼀次

  2. 第⼀次ACK应答报⽂可以省略,因为下⼀个报⽂段携带了ACK信息,ACK是否出现取决于延迟确认特性。

  3. 延迟确认:即接收⽅收到包后,如果暂时没有内容回复给发送⽅,则延迟⼀段时间再确认,假如在这个时间范围内刚好有数据需要传输,则和确认包⼀起回复。这种也被称为数据捎带。延迟确认只是减轻⽹络负担,未必可以提升⽹络性能,有些情况下反⽽会影响性能。

为什么 TIME_WAIT 等待的时间是 2MSL?

  1. MSL是 Maximum Segment Lifetime,报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最长时间,超过这个时间报⽂将被丢弃。

  2. 等待MSL两倍:⽹络中可能存在发送⽅的数据包,当这些发送⽅的数据包被接收⽅处理后又会向对⽅发送响应,所以⼀来⼀回需要等待 2 倍的时间

  3. 2MSL 的时间是从客户端接收到 FIN 后发送 ACK 开始计时的
    如果在 TIME-WAIT时间内,因为客户端的 ACK 没有传输到服务端,客户端又接收到了服务端重发的FIN 报⽂,那么 2MSL 时间将重新计时。

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

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

相关文章

文件IO_打开和关闭文件(附Linux-5.15.10内核源码分析)

目录 1.打开文件 1.1 函数原型介绍 1.1.1 open函数 1.1.2 creat函数 1.1.2 openat函数 1.2 内核源码分析 1.3 函数原型区别 2.关闭文件 2.1 函数原型介绍 2.1.1 close函数 2.2 内核源码实现 1.打开文件 1.1 函数原型介绍 1.1.1 open函数 #include <sys/types.…

【DC系列07】DC-7靶机复盘

【DC系列07】DC-7靶机复盘 这个靶机同样是直接给ip的 这个靶机在进入shell前是没有破绽的&#xff0c;并且进入主页面以后也并没有什么漏洞。如果不搜索一下这个靶机的解法很难去下一步操作。 在github.com上搜索dc7user然后选择code&#xff0c;里面可以找到dc7一个远程登陆…

WPS/Office Excel 方向键无法切换表格

问题&#xff1a;WPS/Office Excel 方向键无法切换表格。 分析&#xff1a;键盘开启了Scroll Lock&#xff0c;导致Excel开启了滚动锁定。滚动锁定如图: 解决&#xff1a;再次按下Scroll Lock键解锁即可。&#xff08;Scroll Lock键在键盘右侧上方。&#xff09;

CSS实现底部弧度效果

效果图如下 说明&#xff1a; 使用伪类处理&#xff0c;先将元素自身定位为relative; 伪类设置content:‘’&#xff0c;并相对定位为absolute&#xff0c;通过设置left ,top 值&#xff0c;改变width和和left来调节弧度。宽度需大于100%&#xff0c;将left设为&#xff08;100…

AWS 中文入门开发教学 48- S3 - 静态网站之王, 快速建立网站之首选

知识点 使用 S3 快速搭建静态网页网站使用 Route 53 服务解析网站域名实战演习 设计域名 Name: blog.deeplearnaws.ml建立同名的 S3 存储桶 上传网页文件到存储桶当中 ACL设置为所有人可读 设置存储桶为静态网站公开 进入属性,

索引相关操作

1、建立一个utf8编码的数据库test1 create database test1;2、建立商品表goods和栏目表category 按如下表结构创建表&#xff1a;存储引擎engine myisam 字符集charset utf8 mysql> desc goods;-------------------------------------------------------------| Field …

【试用科研好物】GPT辅助科研神器?AI助力科研?ChatPDF、有道速读

前言 近期需要阅读的论文很多&#xff0c;偶然间在微博刷到许多人推荐科研利器ChatPDF和有道速读。使用后的结论是不推荐使用&#xff0c;下面分别给出理由。 使用&评价 网页版&#xff0c;无需安装任何东西&#xff0c;两款都支持中文。 ChatPDF有道速读 下面太长不看…

vue项目优化问题

文章目录 1、常见的系统优化方案2、非常见的优化手段(但同样是很有用的)1、组件懒加载2、组件代码分割3、函数编译4、组件通讯 1、常见的系统优化方案 图片懒加载、图片压缩、路由组件按需加载(异步加载)、减少console、if判断、cdn加速、axios统一管理请求、v-if与v-show依据…

面试算法题—编程题2023

面试算法题—编程题2023 一、冒泡排序二、选择排序三、快速排序四、其它排序 最近在看一些面试题&#xff0c;发现很多面试过程中都会要求手写排序编程题&#xff0c;经过一番查找整理&#xff0c;可以快速学习和使用相关排序算法题&#xff0c;通俗易懂&#xff0c;手撕代码吊…

6月城市之星领跑活动获奖名单已出炉

经过一个月的角逐&#xff0c;6月城市之星领跑活动上榜名单终于出炉啦&#xff0c;本次城市赛道是根据最后登陆且6月份有入围博客之星用户的城市一共368个城市&#xff0c;城市人数划分区间具体情况如下&#xff1a; 200以上城市2个&#xff0c;其中有一些博主的城市由于未获取…

小程序测试笔记——你想知道的知识全都有

目录 1、你知道测试小程序跟普通的APP有什么异同么&#xff1f; 原生APP 小程序 2、你真真切切的了解什么是小程序么&#xff1f; 3、然后给你一个小程序&#xff0c;你要如何开展测试呢&#xff1f; 一、为什么要学习小程序测试? 二、微信小程序是什么? 概念&#xf…

FTP挂载网络磁盘

项目中使用存储阵列或NAS等网络存储作为文件存储地址&#xff0c;服务器与存储之间通过网络进行传输&#xff0c;当我把ftp指向的存储地址修改为网络磁盘时&#xff0c;会出现550等读取不到目录问题&#xff1b;以下为解决方案&#xff1a; 1.在服务器中新增windows用户&#x…

Vue3+Vite+Pinia+Naive后台管理系统搭建之五:Pinia 状态管理

前言 如果对 vue3 的语法不熟悉的&#xff0c;可以移步Vue3.0 基础入门&#xff0c;快速入门。 Pinia 详情可移步官网参看&#xff1a;Pinia 官网 1. 安装依赖 yarn add pinia // or npm install pinia 2. 构建 src/store/user.js // src/store/user.js import { defineSt…

fiddler在软件测试中的使用(详细版)

目录 1.抓包&#xff0c;辅助定位bug&#xff08;web中类似谷歌浏览器F12开发调试工具&#xff09; 1.1APP抓包分析 2.构建需要的测试场景&#xff08;通过拦截篡改接口的请求或返回&#xff09; 2.1断点篡改请求参数 2.1.1如果需要篡改请求参数&#xff0c;则需要在请求前…

IO流、IO模型

一、IO流分类 1.按照流的方向&#xff1a;输出流和输入流 2.按照流的角色&#xff1a;节点流和处理流 3.按照操作单元&#xff1a;字节流和字符流 二、基类 1.字节输入流和输出流&#xff1a; InputStream、OutputStream 2.字符输入流和输出流&#xff1a;Reader、Writer 三、为…

连锁门店运营管理系统有哪些?应该如何选择?

连锁门店运营管理过程中会面临很多难点&#xff0c;比如不同门店之间很难做到统一管理、销售数据无法实时同步、库存调拨效率低&#xff0c;很容易出现库存不足或过剩的情况... 选择一套合适的连锁门店管理系统&#xff0c;连锁店可以实时获得各个门店的销售、库存和其他关键数…

安达发|APS项目对企业有哪些要求?

尽管APS技术存在相当多的优点&#xff0c;但可以为企业带来其他IT技术以往所不及的收益和管理助力&#xff1b;但这是以APS项目成功部署并发挥作用为前提的。由于APS项目的特性要求较高&#xff0c;目前能够将APS技术运用于运筹和生产活动的企业还非常少。原因有很多&#xff0…

【CNN记录】pytorch中BatchNorm2d

torch.nn.BatchNorm2d(num_features, eps1e-05, momentum0.1, affineTrue, track_running_statsTrue, deviceNone, dtypeNone) 功能&#xff1a;对输入的四维数组进行批量标准化处理&#xff08;归一化&#xff09; 计算公式如下&#xff1a; 对于所有的batch中样本的同一个ch…

贯穿AI生命周期各阶段的道德问题:数据标注部分

随着AI在市场上得到更广泛的采用并被作为各种用例中的工具实现&#xff0c;更多的挑战也应势而生。AI项目遇到了一个长期的关键问题&#xff0c;即合乎道德的AI以及数据中的偏见处理。在AI发展初期&#xff0c;这个问题并不明显。 数据偏见是指数据集中某个元素的代表权重过大或…

Sui开发者网络、测试网和主网的异同之处

Sui在主网正式上线前&#xff0c;发布了两波测试网以及独立的开发者网络供开发者和项目方进行测试。主网与这些网络在部分功能和参数方面有些许不同&#xff0c;本文盘点了这三个网络在功能和参数方面的异同。查看网络信息及更新计划 验证节点集 Sui网络由一组独立的验证节点…