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

本文涉及的产品
数据传输服务DTS,同步至DuckDB 3个月
简介: 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编程是非常重要的。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
121 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
4月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
283 18
|
4月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
227 5
|
5月前
|
Web App开发 网络协议 Linux
【Linux】网络基础
TCP/IP五层模型是网络通信的基础框架,将复杂的数据传输过程分为物理层、数据链路层、网络层、传输层和应用层,每层各司其职,协同完成远程通信。该模型确保了不同设备和网络之间的互联互通,是现代互联网运行的核心机制。
355 5
|
4月前
|
Windows
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
107 0
|
5月前
|
网络协议 Linux 开发者
深入Linux中UDP网络通信机制编程探索
以上步骤概述了Linux中UDP网络通信的编程机制。在实现时,因关注细节和上下文环境可能有所调整,但大致流程是一致的。这些知识片段旨在帮助开发者快速上手Linux下的UDP编程,并提供可靠的信息作为编程的基础。在编程实践中,应结合实际业务需求,设计合适的数据传输协议,确保数据的正确性和实时性。
152 0
|
7月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
218 18
|
7月前
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
496 12
|
7月前
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
250 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
280 17

热门文章

最新文章