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

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 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搭建和管理企业级网站应用
相关文章
|
1月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
72 2
|
2天前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
17 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
23天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
51 3
|
22天前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
1月前
|
域名解析 网络协议 安全
|
2月前
|
运维 监控 网络协议
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
1月前
|
物联网 5G 数据中心
|
1月前
|
存储 Ubuntu Linux
2024全网最全面及最新且最为详细的网络安全技巧 (三) 之 linux提权各类技巧 上集
在本节实验中,我们学习了 Linux 系统登录认证的过程,文件的意义,并通过做实验的方式对 Linux 系统 passwd 文件提权方法有了深入的理解。祝你在接下来的技巧课程中学习愉快,学有所获~和文件是 Linux 系统登录认证的关键文件,如果系统运维人员对shadow或shadow文件的内容或权限配置有误,则可以被利用来进行系统提权。上一章中,我们已经学习了文件的提权方法, 在本章节中,我们将学习如何利用来完成系统提权。在本节实验中,我们学习了。
|
2月前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
45 5
下一篇
DataWorks