云计算百科
云计算领域专业知识百科平台

Java中的TCP协议(如果想知道Java中有关TCP协议的知识,那么只看这一篇就足够了!)(上)

        前言:TCP协议是网络通信的基础,其提供可靠、面向连接的数据传输,确保数据包按序到达且无丢失,TCP 广泛应用于文件传输、即时通讯和 Web 服务,是我们在学习网络编程的重要基础。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

在正式开始讲解之前,先让我们看一下本文大致的讲解内容:


目录

1.TCP 头部组成

1. 源端口号

2. 目的端口号

3. 序列号

4. 确认号

5. 数据偏移

6. 保留位

7. 标志位

8. 窗口大小

9. 校验和

10. 紧急指针

11. 可选字段

12. 数据部分

2.TCP的可靠传输机制

        (1)确认应答(ACK)

        (2)序列号去重

        (3)超时重传

3.TCP连接管理

        (1)三次握手

【1】客户端发送 SYN 请求

【2】服务器返回 SYN-ACK

【3】客户端发送 ACK,连接建立

        (2)四次挥手

【1】客户端发送 FIN 关闭请求

【2】服务器返回 ACK

【3】服务器发送 FIN 关闭请求

【4】客户端返回 ACK,连接关闭


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有着很大的帮助,希望读者可以耐心的读完并进行总结理解!!!


以上就是本篇文章的全部内容了~~~

赞(0)
未经允许不得转载:网硕互联帮助中心 » Java中的TCP协议(如果想知道Java中有关TCP协议的知识,那么只看这一篇就足够了!)(上)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!