一文带你了解tcp协议

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 一文带你了解tcp协议

tcp协议

tcp协议的概念以及特点

TCP(传输控制协议)是一种在计算机网络中广泛使用的面向连接的协议。它提供了可靠的、有序的和基于字节流的数据传输。tcp协议也是在传输层中进行的


以下是 TCP 协议的一些关键特点:


面向连接:在进行数据传输之前,发送方和接收方需要建立一个连接。连接的建立是通过三次握手机制实现的,确保双方都愿意进行通信。


可靠性:TCP 提供可靠的数据传输机制,通过使用确认应答、序列号、超时重传和流量控制等技术来确保数据的可靠传输。它能够自动重传丢失的数据段,并按正确的顺序传递数据。


有序性:TCP 保证数据按发送顺序到达接收方。每个数据包都有一个序列号,接收方可以使用序列号来重新排序已接收的数据。


拥塞控制:TCP 使用拥塞控制机制来避免网络拥塞。它会根据网络的状况动态调整发送数据的速率,以避免网络过载。


双向通信:TCP 连接是全双工的,允许双方同时进行发送和接收数据的操作。


流量控制:TCP 使用滑动窗口机制来进行流量控制。接收方通过告知发送方自己当前可接收的数据量来控制发送数据的速率。


建立与释放连接:TCP 使用四次挥手机制来正常关闭连接。双方通信结束后,发送方和接收方会交换一系列的控制消息来协商关闭连接。


TCP 是一种可靠性较高、适用于可靠数据传输的协议。它在许多应用层协议中广泛使用,如 HTTP、FTP、SMTP 等。TCP 在网络通信中扮演着重要的角色,确保数据的可靠传输和有序交付。


tcp协议与udp协议的区别

TCP(传输控制协议)和 UDP(用户数据报协议)是在计算机网络中常见的两种传输层协议,它们有以下主要区别:


连接和无连接:TCP 是面向连接的协议,通信双方在发送数据之前需要先建立连接,然后进行可靠的数据传输。UDP 是无连接的协议,通信双方之间不需要建立连接,可以直接发送数据报。


可靠性:TCP 提供可靠的数据传输,通过确认应答、序列号、重传等机制确保数据的完整性和可靠性。UDP 不提供可靠性保证,数据报被发送之后,不会接收确认或进行重传,因此可能出现丢失、重复或乱序的数据。


有序性:TCP 保证数据按照发送的顺序进行接收。UDP 不保证数据报的有序性,接收方可能按照不同的顺序接收数据报。


拥塞控制:TCP 使用拥塞控制机制来避免网络拥塞,根据网络状况动态调整发送速率。UDP 不提供拥塞控制功能,发送方可以以任何速率发送数据,因此可能会导致网络拥塞。


数据量和性能:TCP 需要维护连接状态和数据传输的各种控制信息,因此头部较大,传输协议开销相对较高。UDP 的头部较小,传输开销较低,适合对实时性要求较高、传输量较小的数据。


应用场景:TCP 适合要求可靠传输的应用,例如文件传输、电子邮件等。UDP 适合实时性要求较高、丢几个包无所谓的应用,例如音频/视频流、游戏等。


综上所述,TCP 和 UDP 在连接性、可靠性、有序性、拥塞控制、开销和应用场景等方面存在显著差异。根据具体的需求和应用场景,选择适合的协议可以提高通信效率和可靠性。


tcp的三次挥手

三次握手是TCP(传输控制协议)建立连接时的一种具体过程。它确保客户端和服务器之间的通信双方都同意建立连接并能够进行数据传输。


名词描述:


seq(sequence number)用算法随机生成的序列号,将报文序列传输

SYN(synchronous) ,发起新连接

ack(acknowledgement number) 确认号 = seq + 1

ACK(acknowledgement) 确认序列号有效

Fin(finish) 关闭连接

image.png


第一次握手(SYN): 客户端发送一个带有 SYN(同步)标志的TCP段给服务器。这个段中的序列号(seq)是一个随机数,用于标识发送方的起始序列号。

第二次握手(ACK+SYN): 服务器收到客户端的TCP段后,会发送一个带有 SYN 和 ACK(确认)标志的TCP段作为应答。这个段中的序列号seq是服务器的起始序列号(seq),确认号(ack)是客户端序列号加1。

第三次握手(ACK): 客户端收到服务器的TCP段后,发送一个带有ACK标志的TCP段给服务端,来确认服务器应答。这个段中的序列号seq = 客户端的seq + 1 确认号ack = 服务端的seq + 1, 表示客户端已经准备好进行数据传输。

通过这个三次握手的过程,客户端和服务器都能够确认对方的请求和应答,并建立起可靠的连接。这个过程保证了双方的通信能够正常进行,同时也能确保每个方向上的序列号的正确性。一旦完成三次握手,双方就可以开始进行数据的传输。


需要注意的是,由于网络的延迟和丢包等因素,可能造成握手过程的延迟或中断。因此,TCP协议会设置一定的超时重试机制,以确保握手过程的可靠性。


