基础:TCP三次握手做了什么,为什么要握手?

news2024/11/14 23:58:15


1. TCP 三次握手在做些什么


在这里插入图片描述

1. 第一次握手

1)握手作用:客户端发出建立连接请求。

2)数据处理:客户端发送连接请求报文段,将SYN位置为1,Sequence Numberx;然后,客户端进入SYN_SEND状态,等待服务器的确认。



2. 第二次握手

1)握手作用:服务端收到客户端请求后,回复报文给客户端,表示客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接。

2)数据处理:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Numberx+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为 1Sequence Number为 y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态。



3. 第三次握手

1)握手作用:客户端收到服务端的确认报文信息后,发送报文给服务端,表示确认收到服务器端同意连接的信号。

2)数据处理:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。


4. 讨论:accept函数调用时,三次握手是否已经完成?

先来看个图:

在这里插入图片描述

  • 服务端首先会调用 listen 函数监听客户端的连接请求。

  • 然后服务端调用 accept 函数阻塞等待取出未决连接队列中的客户端连接。

  • 如果服务端未决连接队列一直为空,这意味着没有客户端和服务器建立连接,那么 accept 就会一直阻塞。

  • 当客户端调用 connect 函数发起连接时,如果完成tcp三次握手,那么 accept 函数会取出一个客户端连接(注意:是已经建立好的连接)然后立即返回。

注意:
accept 函数调用成功,返回的是一个已经完成 tcp 三次握手的客户端连接。如果在三次握手的过程中(最后一步),服务端没有收到客户端的ACK,说明三次握手还没有建立完成,accept 函数依然会阻塞。


2. 为什么要三次握手


谢希仁老师在《计算机网络》中有讲到:
三次握手的目的是:为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误


书中还举了个“已失效的连接请求报文段 ”例子,为了方便阅读,这里对原文做了分段,具体原文描述如下:

“client 发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 server。

本来这是一个早已失效的报文段。但 server 收到此失效的连接请求报文段后,就误认为是 client 再次发出的一个新的连接请求。于是就向 client 发出确认报文段,同意建立连接。

假设不采用 “三次握手”,那么只要 server 发出确认,新的连接就建立了。

由于现在 client 并没有发出建立连接的请求,因此不会理睬 server 的确认,也不会向 server 发送数据(因为client现在是CLOSED状态)。

但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。

这样,server 的很多资源就白白浪费掉了。

采用 “三次握手” 的办法可以防止上述现象发生。
例如刚才那种情况,client 不会向 server 的确认发出确认。server 由于收不到确认,就知道 client 并没有要求建立连接”。

从另外一个角度来讲,三次握手是为了防止服务端一直等待从而浪费资源。

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

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

相关文章

Halcon 3D算子总结整理

halcon 3D包含以下几个模块: 3D Matching(3D匹配)3D Object Model(3D模型)3D Reconstruction(3D重构)3D Transformations(3D转换) 1. 3D Matching 1.1 3D Box3D盒查找器…

分布式搜索引擎elasticsearch专栏一

初识elasticsearch 1.1了解ES elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在码云搜索代码 在电商网站搜索商品 在百度搜索答案 1.1.2.ELK…

【Linux】日常使用命令(三)

文章目录 **cal 命令****date 命令****bc 命令****Linux下玩小游戏**: cal 命令 功能描述: cal 命令用于显示日历。 常用选项: -3:显示前一个月、当前月和下一个月的日历。-y:显示整年的日历。 常用示例: # 示例 1: 显示当前月的日历 cal# …

AR/MR产品设计(二):如何用一双手完成与虚拟对象的自然交互

AR/MR产品设计(二):如何用一双手完成与虚拟对象的自然交互 - 知乎 手是我们与现实世界交互最重要的方式,同样在虚实混合的世界中是最重要的交互方式 在AR/MR/VR的交互中,手势交互会作为XR的重要交互动作,因…

Zookeeper(2)常用命令,ACL权限

文章目录 前言一、zk节点和节点类型节点类型 二、常用命令1.客户端连接2.常用命令help 帮助命令创建节点getsetdeletedeleteall pathstat查看节点的状态setquota增加配额listquota /frame 查看配额delquota删除配额 三、ACL权限控制:1、ZooKeeper权限特性&#xff1…

本地虚拟机平台Proxmox VE结合Cpolar内网穿透实现公网远程访问

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…

Jenkins Windows关闭跨站请求伪造保护(CSRF)

禁用CSRF保护 为了在Jenkins中禁用CSRF保护,请按照以下步骤操作: 定位Jenkins服务 在Windows搜索栏中输入services.msc,然后按Enter键打开服务。在服务列表中找到Jenkins服务。右键点击Jenkins服务,选择属性 可以进入配置目录 …

