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

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Linux网络编程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编程是非常重要的。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
20 2
|
18天前
|
域名解析 网络协议 安全
|
24天前
|
运维 监控 网络协议
|
18天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
25天前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
49 10
|
21天前
|
物联网 5G 数据中心
|
20天前
|
存储 Ubuntu Linux
2024全网最全面及最新且最为详细的网络安全技巧 (三) 之 linux提权各类技巧 上集
在本节实验中,我们学习了 Linux 系统登录认证的过程,文件的意义,并通过做实验的方式对 Linux 系统 passwd 文件提权方法有了深入的理解。祝你在接下来的技巧课程中学习愉快,学有所获~和文件是 Linux 系统登录认证的关键文件,如果系统运维人员对shadow或shadow文件的内容或权限配置有误,则可以被利用来进行系统提权。上一章中,我们已经学习了文件的提权方法, 在本章节中,我们将学习如何利用来完成系统提权。在本节实验中,我们学习了。
|
24天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
22 5
|
1月前
|
安全 网络架构
无线网络:连接未来的无形纽带
【10月更文挑战第13天】
64 8
|
28天前
|
Ubuntu Linux 虚拟化
Linux虚拟机网络配置
【10月更文挑战第25天】在 Linux 虚拟机中,网络配置是实现虚拟机与外部网络通信的关键步骤。本文介绍了四种常见的网络配置方式:桥接模式、NAT 模式、仅主机模式和自定义网络模式,每种模式都详细说明了其原理和配置步骤。通过这些配置,用户可以根据实际需求选择合适的网络模式,确保虚拟机能够顺利地进行网络通信。