tcp四次挥手

四次挥手是在 TCP 协议中用于关闭连接的过程,在双方完成数据传输后,通过一系列的交互来确保双方都完成了数据的传输并关闭连接。


image.png


第一次挥手(FIN):当一客户端决定关闭连接时,它发送一个带有 FIN(Finish)标志的 TCP 段给服务端。表示客户端不再发送数据,但仍然可以接收数据。这个段的序列号(seq)表示发送客户端最后一个发送的字节的序列号。此时,客户端进入FIN_WAIT_1等待状态


第二次挥手(ACK):服务端收到第一次挥手的段后,发送一个带有 ACK 标志的 TCP 段作为应答,确认收到关闭请求,这个 ACK 报文段不含任何数据。这个段的序列号(seq)表示服务端希望再次接收的字节的序列号,而确认号(ack)表示下一个期望接收的字节的序列号。在这个阶段,会有一段时间的等待,服务端可以将未完成的数据发送给客户端。等待结束后,服务端确认并同意客户端的关闭请求


第三次挥手(FIN) : 服务端也决定关闭连接时,它发送一个带有 FIN 标志的 TCP 段给客户端。表示接收方不再发送数据。服务端进入LAST_ACK状态,等待客户端确认关闭请求,并且服务端不会再发送数据了,可以接受数据


第四次挥手(ACK): 客户端收到第三次挥手的 TCP 段后,此时客户端的状态为TIME_WAIT会进入一个到一个超时等待的过程2MSL(两倍的最大数据包生存期) , 如果在2MSL时间内,客户端没有再收到数据,客户端会发送一个带有 ACK 标志的 TCP 段作为应答,确认接收到服务器的关闭请求。此时双方连接断开


通过这个四次挥手的过程,双方都能够确认对方的关闭请求和应答,最终完成连接的关闭。这个过程保证了双方的数据传输完整性和连接的正常关闭。


为什么会有2MSL的超时等待

2MSL(Maximum Segment Lifetime)是指TCP连接关闭后等待的时间,即两倍的报文段最大生存时间。在四次挥手过程中,当客户端发送最后一个ACK报文段确认对方的关闭请求后,会进入TIME_WAIT状态,并等待一段时间持续2MSL的时间。


2MSL的超时等待有以下几个目的和好处:


确保最后一个ACK能够可靠地到达。当一方发送最后一个ACK报文段时,可能会因为网络延迟、传输丢失或乱序等问题导致对方无法正确接收到。2MSL的等待期间,使得所有可能的重复报文都能够被丢弃,确保对方接收到最后的ACK。


防止旧的报文段在新连接中被接收。在之前的连接关闭后的一段时间内,可能仍然存在网络上滞留的旧报文段。如果客户端或服务器在短时间内建立了一个使用相同IP地址和端口号的新连接,旧的报文段可能会被错误地接收并导致混乱。通过等待2MSL,可以确保旧的报文段都被丢弃,避免对新连接的干扰。


允许可能延迟的报文段从网络中消失。2MSL的时间等待可以确保网络中所有相关连接的报文段都被丢弃,避免将旧的报文段误认为是当前连接的一部分。


如果没有2MSL的超时等待时间,假设ACK包丢失,那么服务端接收不到ACK,那么服务端的关闭请求就无法同意,那么服务端就无法断开了, 有了2MSL的超时等待时间,当ACK包丢失时,客户端会重新上传。(参考满哥的http://t.csdn.cn/1AV08)


总结

tcp协议,无论前后端都必须掌握,tcp协议也是面试常被问到的题目,希望能够有所帮助!

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
网络协议 算法 安全
|
2月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
88 1
UDP 协议和 TCP 协议
|
1月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
28 1
|
2月前
|
网络协议
TCP 协议
TCP 协议
43 1
|
6月前
|
域名解析 缓存 网络协议
|
6月前
|
网络协议 网络性能优化
运输层中的UDP和TCP协议
总结来说,UDP适用于那些要求速度和实时性高于可靠性的应用,而TCP适用于要求数据可靠性和完整性的应用。选择使用哪种协议取决于您的应用需求。
77 1
|
6月前
|
XML 网络协议 算法
UDP/TCP协议特点
UDP/TCP协议特点
113 0
|
6月前
|
消息中间件 网络协议 网络性能优化
TCP和UDP协议详解
TCP和UDP协议详解
|
网络协议 算法 网络性能优化
关于TCP协议我们需要知道的
TCP协议是OSI模型中的传输层协议,用于建立和维护两个程序间的数据交换连接,以及通过Internet发送信息。TCP协议的主要特点包括面向连接、可靠性、流控制和拥塞控制。其中,三次握手和四次挥手是建立和断开TCP连接的必要过程。此外,TCP协议还提供了流控制机制来控制数据发送方的发送速度,以避免网络拥塞问题。
689 0
关于TCP协议我们需要知道的
|
缓存 网络协议
TCP协议与UDP协议
TCP协议与UDP协议
94 0