Linux网络编程TCP连接的建立和终止

news2024/9/20 14:36:14

文章目录

  • 前言
  • 一、TCP的三路握手
  • 二、TCP连接终止
  • 总结


前言

本篇文章将讲解TCP的连接的建立和终止,主要就是讲解TCP的三路握手和TCP连接断开内部发生的一些机制和事件。

一、TCP的三路握手

TCP三路握手所交换的三个分节:
在这里插入图片描述
(1)服务器必须准备好接受外来的连接,这通常通过调用socket、bind和listen这三个函数来完成,我们称之为被动打开。

(2)客户通过调用connect发起主动打开。这会导致客户TCP发送一个SYN(同步分节)。它告诉服务器在客户将在(待建立的)连接中发送的数据的初始序列号。通常SYN分节不携带数据,其所在IP数据包只含有一个IP首部、一个TCP首部及可能有的TCP选项。

(3)服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器在单个分节中发送SYN和对客户SYN的ACK(确认)

(4)客户必须确认服务器的SYN

这里讲解一下SYN和ACK分节:

SYN分节(SYN segment)用于建立TCP连接。当一个客户端想要和服务器端建立连接时,它会向服务器端发送一个SYN分节,其中包含一个起始序列号(ISN)和一些选项。这个SYN分节告诉服务器端客户端想要连接,并请求服务器端回应一个ACK分节(确认分节)以表示它接收到了连接请求。SYN和ACK分节通常被称为TCP三次握手。

ACK分节(ACK segment)用于确认已经收到了数据包。当TCP接收方收到一个数据包时,它会发送一个ACK分节作为确认。ACK分节也可以被用来表明TCP连接中的某些状态,例如序列号(用于数据传输)或窗口大小(用于流控制)。

二、TCP连接终止

TCP建立一个连接需要三个分节,终止一个连接则需要4个分节。

在这里插入图片描述
1.发送方向接收方发送一个FIN分节。FIN分节的序列号是还没有发送的数据的下一个字节的序列号。
2.接收方收到FIN分节后,发送一个ACK分节以确认已经接收到了FIN分节。ACK分节的序列号等于接收到的数据字节数加上1,确认号等于发送方发送的FIN分节的序列号加上1。
3.发送方收到ACK分节后,就知道接收方已经接收到了它的FIN分节,此时TCP连接的发送方不能再向连接中发送数据。但是,它可以继续接收接收方发来的数据。
4.接收方不再有数据要发送,并且它也想要关闭连接时,它可以向发送方发送一个FIN分节。此时,这个TCP连接就成功关闭了。

FIN(Finish)分节是TCP协议用于结束数据传输的一种分节类型。当TCP连接的发送方需要结束数据传输时,它会向连接的另一端发送一个FIN分节。接收方收到FIN分节后,它会发送一个ACK分节进行确认,然后向发送方发送一个FIN分节,告诉它接收方也已经结束数据传输。这个过程通常被称为TCP四次分手。

FIN分节的序列号是还没有发送的数据的下一个字节的序列号。它通常用于关闭TCP连接或通知对端接收到所有数据。在TCP连接中,当一个端点发送FIN分节之后,这个端点就无法再向连接中发送数据信息,但仍然可以接收数据。

需要注意的是,四次分手的过程中,每个分节都要等待对方的ACK才能完成。如果某个分节在传输过程中被丢失,则会发生超时,会重新发送该分节。这种方案可以确保双方都已经正常地关闭了连接,并释放了相关资源。

总结

本篇文章主要为大家讲解了TCP连接的建立和终止,了解这个过程对后面深入学TCP编程是非常重要的。

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

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

相关文章

C++题解之对顶堆:中位数

中位数 题目链接:洛谷P1168 中位数 题目描述 给定一个长度为 N N N 的非负整数序列 A A A,对于前奇数项求中位数。 输入格式 第一行一个正整数 N N N。 第二行 N N N 个正整数 A 1 … N A_{1\dots N} A1…N​。 输出格式 共 ⌊ N 1 2 ⌋ …

【是C++,不是C艹】 省缺参数 | 函数重载 | 内联函数

💞💞欢迎来到 Claffic 的博客 💞💞 👉 专栏:《是C,不是C艹》👈 前言: 上期,我带大家给C打了招呼,捎带着认识了命名空间和输入输出,那…

LeetCode——链表简单题题解

83. 删除排序链表中的重复元素 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 输入:head [1,1,2] 输出:[1,2] 解题思路:用一个指向节点类型的指针保…

Vscode配置C/C++开发环境

下载Vscode进行安装。 下载MinGW-W64 GCC最新版本, 选择x86_64-win32-seh进行下载。解压放入自定义目录(英文路径)后,添加$:\mingw64\bin到系统Path环境变量。安装C/C插件。 在.c后缀文件中按Ctr Shift P,选择C/C …

Windows系统文件被faust勒索病毒加密勒索病毒解密恢复,电脑中病毒了怎么修复?

恶意软件的攻击已经让电脑用户变得更加谨慎了。在最近的一波攻击中,faust勒索病毒已经对使用Windows系统的计算机造成了广泛的破坏。该病毒利用加密技术锁定用户的文件,只有在支付一定数额的赎金后才会解锁这些文件。如果你的计算机中也受到了这种勒索病…

