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

本文涉及的产品
数据传输服务 DTS,同步至DuckDB 3个月
简介: 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协议在互联网中广泛应用的重要原因之一。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
一文读懂Can总线错误处理
一文读懂Can总线错误处理
一文读懂Can总线错误处理
|
Linux
Linux 系统时间同步 ​使用 NTP 服务时间同步​
Linux 系统时间同步 ​使用 NTP 服务时间同步​
804 2
|
3月前
|
传感器
南京观海微电子-----常用传感器接线方法(直观)图解
本文介绍了多种传感器的接线原理与方法,包括交流型二线、NPN/PPN型三线、四线及五线传感器。重点讲解了各类型传感器的电源连接、信号输出方式及典型应用场景,帮助用户正确理解和实施传感器接线。
|
12月前
|
人工智能 自然语言处理 机器人
今日AI论文推荐:ReCamMaster、PLADIS、SmolDocling、FlowTok
由浙江大学、快手科技等机构提出的ReCamMaster是一个相机控制的生成式视频重渲染框架,可以使用新的相机轨迹重现输入视频的动态场景。该工作的核心创新在于利用预训练的文本到视频模型的生成能力,通过一种简单但强大的视频条件机制。为克服高质量训练数据的稀缺问题,研究者使用虚幻引擎5构建了一个全面的多相机同步视频数据集,涵盖多样化的场景和相机运动。
591 2
今日AI论文推荐:ReCamMaster、PLADIS、SmolDocling、FlowTok
|
监控 安全 网络虚拟化
|
编译器 Go API
go generate指南:代码自动生成
go generate指南:代码自动生成
4278 0
|
存储 负载均衡 容灾
架构设计|基于 raft-listener 实现实时同步的主备集群
本文介绍如何从数据库内核角度建立一套实时同步的主备集群,确保线上业务的高可用性和可靠性。本系统采用双 AZ 主备容灾机制,并要求数据与 schema 实时同步,同步时延平均在 1 秒内,p99 在 2 秒内。此外,系统支持高效的自动或手动主备切换,并能在切换过程中恢复丢失数据。
411 0
[UDS] --- DiagnosticSessionControl 0x10 service
[UDS] --- DiagnosticSessionControl 0x10 service
1962 0
|
存储 安全 算法
从系统复杂性看软件架构
一、架构设计是为了解决系统复杂性整个软件技术发展的历史,其实就是一部与“复杂性”斗争的历史。架构也是为了应对软件系统复杂性而提出的一个解决方案,其主要目的是为了解决软件系统复杂性带来的问题。这里包括两个名词:系统和复杂性,下面分别对其进行解析1.1 复杂性的定义复杂性这个名词很复杂,麻省理工学院的物理学家塞思·劳埃德统计了复杂性的定义数量,至少有45种:信息 ,熵 ,算法复杂性 ,算法信息量 ,费
11014 2
从系统复杂性看软件架构
|
消息中间件 缓存 Linux
RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)
学完 RT-Thread 内核,从本文开始熟悉了解 RT-Thread I/O 设备管理相关知识。
1259 0
RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)

热门文章

最新文章