TCP/IP协议介绍——三次握手四次挥手

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTPSMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。

TCP/IP协议在一定程度上参考了OSI的体系结构。OSI模型共有七层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次。

(1)应用层、表示层、会话层三个层次提供的服务相差不是很大,所以在TCP/IP协议中,它们被合并为应用层一个层次。 应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。

(2)传输层作为TCP/IP协议的第二层,传输层在整个TCP/IP协议中起到了中流砥柱的作用。且在传输层中,TCP和UDP也同样起到了中流砥柱的作用

(3)网络层:在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。

4)因为数据链路层和物理层的内容相差不多,所以在TCP/IP协议中它们被归并在网络接口层一个层次里。由于网络接口层兼并了物理层数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。

1 通信过程及相关协议

在网络通信的过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。当源主机发出数据时,数据在源主机中从上层向下层传送。源主机中的应用进程先将数据交给应用层,应用层加上必要的控制信息就成了报文流,向下传给传输层。传输层将收到的数据单元加上本层的控制信息,形成报文段、数据报,再交给网际层。网际层加上本层的控制信息,形成IP数据报,传给网络接口层。网络接口层将网际层交下来的IP数据报组装成帧,并以比特流的形式传给网络硬件(即物理层),数据就离开源主机。

在TCP/IP连接中,为了确保双方都能准备好发送和接收数据,会进行一系列的控制信号交换,这其中包括了“三次握手”来建立连接和“四次挥手”来关闭连接。三次握手和四次挥手是TCP协议中建立连接和释放连接的重要过程,它们确保了数据传输的可靠性和连接的正确管理。

TCP/IP协议中,主动发起请求的一端称为『客户端』,被动连接的一端称为『服务端』。不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。

刚开始的时候,服务器和客户端都为CLOSED状态。在通信开始前,双方都得创建各自的传输控制块(TCB)。

服务器创建完TCB后遍进入LISTEN状态,此时准备接收客户端发来的连接请求。

2 三次握手(Three-way Handshake)

三次握手用于建立TCP连接,确保发送方和接收方都准备好进行数据传输。以下是三次握手的步骤:

第一次握手

客户端向服务端发送连接请求报文段。该报文段的头部中同步SYN=1,确认ACK=0,同时选择一个初始序号seq=x。请求发送后,客户端便进入SYN-SENT状态,等待服务器确认

SYN=1,ACK=0表示该报文段为连接请求报文

x为本次TCP通信的字节流的初始序号

SYN=1的报文段不能有数据部分,但要消耗掉一个序号

第二次握手

