TCP:TCP连接的建立与终止

TCP连接的建立与终止

  • 建立连接
    • 第一次握手
    • 第二次握手
    • 第三次握手
  • 终止连接
    • 第一次挥手
    • 第二次挥手
    • 第三次挥手
    • 第四次挥手

T C P是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本文将详细讨论一个T C P连接是如何建立的以及通信结束后是如何终止的。
如何使用抓包工具 wireshark

建立连接

为了建立一个TCP连接:

第一次握手

  1. 请求端发送一个S Y N段指明连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1。
    使用抓包工具得到以下内容,可以看到:
    1. 指定了源端口和目标端口,什么?怎么没有IP地址,IP地址在IP首部呢!
    2. 序号为 1514758884,序号并不从0开始,而是生成ISN。序号为什么不从0开始?
    3. SYN=1 表明这是一个连接请求或连接接受报文
    4. 窗口大小声明为 64240
      在这里插入图片描述

第二次握手

  1. 服务器发回包含服务器的初始序号的S Y N报文段(报文段2)作为应答。同时,将确认
    序号设置为客户的I S N加1以对客户的S Y N报文段进行确认。一个S Y N将占用一个序号。
    使用抓包工具得到以下内容,可以看到:
    1. 指定了源端口(22)和目标端口(60378)
    2. 序号为 3444481880
    3. ACK=1,表明确认号ack有效,ack=151475885,即发来的报文序号1514758884+1
    4. SYN=1 表明这是一个连接请求或连接接受报文
    5. 窗口大小声明为64240
      在这里插入图片描述

第三次握手

  1. 客户必须将确认序号设置为服务器的I S N加1以对服务器的S Y N报文段进行确认(报文
    段3)。
    使用抓包工具得到以下内容,可以看到:
    1. 同样指定了源端口和目标端口
    2. 序号为 1514758885
    3. ACK=1,表明确认号ack有效,ack=3444481881,即发来的报文序号3444481880+1
    4. SYN=0 表明这不是一个连接请求或连接接受报文,服务器连接请求和连接接受发生在第二次握手时。
    5. 窗口大小声明为513,为什么这么小呢?这个流量控制有关。
      在这里插入图片描述

一个整体的流程图:
在这里插入图片描述

终止连接

建立一个连接需要三次握手,而终止一个连接要经过 4次挥手。这由T C P的半关闭(h a l f - c l o s e)造成的。一个T C P连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。
如图,为抓包工具显示内容:这就是四次挥手的过程
在这里插入图片描述

第一次挥手

  1. 我从服务器进行断开连接的,故而先由服务器主动关闭连接。当一方完成数据传输并想要关闭连接时,它会发送一个FIN(结束)标志的数据包。这个FIN标志表示发送方已经完成了数据发送,但仍然可以接收数据。
    在这里插入图片描述

第二次挥手

  1. 收到FIN标志的一方会在处理完剩余数据后,再发送一个带有ACK(确认)标志的数据包以确认收到了FIN。
    在这里插入图片描述

第三次挥手

  1. 此时,如果应用程序不调用c l o s e而调用s h u t d o w n,且第2个参数值为1,则socket的A P I支持半关闭。显然,这不是一个半关闭。所以本地主机发送一个FIN(结束)标志的数据包至服务器。
    在这里插入图片描述

第四次挥手

  1. 服务器确认(stream 主机->服务器 关闭连接)
    在这里插入图片描述
    一个完整的流程图:
    在这里插入图片描述

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

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

相关文章

2024年能源电力行业CRM研究报告

中国能源电力行业属于大制造业的重要组成部分,在国民经济中的地位举足轻重。据统计,近十年来能源电力行业的整体投资呈现出增长趋势,尤其是“十四五”期间增长显著,2022年全国主要电力企业共完成投资12470亿元,同比增长…

【乐吾乐2D可视化组态编辑器】连线

1 连线的绘制 1.1 钢笔绘制连线 1.1.1 曲线、线段、直线、脑图曲线 开始:单击左键 暂停:单击右键 或 enter 结束:esc 乐吾乐2D可视化组态编辑器demo:https://2d.le5le.com/ 1.1.2 横线 按下快捷键shift,点击鼠标左键绘制…

101.6k星的后台巨擘:一站式SaaS多租户、商城、CRM、ERP解决方案

RuoYi-Vue Pro,一个丰富优化重构的后台管理系统,为企业提供了一个强大、灵活、易用的解-决方案。 特点 丰富的功能支持:包括RBAC动态权限、数据权限、SaaS多租户、工作流、三方登录、支付、短信等。 现代化的技术栈:基于Spring Boot、MyBatis Plus、Vue & Element,支持…

在UE中创建命名管道之创建UE蓝图类

需求 在实际工作遇到了需要 UE 开发进程间通信相关的需求。 经过思考后选择使用命名管道来实现 。 名词概念 首先什么是进程间通信: 进程间通信( Inter-Process Communication,IPC)是指在操作系统中,不同进程之间进行数据交换…

大厂面试官问我:Redis内存淘汰,LRU维护整个队列吗?【后端八股文四:Redis内存淘汰策略八股文合集】

