前言:TCP协议是网络通信的基础,其提供可靠、面向连接的数据传输,确保数据包按序到达且无丢失,TCP 广泛应用于文件传输、即时通讯和 Web 服务,是我们在学习网络编程的重要基础。
✨✨✨这里是秋刀鱼不做梦的BLOG
✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客
在正式开始讲解之前,先让我们看一下本文大致的讲解内容:
目录
1.TCP 头部组成
TCP全称为 "传输控制协议(Transmission Control Protocol"),人如其名,其是要对数据的传输进行一个详细的控制,那么TCP协议的构成是什么样的呢?
TCP协议格式:
TCP最小长度为 20 字节,如果包含可选字段,最大可达 60 字节,这里我们对上述的每个组成进行一个简单的总括:
字节偏移 | 字段名称 | 长度(比特) | 简单说明 |
---|---|---|---|
0-15 | 源端口号 | 16 | 发送方的端口号 |
16-31 | 目的端口号 | 16 | 接收方的端口号 |
32-63 | 序列号 | 32 | 数据包的序号 |
64-95 | 确认号 | 32 | 用于确认的序列号 |
96-99 | 数据偏移(头部长度) | 4 | 以 4 字节为一个单位,最大值为 15(即 60 字节) |
100-102 | 保留位 | 3 | 保留位置,值为 0 |
103-111 | 标志位 | 9 | SYN、ACK、FIN 等控制连接 |
112-127 | 窗口大小 | 16 | 允许的接收窗口 |
128-143 | 校验和 | 16 | 用于确保数据正确性和完整性 |
144-159 | 紧急指针 | 16 | 紧急数据指针 |
160-… | 可选字段 | 0-40 字节 | 可能包括 MSS、窗口缩放等 |
…-… | 数据 | 不固定 | 传输的数据 |
——通过上边的表格内容,我们就大致了解了TCP的头部组成都有哪些了,现在让我们逐个进行讲解一下:
1. 源端口号
用于表示发送方的端口号,确定数据从哪个端口发送,就像寄件人的地址,表示包裹是从哪个地方发送的。
2. 目的端口号
用于表示接收方的端口号,确定数据要发往的端口,类似收件人的地址,表示包裹要发送到哪里。
3. 序列号
标识当前数据段的起始字节序号,确保数据按序到达,TCP 连接建立时,序列号由发送方随机生成,其就相当于数据的编号,用于保证数据包的顺序,如果数据被分成多份,那么这个编号能帮接收方按顺序拼起来。
4. 确认号
用于确认收到的数据,表示接收方期望接收的下一个字节序号,用于对数据进行确认操作,仅当 ACK 标志位为 1 时有效,这就类似快递的签收单,表示东西已经被签收了一样。
5. 数据偏移
用于指示 TCP 头部的长度,以4字节为单位,例如值为 5,那么头部长度为 5 × 4 = 20 字节
6. 保留位
保留字段,当前未使用,必须填 0。
7. 标志位
用于控制 TCP 连接状态,其中包括
SYN(同步)——建立连接(握手)。
ACK(确认)——确认收到数据。
FIN(终止)——关闭连接。
RST(复位)——异常终止连接。
PSH(推送)——立即发送数据。
URG(紧急)——数据紧急处理。
ECE/CWR/NS——用于拥塞控制。
8. 窗口大小
表示接收方能接收的最大字节数,用于流量控制,这就好比像告诉发送方:“我一次最多能接收多少数据”,如果太多,就可能会溢出。
9. 校验和
用于检测 TCP 头部和数据在传输过程中的错误,发送方计算并填充,接收方校验,就像快递防伪码一样。
10. 紧急指针
仅在 URG 标志位为 1 时生效,表示紧急数据的偏移量。
11. 可选字段
包含最大段大小、窗口缩放等选项,用于扩展 TCP 功能。
12. 数据部分
其表示的是TCP头部后面的数据部分。
——至此我们就了解了TCP头部组成的所有内容了!!!
2.TCP的可靠传输机制
为了确保数据能够可靠地传送到接收方,TCP采用了确认应答(ACK)、序列号去重 和 超时重传机制,下面我们逐一重点讲解这三个机制。
(1)确认应答(ACK)
确认应答(ACK) 是 TCP 中实现可靠传输的核心机制之一,其主要作用是确保发送的数据包能够成功到达接收方,并且接收方能够及时告知发送方是否成功收到数据。
工作原理:
-
每个数据包都需要确认:当发送方发送数据包时,它会等待接收方的确认应答(ACK),接收方收到数据包后,会向发送方返回一个 ACK 包,表示已经确认收到了发送过来的数据包。
-
ACK的内容:ACK 包中包含的是要接收到数据包的下一个期望的序列号(即确认号),这意味着接收方已经成功接收了给i序列号之前的所有数据包。
-
顺序保证:接收方每次确认的是最小未接收的数据包的序列号,这意味着通过序列号的确认,发送方知道哪些数据包已经成功到达,哪些仍未到达。
确认应答就好比发送方发送了数据包1、2、3、4,接收方收到数据包1、2后,会发送一个确认应答 ACK(3),表示它已经收到序列号小于3的数据包,期望收到序列号为3的数据包。
这样我们就了解了TCP的可靠传输机制的确认应答(ACK)机制了。
(2)序列号去重
序列号去重是用来处理数据包乱序和重复发送问题的,当网络不稳定或路由改变等原因,数据包可能会乱序到达接收方,甚至可能出现重复数据包的问题。
其工作原理:
-
序列号的分配:每个数据包都被分配一个唯一的序列号,这个序列号用于标识数据包的顺序,当接收方接收到数据包时,它会根据序列号来决定数据包的顺序,确保数据的正确接收。
-
乱序处理:当数据包乱序到达时,接收方可以根据序列号将它们重新排序,保证数据按正确的
-
重复包的丢弃:如果接收方收到相同序列号的包,那么它就会丢弃该包,接收方只会向发送方确认新的数据包。
从上面的工作原理中我们可以看出,序列号去重的操作确保了数据的顺序性,即使数据包乱序到达,接收方也能按照序列号正确地排序,并且通过序列号,接收方能识别重复的数据包
这样我们就了解了TCP的可靠传输机制的序列号去重机制了。
(3)超时重传
超时重传它的主要作用是在数据丢失或网络延迟较高的情况下,确保数据最终能够到达接收方。
工作原理:
-
发送数据并等待 ACK:发送方发送数据包后,会启动一个定时器,开始计时,等待接收方的 ACK 确认。
-
超时判断:如果在设定的超时值内,发送方没有收到 ACK,它就会认为数据包丢失,并重新发送该数据包。
从上面的介绍中我们可以发现,在数据包丢失或网络延迟情况下,发送发能够重新发送数据包,从而保证数据最终到达接收方。
这样我们就了解了TCP的可靠传输机制的超时重传机制了。
——那么学习完了上述的可靠传输的三个机制之后,接下来让我们学习一下TCP中有关连接管理的知识。
3.TCP连接管理
在计算机网络中,TCP采用三次握手进行连接建立,并使用四次挥手进行连接关闭,那么什么是三次握手,什么又是四次挥手呢?
(1)三次握手
——TCP 连接的建立需要三次交互,确保客户端与服务器都准备就绪,并同步彼此的初始序列号,以下是其简略的步骤:
【1】客户端发送 SYN 请求
——客户端向服务器发送一个 SYN报文,表明自己要建立连接,并带上一个初始序列号
【2】服务器返回 SYN-ACK
——服务器收到 SYN 后,如果同意建立连接,会返回 SYN-ACK 报文,其中:
SYN 表示同意建立连接。
ACK(Acknowledgment)表示确认客户端的 SYN。
【3】客户端发送 ACK,连接建立
——客户端收到 SYN-ACK 之后,向服务器发送 ACK(确认)报文。
这样我们就大致的了解了三次握手的流程了!!!
(2)四次挥手
——TCP 连接的关闭需要四次交互,确保双方都正确释放资源,防止数据丢失,以下是其简略的步骤:
【1】客户端发送 FIN 关闭请求
——当客户端不再需要通信时,会发送 FIN(Finish) 报文
【2】服务器返回 ACK
——服务器收到 FIN 后,会发送一个 ACK 确认报文
【3】服务器发送 FIN 关闭请求
——服务器处理完剩余数据后,也发送 FIN 报文,通知客户端可以关闭
【4】客户端返回 ACK,连接关闭
——客户端收到服务器的 FIN 后,发送 ACK 报文
这样我们就大致的了解了四次挥手的流程了!!!
从上文中我们初步的了解了TCP头部的组成,TCP的可靠传输机制和TCP连接管理,这些对于我们了解TCP有着很大的帮助,希望读者可以耐心的读完并进行总结理解!!!
以上就是本篇文章的全部内容了~~~
平台声明:以上文章转载于《CSDN》,文章全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,仅作参考。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2302_80198073/article/details/146630915