服务器收到连接请求SYN报文之后,必须确认客户的SYN(SYN=1,ACK=1,ack=x+1,seq=y),同时自己也发送一个SYN包(SYN=1,seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。

SYN=1,ACK=1表示该报文段为连接同意的应答报文

seq=y表示服务端作为发送者时,发送字节流中的第一个字节序号

ack=x+1表示服务端希望客户端发送的下一个数据报初始序号是从x+1开始

第三次握手

客户端收到服务器连接统一应答SYN+ACK包,向服务器发送确认包(ACK=1,ack=y+1,seq=x+1,acknum=y+1),此包发送完毕,表示服务端发来的连接同意应答已经成功收到。客户端和服务器进入ESTABLISHED(代表成功打开一个TCP/IP连接,数据可以传送给用户)状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

3 四次挥手(Four-way Handshake)

TCP连接的释放一共需要四步,这也是四次挥手的由来。

TCP连接是双向的,在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。确保发送方和接收方都关闭了数据传输的通道。以下是四次挥手的步骤:

第一次挥手

客户端数据发送完成,则它向服务端发送连接释放请求。该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u,用来关闭客户端到服务器的数据传送。此时,客户端将进入FIN-WAIT-1状态。FIN报文段即使不携带数据,也要消耗一个序号。

FIN=1表示该报文段是一个连接释放请求

seq=u,u-1是客户端向服务端发送的最后一个字节的序号

第二次挥手

服务器收到客户端连接释放报文FIN后,发送一个ACK给客户端,报文头ACK=1ack=u+1确认序号为收到序号+1,并且带上自己的序列号seq=v。服务器进入CLOSE_WAIT状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务器若发送数据,客户端仍要接受。这个状态还要持续一段时间,也就是整个CLOSE_WAIT状态持续的时间。

ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答

seq=v,v是服务端释放应答报文段第一个字节序号

ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节

客户端收到该应答后,进入FIN-WAIT-2状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

第二次挥手完成后,客户端到服务端方向的连接已经释放,服务端不会再接收客户端的数据,客户端也没有数据要发送了。但服务端到客户端方向的连接仍然存在,服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

第三次挥手

服务端将最后的数据发送完毕后,就向客户端发送连接释放报文FIN,用来关闭服务器到客户端的数据传送,其报文头包含:FIN=1,ack=u+1,由于在CLOS-WAIT状态,服务端很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器进入LAST_ACK状态,等待客户端的确认

第四次挥手

客户端收到服务器的连接释放报文FIN后,向服务端发出确认应答,报文头:ACK=1,ack=w+1,而自己的序列号是seq=u+1,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认后,服务器进入CLOSED状态,客户端等待一段时间后也进入了CLOSED状态。

注意,客户端最后还要等待一段时间,这就是TIME_WAIT状态。客户端等待一段时间是为了确保服务器收到了ACK,如果此时服务器没有收到ACK则可以重传。这个等待时间通常是2MSL(最长报文段寿命)的时间。当客户端撤销相应的TCB后,就进入了CLOSED状态。服务器只要收到了客户端发来的ACK报文,就撤销TCB,进入CLOSED状态。

4 总结

三次握手:通过三次报文段的交换,客户端和服务器建立了可靠的连接,并相互确认了初始序列号。

四次挥手:在数据传输结束后,通过四次报文段的交换,客户端和服务器正确地释放了连接,并确保了双方都已收到对方的确认信息。

序列号:在TCP通信中,序列号用于标识每个报文段,确保数据的顺序性和完整性。

ACK和SYN标志位:ACK标志位用于确认收到的报文段,SYN标志位用于建立连接时的同步。

TIME_WAIT状态:客户端在关闭连接后会进入TIME_WAIT状态,等待一段时间以确保服务器收到了ACK报文段,从而避免“已失效的连接请求”问题。

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

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

相关文章

Capture One Pro 23:专业 Raw 图像处理的卓越之选

在当今的数字摄影时代,拥有一款强大的图像处理软件至关重要。而 Capture One Pro 23 for Mac/Win 无疑是其中的佼佼者,为摄影师和图像爱好者带来了前所未有的体验。 Capture One Pro 23 以其出色的 Raw 图像处理能力而闻名。它能够精准地解析和处理各种…

Priority_queue

一、priority_queue的介绍和使用 1.1 priority_queue的介绍 1.优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。 2.优先队列类似于堆, 在堆中可以随时插入元素, 并且只能检索最大堆…

React中使用 ts 后,craco库配置别名时需要注意什么?

文章目录 前言编译报错如下解决方式总结 前言 我们都知道craco库可以用来覆盖react配置,如设置别名等。但是在项目使用 Typescript 后,我们需要额外配置,否则会造成编译报错。 详细craco配置可以查看之前文章: 项目初始化与配置…

SpringBoot:SpringBoot中使用Redisson实现分布式锁

一、前言 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。 刚好项目中需要使用到分布式锁,记录一下Redisson是如何使用分布式…

PHP 页面报错Warning</b>: Cannot modify header information - headers already sent by

先给出解决方案再解释,如果急着用就不用看解释了。 解决方案一:保存php文件编码为utf-8无BOM码,具体操作可以用notepad等编辑器完成,把 sesstion_start() 放在文档所有输出(包括html标签和php的输出语句,具…

场外个股期权标的有哪些?

今天带你了解场外个股期权标的有哪些?场外个股期权是一种金融衍生品,它不在交易所内进行交割,而是在交易所以外的场所进行交易的股票期权合约。 场外个股期权标的有哪些? 场外个股期权的标的通常包括A股市场上的融资融券标的&…

掌握Django文件处理:一步步构建上传功能

创建模型 首先先进入我们的testsite项目下,打开members/models.py文件,先添加我们保存文件的数据模型: class Document(models.Model):name models.CharField(max_length255)file models.FileField(upload_touploads/) # uploads/ 是文件…

批量提取 Word 文档中的全部图片

步骤 1、打开 WinRAR 任选一个现成的压缩包双击打开 WinRAR ,或从开始菜单打开 WinRAR 2、直接把要提取图片的 Word 文档拖入 WinRAR 菜单区域 1 → 2 → 3,WinRAR 资源管理目录中的 media 就是该 Word 文档所要提取的全部图片所在文件夹 按住&#x…

【Vue】异步更新 $nextTick

文章目录 一、引出问题二、解决方案三、代码实现 一、引出问题 需求 编辑标题, 编辑框自动聚焦 点击编辑,显示编辑框让编辑框,立刻获取焦点 即下图上面结构隐藏,下面结构显示,并且显示的时候让它自动聚焦。 代码如下 问题 “…

Vue3:eachars 折线图 数据不联动 和 tooltip: trigger: ‘axis‘ 不生效,不提示数据

问题1: 点击折线图的头部数据(Email、UnionAds等) 下面数据线不联动问题 问题2:下图是没有提示数据的Demo 这是echars官网的提示数据图 3.解决办法 (1)检查是否设置:trigger:axi…

SELinux深度解析:安全增强型Linux的探索与应用(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、SELinux的工作机制 1、SELinux的三种状态:Pe…

在k8s中部署Kafka高可用集群超详细讲解

🐇明明跟你说过:个人主页 🏅个人专栏:《数据流专家:Kafka探索》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Kafka简介 2、为什么在Kubernetes中部署Kafka 二、…

决策树Decision Tree

目录 一、介绍发展优点缺点基本原理 二、熵1、熵2、条件熵3、信息增益4、信息增益率 三、基尼系数四、ID3算法1、建树过程2、优点3、缺点 五、C4.51、二分法处理连续变量1、流程:2、示例 2、缺点 六、CART1、连续数据处理2、离散数据处理3、CART回归原理1、均方误差…

医学编码系统说明

简介 流程说明 登录系统 在浏览器中访问FNEHR的站点,输入医院编号、用户和密码,选择“Other”,点击“Login”按钮,登录系统: 登录后,在左边显示系统的菜单: 系统设置 医院设置 点击左侧的“Acc…

尚硅谷2024新版3小时速通Docker教程

尚硅谷2024新版3小时速通Docker教程 百度网盘:https://pan.baidu.com/s/1SncgHbdJehvZspjcrrbLSw?pwd6c27

【C语言】详解函数(下)(庖丁解牛版)

文章目录 1. 前言2. 数组做函数形参3. 函数嵌套调用和链式访问3.1 嵌套调用3.2 链式访问 1. 前言 详解C语言函数(上)的链接:http://t.csdnimg.cn/EGsfe 经过对函数的初步了解之后,相信大家已经对C语言标准库里的函数已经有初步的认知了,并且还学会了如…

【工具箱】嵌入式系统存储芯片——CS创世 SD NAND

大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空航天的设备上都会用到MCU.市面上目前几个主流厂商有意法半导体(其中最经典的一款就是STM32系列)…

足球俱乐部管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教练管理,用户管理,合同信息管理,赛事管理 前台账户功能包括:系统首页,个人中心,公告信息,赛事…

C++ STL - 容器

C STL(标准模板库)中的容器是一组通用的、可复用的数据结构,用于存储和管理不同类型的数据。 目录 零. 简介: 一 . vector(动态数组) 二. list(双向链表) 三. deque&#xff08…

Ansible部署 之 zookeeper集群

简介 Ansible是近年来越来越火的一款轻量级运维自动化工具,主要功能为帮助运维实现运维工作的自动化、降低手动操作的失误、提升运维工作效率。常用于自动化部署软件、自动化配置、自动化管理,支持playbook编排。配置简单,无需安装客户端&am…