3-10 图文并茂解释TCP/IP 3次握手4次断开

news2024/11/15 13:46:25

文章目录

  • 前言
  • TCP报文首部
  • TCP数据传输
  • 3次握手
  • 4次断开

前言

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



TCP报文首部


请添加图片描述


源端口和目的端口
各占2个字节,分别写入源端口和目的端口;

序号
占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始;

确认号
占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据;

数据偏移
占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远;

保留
占6位,保留今后使用,但目前应都位0;

紧急URG
当URG=1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据;

确认ACK
仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;

推送PSH
当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1;

复位RST
当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;

同步SYN
在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1;

终止FIN
用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;

窗口
占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;

检验和
占2字节,校验首部和数据这两部分;

紧急指针
占2字节,指出本报文段中的紧急数据的字节数;

选项
长度可变,定义一些其他的可选的参数。


TCP数据传输

TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;而网络访问层,也叫网络接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。


请添加图片描述


3次握手

TCP 三次握手建立连接,是 TCP 数据传输的必要过程。流程大致分为以下几步:

刚开始,客户端(Client)和服务器(Server)都处于 CLOSED 状态;

服务端创建传输控制块(TCB),时刻准备客户进程的连接请求,处于 LISTEN 监听状态;

请添加图片描述

第一次握手:客户端将 TCP 报文的标志位 SYN 置为1,随机产生一个序号值 seq=x 保存在 TCP 首部的序列号字段里,然后指明客户端打算连接的服务器端口,并将数据包发送给服务器端。发送完毕后,客户端进入 SYN-SEND 状态;

第二次握手:服务端收到数据包后,由标志位 SYN=1 确认了客户端要请求建立连接。于是,服务端将 TCP 报文的标志位 SYN 和确认应答号 ACK 都置为 1,请求号 ack = x+1(表示序列号为 x 的消息已经接收了,下一次传输的序列号为 x+1),再随机产生一个序号值 seq=y,然后将该数据包发送给客户端以确认连接请求。这时,服务端进入 SYN-RCVD 状态;

第三次握手:客户端收到服务端的确认后,检查 ack 是否为 x+1,ACK 是否为1,如果正确则将确认应答 ACK 置为 1,请求号 ack=y+1(表示序列号为 y 的消息已经接收了,下一次传输的序列号为 y+1),并将数据包发送给服务器。服务器端检查 ack 是否为 y+1,ACK 是否为 1,如果正确则成功建立连接。客服端和服务器都进入 ESTABLISHED 状态,三次握手结束,客户端和服务器可以开始传输数据了。


请添加图片描述

3次握手动图

3次握手比喻:

  1. Client: 你好,吃了吗?
  2. Server: 吃了。你吃了吗?
  3. Client: 吃了,还很撑!


4次断开

当客户端(Client,以下简称C端)和服务器(Server,以下简称S端)都是连接状态时:

请添加图片描述

第一次挥手:C 端不想再进行数据传输了,就发起一条挥手请求,将 TCP 报文的标志位 FIN=1,设置序列号 seq 为随机数 x。此时,C 端进入 FIN_WAIT_1 状态;

第二次挥手:S 端收到 C 端的 FIN 数据报,知道 C 端不再发送数据了。于是返回一条 ACK 确认消息,表示同意 C 端的关闭请求,然后 S 端进入 CLOSE_WAIT 状态。当 C 端收到 S 端的确认消息后,进入 FIN_WAIT_2 状态,等待 S 端的连接结束;

第三次挥手:S 端发送数据完毕后,给 C 端发送标志位为 FIN 的报文段,请求关闭连接,并进入 LAST_ACK 状态;

第四次挥手:当 C 端收到 FIN 报文段之后,再向 S 端回复标志位为 ACK 的应答消息,然后进入 TIME_WAIT 状态,当等待 2MSL(报文的最大存活时间,后面会详细讲解) 后还没收到回复,证明 S 端已经正常关闭,于是 C 端进入CLOSED 状态。而 S 端在收到 C 端的 ACK 报文段以后,就关闭连接,直接进入 CLOSED 状态。


在这里插入图片描述

4次挥手动图

4次挥手比喻:

  1. Client: 分手!
  2. Server: 分就分,等等,我把账算完。
  3. Server: 账算完了,后会无期。
  4. Client: 后会无期!


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

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

相关文章

Vue基本指令:v-on,v-if,v-mode

目录 Vue基本指令 1、v-text指令:设置标签的文本值 2、v-html指令:设置标签的innerHTML 3、v-on指令:为元素绑定事件 4、v-on:传参 5、v-show指令:根据真假切换元素的显示状态 6、v-if指令:根据表达式的真假切换…

前端学习---

1.简单且必须掌握的 1.MVVM是什么 将MVC中的V变为了MVVM,实现了双向绑定。其中VM就是vue的作用,这样页面的动态化可以通过vue来操作,而不是页面直接与后端操作,实现了前后端的分离 2.为什么vue采用异步渲染 ? 调…

【云原生】k8s集群资源监控平台搭建—20230227

1. 监控指标 集群监控 ①节点资源利用率 ②节点数 ③运行pods pod监控 ①容器指标 ②应用程序 2. 监控平台 1. Prometheus 开源的;集成了很多功能,比如监控、报警、数据库等;以HTTP协议周期性的抓取被监控组件的状态以及相应的数据&…

HarmonyOS Connect “Device Partner”专场FAQ来啦

Device Partner平台是面向AIoT产业链伙伴的一站式服务平台,伙伴可以通过平台获取最新的产品、服务与解决方案,实现智能硬件产品的开发、认证、量产和推广等全生命周期的管理,加入HarmonyOS Connect生态,共同提升消费者的智慧生活体…

