计算机网络知识点复习——TCP协议的三次握手与四次挥手(连接与释放)

news2024/12/23 0:11:54

TCP协议的三次握手与四次挥手(连接与释放)

    • 一、前言
    • 二、简单的知识准备
        • 1. TCP协议的主要特点
        • 2. TCP报文段
    • 三、TCP连接的建立(三次握手)
    • 四、TCP连接的释放(四次挥手)
    • 五、TCP连接与释放的总结
    • 六、结束语

一、前言

本篇文章主要是介绍TCP连接的建立以及连接的释放过程,也就是我们常说的“三次握手”和“四次挥手”。

二、简单的知识准备

1. TCP协议的主要特点

TCP是在不可靠的IP层之上实现的可靠的数据传输,它是面向连接的传输层协议,提供全双工通信,数据传输是面向字节流的。

2. TCP报文段

TCP传送的数据单元为报文段,一个TCP报文分为首部和数据两部分,其首部的前20B是固定的。TCP的全部功能体现在其首部的各个字段中,这里大家主要注意下面几个字段的意义即可:

  1. 序号(seq):指的是本报文段所发送的数据的第一个字节的序号。
  2. 确认号(ack):表示期待收到对方的下一个报文段的第一个数据字节的序号(seq)。如ack=n+1,那么序号seq=n及之前的数据已经收到,期待收到序号n+1及之后的数据。
  3. 确认位(ACK):仅当ACK=1时,确认位(ack)才有效,若ACK=0时,确认位(ack)无效。
  4. 同步位(SYN):SYN=1时有效,意义有两种:
    ①SYN=1,ACK=0,表示该报文为连接请求报文。
    ②SYN=1,ACK=1,表示该报文为连接同意报文。
  5. 终止位(FIN):用于释放连接,当FIN=1时,表示数据已发送完毕,并要求释放连接。

三、TCP连接的建立(三次握手)

为了能够更好的了解TCP连接的建立过程,我特意画了一幅图:

CSDN风行男孩制作

