TCP的三次握手以及以段为单位发送数据【TCP原理(笔记二)】

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: TCP的三次握手以及以段为单位发送数据【TCP原理(笔记二)】

连接管理

TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。


UDP是一种面向无连接的通信协议,因此不检查对端是否可以通信,直接将UDP包发送出去。TCP与此相反,它会在数据通信之前,通过TCP首部发送一个SYN包作为建立连接的请求等待确认应答(TCP中发送第一个SYN包的一方叫做客户端,接收这个的一方叫做服务端。) 。如果对端发来确认应答,则认为可以进行数据通信。如果对端的确认应答未能到达,就不会进行数据通信。此外,在通信结束时会进行断开连接的处理(FIN包)。


可以使用TCP首部用于控制的字段来管理TCP连接(也叫控制域。更多细节请参考6.7节。) 。一个连接的建立与断开,正常过程至少需要来回发送7个包才能完成(建立一个TCP连接需要发送3个包。这个过程也称作“三次握手”。) 。

d58dd0e94b8a45f584f24fccc10c77b2.png


下面是TCP连接管理的主要过程:


1.建立连接(Three-Way Handshake):在发送方准备发送数据之前,需要先建立TCP连接。这是通过一个称为三次握手的过程完成的。发送方首先发送一个带有SYN(同步)标志的TCP报文段给接收方,表明它想要建立连接。接收方收到后,回复一个带有SYN/ACK(同步/确认)标志的报文段作为响应,表示同意建立连接。最后,发送方再回复一个带有ACK(确认)标志的报文段,确认接收方的响应。这样,连接就建立起来了。

2.数据传输:一旦连接建立,发送方可以开始向接收方发送数据。数据被分割成TCP报文段,并通过连接传输。TCP使用序列号来保证数据的有序传输,并使用确认号来确认已经接收到的数据。

3.连接维护与超时重传:TCP连接的维护涉及到保持连接状态以及处理可能出现的错误情况。每个TCP报文段都会包含一个序列号和确认号。发送方发送数据后,会启动一个计时器,在一定时间内等待接收方的确认。如果确认没有及时到达,发送方会认为数据丢失,并重新发送这些数据。

4.关闭连接(Four-Way Handshake):当数据传输完成或者需要终止连接时,发送方和接收方需要进行连接的关闭。关闭连接需要一个称为四次握手(Four-Way Handshake)的过程。发送方首先发送一个带有FIN(结束)标志的报文段给接收方,表示它希望关闭连接。接收方收到后,回复一个带有ACK标志的报文段作为确认。然后,接收方也发送一个带有FIN标志的报文段给发送方,表示它也希望关闭连接。最后,发送方回复一个带有ACK标志的报文段,确认接收方的关闭请求。这样,连接就被双方关闭了。

TCP以段为单位发送数据

在建立TCP连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS:Maximum Segment Size)。最理想的情况是,最大消息长度正好是IP中不会被分片处理的最大数据长度。


TCP在传送大量数据时,是以MSS的大小将数据进行分割发送。进行重发时也是以MSS为单位。


MSS是在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在TCP首部中写入MSS选项,告诉对方自己的接口能够适应的MSS的大小(为附加MSS选项,TCP首部将不再是20字节,而是4字节的整数倍。如下图所示的+4。) 。然后会在两者之间选择一个较小的值投入使用(在建立连接时,如果某一方的MSS选项被省略,可以选为IP包的长度不超过576字节的值(IP首部20字节,TCP首部20字节,MSS 536字节)。) 。

0bc1dac70fc1479ebe0ae53475a15c49.png


在TCP传输过程中,数据被分割成称为TCP段(TCP segment)的较小单元进行传输。


TCP段是由TCP协议在传输层封装的数据单元,它包含了TCP报文头和数据部分。TCP报文头中包含了一些控制信息,如源端口号、目标端口号、序列号、确认号、窗口大小等。数据部分则是要传输的有效载荷数据。


由于网络中的数据传输可能会面临不同的限制,如带宽限制、MTU(Maximum Transmission Unit)限制等,因此TCP需要将数据分割成适合网络传输的段大小。每个TCP段都会带有序列号,用于保证数据的有序传输和重组。


接收方在接收到TCP段后,会根据序列号进行重组,并向发送方发送确认(ACK)信息,表示已经接收到了哪个序列号之前的所有数据。如果发送方没有收到确认信息,它会根据超时重传机制重新发送相应的段。


通过将数据分割成段的方式,TCP能够适应不同网络条件下的数据传输,并保证数据的可靠性和有序性。这是TCP协议在互联网中广泛应用的重要原因之一。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
存储 网络协议 算法
更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
94 5
|
7月前
|
网络协议 算法 Linux
TCP教程:详解TCP连接过程
TCP教程:详解TCP连接过程
873 0
|
7月前
|
网络协议 架构师 Go
实战TCP三次握手
实战TCP三次握手
42 0
|
网络协议 算法 Java
TCP详解(WireShark抓包分析TCP三次握手和TCP四次挥手)(二)
TCP详解(WireShark抓包分析TCP三次握手和TCP四次挥手)
254 0
|
存储 缓存 网络协议
TCP详解(WireShark抓包分析TCP三次握手和TCP四次挥手)(一)
TCP详解(WireShark抓包分析TCP三次握手和TCP四次挥手)
357 0
|
存储 运维 网络协议
网络|学习一下tcp三次握手
网络|学习一下tcp三次握手
146 0
|
网络协议 Java
TCP发送数据、接受数据及TCP通信程序练习
TCP发送数据、接受数据及TCP通信程序练习
149 0
|
监控 网络协议 前端开发
【网络小知识】TCP协议介绍/三次握手,四次挥手的作用
TCP协议介绍/三次握手,四次挥手的作用
|
缓存 网络协议 网络架构
四十、TCP协议的特点、TCP报文段格式和TCP的连接管理
四十、TCP协议的特点、TCP报文段格式和TCP的连接管理
四十、TCP协议的特点、TCP报文段格式和TCP的连接管理
|
网络协议 Linux
TCP/IP源码(59)——TCP中的三个接收队列
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net  微博:weibo.com/glinuxer QQ技术群:4367710   本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
832 0