TCP协议建立连接的过程及其意义

目录

三次握手

四次挥手

三次握手的意义


  在客户端与服务器传输数据之前,要在两台主机之间先建立连接,然后再传输业务数据。三次握手,就是建立连接的过程,是在传输业务之前,就要先进行。握手好了,才能进行后续的传输。注意:握手只是发送一个不携带业务数据的数据报,不起到任何业务的作用,只是用来“打个招呼”。

三次握手

  建立连接,就是通信双方,各自保存对端的信息。具体完成上述过程,需要经过三次网络交互。三次握手的第一次一定是客户端先发起的。谁先发起,谁就是客户端。如果是“服务器”先发起,它就不应该叫服务器了,而应该叫“客户端”。具体流程如下:

SYN称为同步报文,即一端向另一端主动发送数据时的报文。即把TCP报头中的SYN位置为1,就表示此报文为同步报文。

ACK称为应答报文,表示接收端收到发送过来的报文,再给发送端一个回答。即把TCP报头中的ACK位置置为1。

具体流程就是:客户端先向服务器发送一个SYN,服务器接收到了,就给客户端返回一个ACK,表示收到SYN(客户端向服务器通信是可以的),然后也会向客户端发送一个SYN,用来确定服务器向客户端通信是否成功,客户端如果收到SYN,也会返回一个ACK,告诉服务器,双方通信都是可以的。

注意,中间的两次交互ACK和SYN是可以合并成一个网络数据的。

所谓的合并,就是让这一个TCP数据报,报头中,同时把这两个bit位都置为1

这样就提高了传输的效率。

三次握手的时候,相当于双方各自让对方保存自己的信息,必须两边都把对方的信息保存好,连接才算是建立完成。

四次挥手

  四次挥手就是断开TCP连接的过程,四次挥手整个过程结束之后,TCP连接才会断开。

注:三次握手,一定是客户端先发起第一次请求。而四次挥手则是客户端和服务器都可以主动发起。我们此处以客户端主动提出为例。具体流程如下:

和三次握手的过程基本一致。断开连接,就是通信双方把之前保存对方的信息删除。

四次挥手中间两次能否合并?   常规情况下不能,特殊情况下可以。

这是因为三次握手过程中,SYN和ACK都是内核自动控制发送的。(发送时机是内核控制的,同一时机)服务器收到SYN后,立即返回ACK,也立即返回SYN,同时进行,就可以合并。

而四次挥手过程中,收到FIN后,ACK立即返回,但是FIN并不会立即返回,FIN返回的时机是应用程序代码中调用close方法的时候,才会触发的。

由于两个数据报触发的时机不同,因此就难以合并。

在特殊情况下,TCP触发延时应答机制的时候(要等待一段时间再返回ACK),两个数据报是可以合并的。

三次握手的意义

1)三次握手,相当于“投石问路”,在正式传输业务数据之前,先确认一下通信链路是否通畅。(也相当于TCP可靠传输的一种确认方式,但是只是辅助。核心还是确认应答和超时重传机制)

2)通过三次握手,来确认通信双方,发送能力和接收能力都是正常的。进行三次握手,本质上就是完成上述确认的过程。

3)三次握手的过程中,还需要协商一些必要的参数。有的参数,不是单方面就能确认的,需要双方共同来确定出来。

比如,TCP通信时使用的序号,就是协商出来的。第一次连接和第二次连接,协商出来的起始序号,往往差异很大。

在传输数据的过程中,某个数据报,网络通信的过程中,迷路了(不是丢包)。过了很久才到达服务器,而这个时候,之前的连接已经断开,现在是一个新的连接。服务器收到这样的数据之后,会直接丢弃。

那么如何区分这个数据报是不是上一次连接的数据报?通过序号就可以区分出来。

TCP要避免出现“前朝的剑,斩本朝的官”。每次建立的连接,都是一个新的数字,作为起始序号的。当前本朝的数据,序号一定是沿着我们起始序号往下的数字(不会相差很多)。如果突然收到了一个数据报,序号和当前的起始序号差别非常大,就可以认为这是前朝的数据报了。

一个经典面试题:TCP为啥要要三次握手?/两次行不行?四次行不行?

两次:不行,服务器这边对于通信双方的发送能力和接收能力的验证还没完成。

四次:行。但是没必要。拆开中间的这次交互,虽然不影响tcp的正常功能,但是性能会有损失。