往期内容: 大厂面试官问我:Redis处理点赞,如果瞬时涌入大量用户点赞(千万级),应当如何进行处理?【后端八股文一:Redis点赞八股文合集】-CSDN博客 大厂面试官问我:布隆过滤…

精选:15款顶尖Python知识图谱(关系网络)绘制工具,数据分析的强力助手

知识图谱(关系网络)可以用简单的形状和线条显示复杂的系统,帮助我们理解数据之间的联系。我们今天将介绍15个很好用的免费工具,可以帮助我们绘制网络图。 NetworkX NetworkX是一个用于处理网络的Python工具。许多人在Python中处…

模型选择、过拟合与欠拟合

一、训练误差与泛华误差 1、在训练时,我们关心的是泛化误差,也就是对新数据的预测 2、训练误差:模型在训练数据上的误差;泛化误差:模型在新数据上的误差 二、验证数据集与测试数据集 1、验证数据集:用于…

Percona Toolkit 神器全攻略(配置类)

Percona Toolkit 神器全攻略(配置类) Percona Toolkit 神器全攻略系列共八篇,前文回顾: 前文回顾Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略(实用类) 全文约定:$为命令提示符、gr…

Rocketmq在单节点情况下新增从节点

Rocketmq在单节点情况下新增从节点 在docker-compose部署rocketmq单节点的基础上,新增一个从节点 一,修改docker-compose配置文件 原docker-compose文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:server-4.5.2container_name: rm…

选择诊所管理系统的原则是什么?

如今,诊所管理系统已成为医疗机构提升管理效率、优化患者服务的重要工具。然而,市场上的诊所管理系统琳琅满目,功能各异,因此,如何选择一款适合自己诊所的管理系统,是许多诊所管理者需要思考的问题。下面&a…

进程调度的基本过程

文章目录 CPU执行指令过程进程PCB“分时复用” ☁️结语 CPU执行指令过程 一个CPU能执行那些指令,可以认为是cpu最初设计的时候就已经写死了。有一个“表格”描述了都有哪些指令。 以上的表格只是一个简化版本,真实的cpu指令表要复杂很多。此处假设每个…

薄冰英语语法学习--名词2-格

名词后面 s,代表后面这个东西属于前面的。 比如toms book,汤姆的书。 末尾是s,那么直接在最后加就行了。比如boys,男孩们的 表示几个词共同 的所有关系在最后一个词的词尾加 sMary and Toms books 玛丽和汤姆共有的书表示几个词…

深入探讨C++的高级反射机制

反射是一种编程语言能力,允许程序在运行时查询和操纵对象的类型信息。它广泛应用于对象序列化、远程过程调用、测试框架、和依赖注入等场景。 由于C语言本身的反射能力比较弱,因此C生态种出现了许多有趣的反射库和实现思路。我们在本文一起探讨其中的奥秘…

DOM遍历

DOM 遍历是指在 HTML 文档中导航和定位元素的过程。通过 DOM 遍历,您可以在文档中移动并查找特定的元素,以便对其进行操作或者检索信息。 寻找子元素 //DOM遍历 const h1 document.querySelector(h1);//寻找子元素 console.log(h1.querySelectorAll(.…

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南 引言Watchdog库概述核心组件工作原理 快速开始:设置Watchdog安装Watchdog创建一个简单的监控脚本设置和启动Observer 事件处理:如何响应文件系统的变化基本事件处理处理复杂的场景…

论文生成新纪元:探索顶尖AI写作工具的高效秘诀

在学术探索的征途中,AI论文工具本应是助力前行的风帆,而非让人陷入困境的漩涡。我完全理解大家在面对论文压力的同时,遭遇不靠谱AI工具的沮丧与无奈。毕竟,时间可以被浪费,但金钱和信任却不可轻弃。 作为一名资深的AI…

Java使用Graphics2D画图,画圆,矩形,透明度等实现

背景 如上图,需要使用Java生成一个图片, 并以base64编码的形式返回给前端展示。 使用Graphics2D类,来进行画图,其中需要画方框、原型、插入图标、写入文字等,同时需要设置透明度等细节点 环境:Jdk17&#…

Java面试八股之JVM内存泄漏按照发生的方式可以分为哪几类

JVM内存泄漏按照发生的方式可以分为哪几类 常发性内存泄漏(Frequent Memory Leak) 这类内存泄漏发生的代码会被频繁执行,每次执行时都会导致一块或多块内存无法被回收。由于泄漏行为重复发生,故称为常发性。这类泄漏通常比较容易…

下一代广域网技术2:SRv6

2.SRv6 SR架构设计之初,就为SR数据平面设计了两种实现方式:一种是SR-MPLS,其重用了MPLS数据平面,可以在现有IP/MPLS网络上增量部署;另一种是SRv6,使用IPv6数据平面,基于IPv6路由扩展头进行扩展…

Docker部署常见应用之Oracle数据库

文章目录 安装部署参考文章 安装部署 使用Docker安装Oracle数据库是一个相对简便的过程,可以避免在本地环境中直接安装Oracle数据库的复杂性。 安装Docker环境:确保你的系统上已经安装了Docker,并且Docker服务正在运行。具体的安装方法可以根…