在连接建立前,服务器处于LISTEN(监听)状态,等待连接:
第①次握手:客户机A发送请求连接报文,报文段首部中同步位SYN=1,第一个数据字节初始序号seq=x,客户机A进入SYN-SENT(同步已发送)状态。(注:SYN报文段不能携带数据,但消耗一个序号,下面第②次握手一样)
.
第②次握手:服务器B收到连接请求报文,同意连接,发送接受连接报文,报文段中SYN=1,ACK=1,ack=x+1(序号x的数据已收到,期待接收seq=x+1数据),seq=y,服务器B进入SYN-RCVD(同步收到)状态。(在这里分配了服务器的资源)
.
第③次握手:客户机收到连接接受报文后,还需向服务器发送确认报文,报文段首部中ACK=1,ack=y+1,seq=x+1,客户机A进入连接已建立状态,可以开始传送数据。(注:在第③次握手发出的报文可以携带数据了,这里很容易被忽视
以上就是TCP三次握手的主要过程。

四、TCP连接的释放(四次挥手)

同样的,这里用一个例图来进行介绍,毕竟图文结合能够让我们更好的理解。

风行男孩制作

参与TCP连接的两个进程都能终止该连接,连接释放的过程通常也被称为四次挥手:
.
第①次挥手:客户机A数据发送完成,主动关闭TCP连接,发送连接释放报文,报文段首部终止位FIN=1,同样的该报文需要消耗一个序号,设序号seq=u,客户机A进入FIN-WAIT-1(终止等待1)状态。
.
第②次挥手:服务器B收到连接释放报文后随即发出确认报文,报文段首部字段中ACK=1,ack=u+1序号seq=v(这里的v等于前面已传送数据的最后一个字节的序号加1),服务器进入CLOSE-WAIT(关闭等待)状态,就此,从客户机A到服务器B的连接就释放了(半关闭状态)。( 注:TCP是全双工的,可以看成TCP连接有两条通路,在客户机A成功发送FIN报文并确认后,A就不能发送数据了,但是服务器B还可以发送数据,这里对应图中中间的数据传送标志
.
第③次挥手:若服务器没有数据发送了,就发出连接释放报文,报文首部字段中FIN=1,注意这里需要重复上次已发送的确认号ack=u+1,ACK=1,而由于在半关闭状态服务器B可能向客户机A发送了数据,所以序号需设为seq=w****而不是seq=v+1,然后服务器B进入LAST-ACK(最后确认)状态。
.
第④次挥手:客户机收到连接释放报文后,还需发出确认,因此确认报文中的ACK=1,确认号ack=w+1,序号seq=u+1。但此时TCP连接还需要等待2MSL(最长报文段寿命)后,客户机才进入最后的CLOSED(连接关闭)状态。

五、TCP连接与释放的总结

这里简单的对TCP三次握手与四次挥手的过程进行总结,主要记住每个阶段中的主要字段的状态即可:
(1)TCP连接的建立(三次握手):
① SYN=1,seq=x。
② SYN=1,ACK=1,seq=y,ack=x+1。
③ ACK=1,seq=x+1,ack=y+1。
.
(2)TCP连接的释放(四次挥手):
① FIN=1,seq=u。
② ACK=1,seq=v,ack=u+1。
③ FIN=1,ACK=1,ack=u+1,seq=w
④ ACK=1,seq=u+1,ack=w+1

六、结束语

好了,对于TCP的三次握手以及四次挥手的介绍就到这里了,我是风行男孩,咱们有缘再见!(码字不易,如本篇文章若有帮助,留个赞当痕迹就好)

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

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

相关文章

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结…

qtdraw-使用qt绘图之开源源码学习

1. 资源介绍 功能:使用qt在画板上绘制各种形状,并保持绘制内容到xml文件中。 项目源码:https://github.com/egan2015/qdraw 软件界面: 1.1 支持shape 6种 1.2 支持的功能 6种,分别是对绘制的图形进行撤销undo&…

计算机网络(四) —— 简单Tcp网络程序

目录 一,服务器初始化 1.0 部分文件代码 1.1 关于Tcp协议 1.2 创建和绑定套接字 1.3 监听 二,服务器启动 2.1 获取连接 2.2 提供服务 2.3 客户端启动源文件 Main.cc 二,客户端编写 2.1 关于Tcp客户端 2.2 客户端代码 2.3 效果…

Linux第十一节课 - 进程

一个程序从磁盘以文件的形式加载到内存之后,已经变成了进程! 引入管理者和被管理者 1、管理者和被管理者不需要见面!(例如学生和校长!) 2、管理者在不见被管理者的情况下,如何做好管理呢&…

隐私计算实训营:SplitRec:当拆分学习遇上推荐系统

拆分学习的概念 拆分学习的核心思想是拆分网络结构。每一个参与方拥有模型结构的一部分,所有参与方的模型合在一起形成一个完整的模型。训练过程中,不同参与方只对本地模型进行正向或者反向传播计算,并将计算结果传递给下一个参与方。多个参…

文件操作与隐写

一、文件类型的识别 1、文件头完好情况: (1)file命令 使用file命令识别:识别出file.doc为jpg类型 (2)winhex 通过winhex工具查看文件头类型,根据文件头部内容去判断文件的类型 eg:JPG类型 &a…

Wni11 下 WSL 安装 CentOS

Wni11 下 WSL 安装 CentOS 方法一、安装包安装下载包安装安装打开 CentOS1. 从 Windows 终端 打开2. 从 PowerShell 打开 方法二、导入 CentOS 的 tar 文件进行安装0. 查看版本(可选)1. 导出 Docker 容器到 tar 文件2. 将 tar 文件导入 WSL2.1. 导入 tar…

macos安装ArgoCD

本文主要介绍如何在macos上安装并访问argo 我环境上已经安装了minikube,所以只需要启动minikube然后通过命令行安装argocd。 minikube start kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/st…

OpenGL(二)-更详细版的三角形

在上篇blog中已经画了一个三角形了,这篇讲解一下一个三角形的渲染过程。 上篇blog中的glbegin搭配glend的流程,在OpenGL3.2中已经被弃用了,3.3以后推荐使用VBOEBOVAO的流程。 图形渲染管线 作用:将三维坐标经过一系列变换&#x…

【Day09】

目录 Mybatis-基础操作-环境准备 Mybatis-基础操作-删除 Mybatis-基础操作-删除(预编译SQL) Mybatis-基础操作-新增 Mybatis-基础操作-新增(主键返回) Mybatis-基础操作-更新 Mybatis-基础操作-查询(根据ID查询) Mybatis-基…

YOLOv8改进 | Conv篇 | YOLOv8引入DWR

1. DWR介绍 1.1 摘要:当前的许多工作直接采用多速率深度扩张卷积从一个输入特征图中同时捕获多尺度上下文信息,从而提高实时语义分割的特征提取效率。 然而,这种设计可能会因为结构和超参数的不合理而导致多尺度上下文信息的访问困难。 为了降低多尺度上下文信息的绘制难度…

【系统分析师】-2024-2010年系统分析师历年论文题目

目录 2024.5月 2023 2022 2021 2020 2019 预测2024年11月 2024.5月 信息系统工程 论基于架构的软件设计方法信息系统工程 论性能测试方法及其应用信息系统工程 论云原生应用开发数据库及应用 论多源数据集成方法及其应用 2023 信息系统工…

HTB-Pennyworth(cve查询 和 exp使用)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解Pennyworth靶场 渗透过程 信息搜集 服务器端口开放了8080http端口 访问网站 服务器使用jenkins cms系统,版本是2.289.1 通过弱口令爆破,账户是root,密码是password 通过命令执行nday 连…

Leetcode面试经典150题-76.最小覆盖子串

解法都在代码里&#xff0c;不懂就留言或者私信 理论上提交这个就是最优解 class Solution {public String minWindow(String s, String t) {if(s.length() < t.length()) {return "";}/**转成字符数组 */char[] sArr s.toCharArray();char[] tArr t.toCharAr…

Docker编译环境的使用(ubuntu)

目录 Ubuntu安装docker 重启docker 拉取镜像 进入docker安装软件 提交docker 添加用户到docker组 进入docker 添加build用户 停止容器 保存docker镜像 load镜像 删除容器 Ubuntu安装docker sudo apt install docker.io 国内可用的源 Welcome to nginx! (tence…

git使用基础教程

(一)Git下载 git官网 - downloads 创建本地数据仓 1.创建文件夹 2.当前目录 cmd ---git init gitee.com注册登录 git创建项目 ide 项目地址本地数据库 ide项目上传云端 (一)git 1.git下载 2.新建仓库 3. 配置Configure---Version Control---Git----path to Git Get from…

某里227逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解…

【中国国际航空-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

【LeetCode】最接近的三数之和

题目要求 解题思路 这道题解题方法和三数之和解题思路一样&#xff0c;可以参考上一篇博客 代码实现 class Solution { public:int threeSumClosest(vector<int>& nums, int target) {//排序sort(nums.begin(),nums.end());int lennums.size();//固定一个&#x…

流媒体协议RTSP(其二)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力 文章目录 前期博客一、RTSP简介二、请求消息结构三、应答消息结构四、RTSP交互流程 前期博客 流媒体与直播的基础理论&#xff08…