求解3、4、6自由度仿射变换矩阵

说明:一开始将目光放在了opencv上,发现只有4、6自由度的仿射变换求解,后来发现skimage十分强大。 注:美中不足的是,skimage的实现没有RANSAC。 function:skimage.transform.estimate_transform() ttypeeu…

TT-100K数据集,YOLO格式

TT-100K数据集YOLO格式,分为train、val和test,其中train中共有6793张图片,val中共有1949张图片,test中共有996张图片。数据集只保留包含图片数超过100的类别。共计46类。

【数据挖掘】实验3:常用的数据管理

实验3&#xff1a;常用的数据管理 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握常用的数据管理方法&#xff0c;包括变量重命名、缺失值分析、数据排序、随机抽样、字符串处理、文本分词。 二&#xff1a;实验内容 【创建新变量】 方法1&#xff1a; mydata <…

DockerFile遇到的坑

CMD 命令的坑 dockerfile 中的 CMD 命令在docker run -it 不会执行 CMD 命令。 FROM golang WORKDIR / COPY . ./All-in-one CMD ["/bin/sh","-c","touch /kkk.txt && ls -la"] RUN echo alias ll"ls -la" > ~/.bashrc(不…

Django 解析路由参数

编写带url参数的路由&#xff0c;4种类型参数 app1.url.py from django.urls import path from . import viewsurlpatterns [path(index, views.index, nameindex),path(test, views.test, nametest),path(test_int/<int:id>/, views.test_int, nametest_int),path(te…

多点位移计安装之灌浆步骤

在完成多点位移计的安装调整之后&#xff0c;接下来的步骤是通过回填沙浆来固结结构。使用灌浆设备&#xff0c;将砂浆从灌浆管注入钻孔中&#xff0c;注重从下至上的灌浆方法&#xff0c;确保孔内没有空隙形成。这个过程需要分步进行&#xff0c;同时逐步将灌浆管拉出。为了保…

部署Zabbix Agents添加使能监测服务器_Windows平台_MSI/Archive模式

Windows平台 一、从MSI安装Windows代理,添加Windows Servers/PC 概述 可以从Windows MSI安装包(32位或64位) 安装Zabbix agent 32位包不能安装在64位Windows中 所有软件包都支持TLS,配置TLS可选 支持UI和命令行的安装。 1、下载Agent代理程序,使用Agent2升级版,官网链接如…

mac os 配置两个github账号

1. 清空git全局配置的username和email git config --global --unset user.name git config --global --unset user.emailgit config --list 可以查看是否清空了 2. 定义两个标识符,这两个标识符以后会被用来代替“github.com”来使用。 假设两个账号的邮箱地址分别是a@gmai…

从底层结构开始学习FPGA(0)----FPGA的硬件架构层次(BEL Site Tile FSR SLR Device)

系列目录与传送门 《从底层结构开始学习FPGA》目录与传送门 Xilinx的FPGA&#xff0c;从硬件架构的角度可以划分为6个层次&#xff0c;从底层到顶层依次是&#xff1a; BEL&#xff08;最底层单元&#xff09;SiteTileFSRSLRDevice&#xff08;FPGA芯片&#xff09; 接下来我…

外贸网站文章批量生成器

随着全球贸易的不断发展&#xff0c;越来越多的企业开始关注外贸市场&#xff0c;而拥有高质量的内容是吸引潜在客户的关键之一。然而&#xff0c;为外贸网站生产大量优质的文章内容可能是一项耗时且繁琐的任务。因此&#xff0c;外贸网站文章批量生成软件成为了解决这一难题的…

Day 1.数据结构----单向链表(无头单向链表)

数据结构 如何组织存储数据 程序 数据结构 算法 MVC&#xff1a;软件设计结构 M&#xff1a;数据的管理&#xff08;数据结构&#xff09; V&#xff1a;视图&#xff0c;数据的反映及人机交互 C&#xff1a;逻辑控制 单向链表 有头链表&#xff1a;第一个链表结点中…

微信小程序选择器picker的使用(省市区)

index.wxml picker中的 moderegion模式&#xff0c;这里同element中的select不同的是&#xff0c;不需要自己在绑定数据原&#xff0c;默认就包含了省市区的整体数据 <view class"section"><view class"section__title">省市区选择器</vie…

LVS+Keepalived 高可用群集--部署

实际操作 LVS Keepalived 高可用群集 环境设备 LVS1192.168.6.88 &#xff08;MASTER&#xff09;LVS2192.168.6.87 &#xff08;BACKUP&#xff09;web1192.168.6.188web2192.168.6.189客户端192.168.6.86VIP192.168.6.180 &#xff08;一&#xff09;web服务器 首先配置…