就业天花板?33% 程序员月薪达到 5 万元以上

2023年,随着互联网产业的蓬勃发展,程序员作为一个自带“高薪多金”标签的热门群体,被越来越多的人所关注。 在过去充满未知的一年中,他们的职场现状发生了一定的改变。那么,程序员岗位的整体薪资水平、婚恋现状、职业…

主流消息队列RocketMq,RabbitMq比对使用

首先整理这个文章是因为我正好有机会实战了一下rocketmq,阿里巴巴的一个开源消息中间件。所以就与以往中rabbitmq进行小小的比较一下。这里主线的根据常见面试问题进行整理。1.消息队列常用的场景1.1.削峰例如我们做得考试系统中,用户通过人脸识别登录系…

Java查漏补缺(16)网络编程概述、网络通信要素、谈传输层协议:TCP与UDP协议、网络编程API、TCP网络编程、UDP网络编程、URL编程

Java查漏补缺(16)网络编程概述、网络通信要素、谈传输层协议:TCP与UDP协议、网络编程API、TCP网络编程、UDP网络编程、URL编程本章专题与脉络1. 网络编程概述1.1 软件架构1.2 网络基础2. 网络通信要素2.1 如何实现网络中的主机互相通信2.2 通…

【全网最细PAT题解】【PAT乙】1024 科学计数法

题目链接 1024 科学计数法 题目描述 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [-][1-9].[0-9]E[-][0-9],即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对…

Linux下安装Redis(云服务器)

一、选择自己需要下载的版本后,右击选择复制链接,然后利用命令进行下载,进入Xshell控制台,输入wget将复制的链接粘帖上 命令如下: wget https://download.redis.io/releases/redis-6.0.5.tar.gz 解压安装Redis解压 将下…

Pure Admin - 基于 Vue3 / Vite / Pinia 等主流技术栈打造的免费开源中后台管理系统,包含前后端源码

有一段时间没有推荐 admin 管理系统了,今天推荐一个完整度很高,教程详细,很容易上手的 admin 框架。 关于 Pure Admin Pure Admin 是一款开源免费且开箱即用的中后台管理系统模版,内置超多页面模板以及基于 node.js 的后端开发源…

金融信创步入快车道,应“需”而生的监控易运维方案为国产化助力

在我国“28N”信创三步走战略中,金融信创赫然名列其中,成为最早践行信创理论与实操的行业之一。截止到目前,金融信创渗透率业已仅次于党政部门,位列“8”大重点行业之首。超快的发展速度,让金融信创较早的步入“买方市…

Android 应用启动速度优化问题分析

在移动端程序中,用户希望的是应用能够快速打开。启动时间过长的应用不能满足这个期望,并且可能会令用户失望。轻则鄙视你,重则直接卸载你的应用。因此,App打开的速度的快慢是影响用户体验的重要因素之一。本篇文章主要为大家分享&…

电信网上营业厅用户自服务系统的设计与实现

技术:Java、JSP等摘要:本文在对目前各种网上营业厅的功能原理进行了分析后,在山西省移动公司实习期间,为保证电信网上营业厅系统中心数据库的安全,设计了一个具有三层结构的网上营业厅,以web页面方式实现了…

设计模式(十三)----结构型模式之桥接模式

1 概述 现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系: 我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。 试…

linux_实操篇

linux_实操篇]六、Linux远程登录6.1为什么linux要远程登录6.2远程登录linux-Xshell76.3远程上传下载文件-Xftp76.3.1解决中文乱码七、vi与vim编辑器7.1vim快速入门7.1.1基本介绍7.1.2 vi与vim常用三种模式7.1.3vi和vim基本使用7.2vi和vim快捷键7.2.1 快捷键练习八、linux的开机…

Linux MISC 驱动实验

目录 一、MISC 设备驱动简介 misc_deregister 函数 二、MISC驱动编写 1、编写框架 2、platform结构体对应的函数 2、宏定义和miscbeep设备结构体 3、定义miscdevice结构体 字符设备操作集 4、probe函数 5、remove函数​编辑 验证 6、添加开关 三、总代码 APP mis…

MySQL-锁

MySQL-4-锁概述锁的分类全局锁基本语法:特点表级锁介绍分类表锁读锁测试写锁测试写锁测试元数据锁意向锁分类行级锁介绍行锁间隙锁/临键锁概述 锁是计算机协调多个进程或者线程并发访问某一资源的机制,在数据库中,除传统的计算资源&#xff…

PCB第六道主流程之AOI,你都知道吗

衔接上文,继续为朋友们分享普通单双面板的生产工艺流程。 如图,第六道主流程为AOI。 AOI的目的为: 利用光学原理,比对资料,进行检验,并附带相应的维修与报废处理。 其子流程,主要为3个。 【…

面试必刷101 Java题解 -- part 3

part1 – https://blog.csdn.net/qq_41080854/article/details/129204480 part2 – https://blog.csdn.net/qq_41080854/article/details/129224785 面试必刷101 Java题解 -- part 3动规五部曲71、斐波那契数列72、跳台阶73、最小花费爬楼梯74、最长公共子序列(二)75、最长公共…

比特数据结构与算法(第四章_中_续②)堆解决Topk问题(最小的k个数)

TopK问题介绍:在N个数中找出最大/小的前K个 (比如在1000个数中找出最大/小的前10个)以前的方法:冒泡排序。时间复杂度: O(N^2)现在找最大的k个数的方法:方法1:堆排序降序,前N个就是最…