以上,关于TCP,希望对你有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(四十一)第 6 章 树和二叉树(包含双亲的树的孩子链表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

使用rsync同步服务器目录及文件遇到的问题

背景&#xff1a;某天&#xff0c;客户找我倾诉了一个需求&#xff0c;问我是否有方法解决。诉求如下&#xff1a;有一个生产服务器&#xff08;我暂时把它称为主站服务器&#xff09;&#xff0c;还有一个专门用来备份主站服务器上目录和文件的服务器&#xff08;我姑且把它称…

SD-WAN异地组网的优点和应用场景

随着企业不断扩张&#xff0c;建立多个分支机构&#xff0c;异地组网已经成为提高通信效率和资源配置的关键手段。SD-WAN技术的出现为企业带来了更经济实惠、更有优势的异地组网解决方案。那么&#xff0c;如何搭建SD-WAN异地组网呢&#xff1f;我们一起来看看吧&#xff01; S…

免翻,这两款免费神器结合,游戏党的狂欢!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 相信大家都听过Steam&#xff0c;这是一款全球知名的PC端游戏平台&#xff0c;像大家耳熟能详的绝地求生、永劫无间等大热PC端游戏都可以从中下载&#xff0c;当然&#xff0c;还有众多…

跨云厂商的不停机数据库迁移,使用NineData就可以了!

近日&#xff0c;Google私有云发生重大故障&#xff0c;在维护UniSuper客户配置&#xff0c;误删除所有数据&#xff08;包括异地备份数据&#xff09;。【重大故障】澳大利亚所有大学退休金数据被Google误删除&#xff0c;本地云服务总监被直接解雇 其实&#xff0c;所有企业…

工器具管理(基于若依)

文章目录 前言一、工器具管理项目总览 二、入库功能1. 前端1.1 界面展示1.2 具体操作实现1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具入库 三、领用功能1. 前端1.1 界面展示1.2 具体实现操作1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具领用 遇到的问题1. 同一页面展示…

下载wsl 网络出现问题,解决办法

查看能下载的wsl系统时&#xff0c;显示网络出现问题 解决办法&#xff1a;更换网络节点 最终效果&#xff1a;

从零开始详解OpenCV车道线检测

前言 车道线检测是智能驾驶和智能交通系统中的重要组成部分&#xff0c;对于提高道路安全、交通效率和驾驶舒适性具有重要意义。在本篇文章中将介绍使用OpenCV进行车道线的检测 详解 导入包 import cv2 import matplotlib.pyplot as plt import numpy as np读入图像并灰度化…

双点重发布

一&#xff0c;实验要求 二&#xff0c;实验操作 loopback 0&#xff1a; 抓取流量并做策略&#xff0c;导入ospf1 [r1]ip ip-prefix aa permit 1.1.1.0 24 [r1]route-policy aa permit node 10 [r1-route-policy]if-match ip-prefix aa [r1-ospf-1]import-route direct rou…

进程创建-fork

demo1代码状态变迁 demo2代码输出到stdout使用管道 demo1 代码 #include <pthread.h> #include <iostream> #include <unistd.h> int main(int argc, char const *argv[]) {// 1.pid_t x fork();// 2.pid_t y fork();// 3.printf("%d %d\n", x…

PSFRGAN量化:量化技术、实现步骤与常见问题解决

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 背景PyTorch 量化量化流程动态量化训练后量化量化感知训练 Eager 模式量化训练后动态量…

分区恢复:恢复已删除/丢失的硬盘分区数据方法

通常情况下&#xff0c;如果分区正常&#xff0c;您可以直接在Windows资源管理器中看到并访问它。如果启动计算机时在Windows资源管理器中看不到某个分区&#xff0c;则该分区可能会丢失。将有一些解决方案可以帮助您修复和恢复已删除或丢失的硬盘驱动器分区&#xff0c;或从丢…

Spring Boot整合ElasticSearch实战 - 第511篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

Shell编程之函数

Shell函数 将命令序列按格式写在一起可方便重复使用命令序列Shell函数定义. 调用函数的方法 使用Shell函数的优点 使用函数可以避免代码重复使用函数可以将大的工程分割为若干小的功能模块&#xff0c;代码的可读性更强 Shell 函数定义 方式一&#xff1a; function 函数名…

Linux下Telemac-Mascaret源码编译安装及使用

目录 软件介绍 基本依赖 其它可选依赖 一、源码下载 二、解压缩 三、编译安装 3.1 修改环境变量设置文件 3.2 修改配置文件 3.3 编译安装 四、算例运行 软件介绍 TELEMAC-MASCARET是法国电力集团(EDF)的法国国立水利与环境实验室开发的一款研究水动力学和水文学领域的…

【C语言】指针(一)

目录 一、内存 1.1 ❥ 理解内存和地址的关系 1.2 ❥ 编址 二、指针变量 2.1 ❥ 取地址操作符&#xff08;&&#xff09; 2.2 ❥ 指针变量和解引用操作符&#xff08;*&#xff09; 2.3 ❥ 指针变量的大小 三、指针类型的意义 3.1 ❥ 指针的解引用 3.2 ❥ 指针-整数 3…

【MySQL探索之旅】JDBC (Java连接MySQL数据库)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

供应商管理库存用什么软件

库存的管理是一个非常重要的话题&#xff0c;不管是企业还是个人&#xff0c;在日常工作中多多少少都会涉及到库存的管理&#xff0c;那么作为供应商&#xff0c;也是需要对库存进行管理的&#xff0c;因为需要对分销商进行出货&#xff0c;所以库存的有效管理非常重要。 供应商…

【数据结构】堆(Heap)

文章目录 一、堆的概念及结构二、堆的实现1.向上调整算法2.向下调整算法3.堆的创建4.堆的插入5.堆的删除6.堆的其他操作 三、堆的应用1.堆排序2.Top-K问题 一、堆的概念及结构 堆(Heap)是一种特殊的非线性结构。堆中的元素是按完全二叉树的顺序存储方式存储在数组 中。满足任意…

【送书福利第七期】你好!Java(文末送书)

文章目录 编辑推荐内容简介作者简介目录前言/序言 编辑推荐 适读人群 &#xff1a;程序员;相关院校师生 本书以轻松幽默的语言&#xff0c;从零开始介绍Java语言。书名来源于编程语言中最经典的Hello World程序&#xff0c;寓意带读者从入门到精通。 书中每章都设有总结与扩展…