MaxScript编写bone转换biped工具

一、制作转换工具的缘由 大家好,我是阿赵。我经常从各种渠道得到了一些角色模型,这些模型得到之后,会发现是带有蒙皮和骨骼,甚至带有动作的。   不过这些资源很多都是从游戏截取出来的,导入到3DsMax之后,…

信息安全复习十:Web与电子商务安全

一、章节梗概 1.信息安全的学科内容 2.Web和电子商务安全问题提出 3.安全套接字协议SSL与传输层安全协议TLS 4.安全电子交易(SET)简要介绍 复习: 密码学内容:对称密钥密码、公开密钥密码、报文鉴别 PKI:数字签名、数字证书、信任关系 身份认…

MES管理系统助力企业数字化与实体经济实现“数实融合“

中国企业评估协会日前公布了2022年度“中国新经济500强”的名单。在这些企业中,先进制造业企业的比例超过了半数,尤其是互联网与现代信息技术服务业、新能源产业、新型生活性服务业等,在这些行业中占据了重要地位。由此可以看出,绿…

C/C++每日一练(20230427) 二叉树专场(5)

目录 1. 从中序与后序遍历序列构造二叉树 🌟🌟 2. 从先序与中序遍历序列构造二叉树 🌟🌟 3. 二叉树展开为链表 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每…

微信小程序php+python+nodejs+vue 高校工资管理系统

在线公益知识练习及测试系统是随着计算机技术和互联网技术的发展而产生的一种的新的练习及测试模式,与传统的纸质化练习及测试不同,在线系统提高了练习或测试的效率,减少了纸张的浪费,减轻了教师的评卷压力,同时也为参…

易观千帆 | 金融机构如何保证用户体验长期可持续?

易观:用户体验正逐渐成为金融机构的命脉。 数字经济时代的到来,金融机构面临着来自内部和外部的双重压力。一方面,互联网金融企业凭借强大的技术能力以及人才优势,通过互联网运营的模式迅速响应客户需求,吸引了大量用户…

自定义Feign日志

文章目录 开篇定位Feign是怎么打印日志的?自定义FeignLogger实现 开篇 在上一篇Feign打印日志文章中,已经成功打印了FeignClient请求服务的日志信息,但是默认打印的日志太过零散,不是我们想要的。怎么能自定义日志打印的格式和内…

系统分析师《企业信息化战略与实施》高频知识点二

企业信息化战略与实施---系统建模 组织结构是一个企业内部部门的划分以及相互之间的关系,每个企业都有自己的组织结构图,它将企业分成若干部分,标明行政隶属关系。组织结构图是一种树结构,树的分支是根据上下级和行政隶属关系绘制…

二叉树 + 技巧

题目难度备注2471. 逐层排序二叉树所需的最少操作数目1635BFS 置换环 离散化2641. 二叉树的堂兄弟节点 II1677BFS 文章目录 周赛二叉树问题[2471. 逐层排序二叉树所需的最少操作数目](https://leetcode.cn/problems/minimum-number-of-operations-to-sort-a-binary-tree-by-l…

【AI绘画】云服务器部署stable-diffusion-webui保姆级教程

1.背景 之前给大家写过Mac苹果笔记本上部署stable-diffusion-webui的教程,知乎链接: 【奶奶看了也不会】AI绘画 Mac安装stable-diffusion-webui绘制AI妹子保姆级教程 但是安装过程就花了一天的时间,各种问题处理起来真是苦不堪言。。。而且…

如何解决生产缺料问题?

对于一个生产型企业来说,生产缺料是管理中的疑难问题之一。 生产缺料导致的最直接的危害就有两个: 第一就是不能准时交货,降低企业信用,情况严重可能导致根据合同赔款,甚至丢失客户。 第二个危害就是增加了生产成本…

部署LVS-DR 集群及实验

一、LVS-DR工作原理 LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一种工作模式。 #①LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用; #②节点 Directo…

ueditor富文本编辑器上传木马图片或木马文件漏洞

漏洞分析: ueditor插件目录一般都自带index.html文件(完整demo文件),这个文件原来是用来测试插件功能的,但粗心的程序员们,开发好项目后,都忘记删除这个demo文件了,导致黑客可以很轻…

微服务不是本地部署的最佳选择,不妨试试模块化单体

微服务仅适用于成熟产品 关于从头开始使用微服务,马丁・福勒(Martin Fowler)总结道: 1. 几乎所有成功的微服务都是从一个过于庞大而不得不拆分的单体应用开始的。 2. 几乎所有从头开始以微服务构建的系统,最后都会因…

win11安装双系统ubuntu20.04指导

目录 一、制作U盘启动盘二、硬盘分区2.1方法2.2分区过程 三、安装系统3.1进入U盘启动3.2安装ubuntu3.3设置启动项 四、更新软件五、遇到的问题5.1不能连接WIFI 电脑型号:联想拯救者Y7000P 2023 无线网卡型号:WIFI 6E AX211 160MHz 系统版本:w…