TCP 协议

发布于:2025-07-18 ⋅ 阅读:(19) ⋅ 点赞:(0)

一 . 三次握手

具体过程

  1. 第一次握手(客户端 → 服务器:我要连你啦)
    客户端主动发 SYN(同步)数据包 ,包里带着自己的 初始序列号(ISN) ,就像跟服务器喊:“我是客户端,想连你,这是我要开始传数据的序号标记(ISN),准备好接我消息不~”

  2. 第二次握手(服务器 → 客户端:我收到啦,你也准备好接我消息)
    服务器收到客户端的 SYN 后,回复 SYN - ACK(同步 + 确认)数据包 :

    • 包里有服务器自己的 初始序列号(ISN) (相当于服务器说 “这是我要传数据的序号标记” );
    • 还有对客户端 SYN 的 确认号(ACK) ,其实就是客户端 ISN + 1(意思是 “我收到你发的 SYN 啦,下次你该用这个序号接着传” )。
      这一步,服务器既回应了客户端的连接请求,也同步了自己的通信 “序号规则”。
  3. 第三次握手(客户端 → 服务器:我也收到你消息啦,咱开始传数据吧)
    客户端收到服务器的 SYN - ACK 后,发 ACK(确认)数据包 ,包里是对服务器 ISN 的 确认号(ACK = 服务器 ISN + 1 ) 

二 

SYN(同步位,Synchronize)

  • 含义:SYN 是 TCP 报文中的一个标志位,用于在 TCP 连接建立时发起同步请求,标志着连接建立的开始。当 TCP 客户端想要与服务器建立连接时,它会构造一个带有 SYN 标志位的 TCP 报文段,这个报文段就是向服务器发出的 “连接请求信号” 。
  • 作用
    • 请求建立连接:告知服务器客户端想要建立一个 TCP 连接
    • 同步初始序列号:伴随着 SYN 标志位,客户端还会在报文中携带自己的初始序列号(ISN),让服务器知道后续数据传输的起始编号, 为双方的数据传输建立一个有序的基础。

ISN(初始序列号,Initial Sequence Number)

  • 含义ISN 是 TCP 连接中,客户端或服务器随机选择的一个 32 位的数值,作为数据传输时的起始序列号在 TCP 连接建立过程中,客户端和服务器都会各自生成一个 ISN 。这个值是随机生成的,目的是增加安全性,防止网络中存在的旧的、重复的报文段干扰新连接的数据传输。
  • 作用
    • 数据排序:在 TCP 传输数据时,每个 字节 都有一个对应的序列号。ISN 确定了数据传输起始的序列号,后续发送的数据字节会按照顺序依次编号。接收方可以根据这些序列号对收到的数据进行排序,确保数据按照发送的顺序被正确处理。
    • 确认机制:接收方通过发送确认号(ACK)来告知发送方哪些数据已经成功接收。确认号通常是接收到的序列号加 1,表示期望接收的下一个字节的序列号。而 ISN 是这个确认机制的起始点,确保发送方和接收方能够就数据的传输状态达成一致,实现可靠的数据传输。

        在 TCP 三次握手过程中,第一次握手时客户端发送带有 SYN 标志位和自身 ISN 的报文;第二次握手时服务器回复带有 SYN 标志位、自身 ISN 以及对客户端 ISN 确认号的报文;第三次握手时客户端再发送对服务器 ISN 的确认号,通过这样的交互,双方完成了初始序列号的同步和连接的建立。

ACK

        在 TCP 三次握手以及后续的数据传输过程中,ACK(Acknowledgment,确认号 )是一个非常关键的概念,以下为你详细介绍:

基本含义

        ACK 是 TCP 报文中的一个标志位,同时也代表报文中携带的确认号字段。当 ACK 标志位被设置时,表明这个 TCP 报文是一个确认报文,用于告知发送方数据已被成功接收,或者对连接建立请求等进行确认。

在三次握手中的作用

  • 第二次握手(服务器→客户端):服务器收到客户端发来的带有 SYN 标志位的连接请求报文后,会回复一个 SYN - ACK 报文。这里的 ACK 标志位置位,同时报文中的确认号字段的值为客户端初始序列号(ISN)加 1 。这意味着服务器向客户端确认:“我已经收到你发起连接的 SYN 报文了,你可以用新的序列号继续传输数据 。” 比如客户端 ISN 是 100,服务器回复的确认号就是 101,表示期望客户端下次从序号 101 开始发送数据。
  • 第三次握手(客户端→服务器):客户端收到服务器的 SYN - ACK 报文后,发送一个 ACK 报文。此时报文中的确认号是服务器的初始序列号(ISN)加 1。

在数据传输过程中的作用

  • 确认数据接收:发送方发送数据后,接收方会在合适的时候返回带有 ACK 标志位的确认报文。报文中的确认号表示接收方期望收到的下一个字节的序列号。
  • 保证数据可靠传输:发送方在发送数据后,会启动定时器。如果在规定时间内没有收到接收方的 ACK 确认报文,就会认为数据传输可能出现了问题,然后重新发送未被确认的数据,以此来保证数据能够可靠地到达接收方,避免数据丢失。

与其他标志位的配合

        在 TCP 协议中,ACK 很少单独出现,常与其他标志位配合使用。比如在连接建立时与 SYN 配合(SYN - ACK 报文) ;在连接释放时与 FIN(结束标志位)配合,发送 FIN - ACK 报文来确认收到对方的连接释放请求 。通过与其他标志位的协同工作,ACK 在 TCP 协议实现可靠连接和数据传输的过程中发挥着重要作用。

三. 四次挥手

1. 客户端发送 FIN(结束)数据包。这个数据包表示客户端已经完成数据传输,并希望关闭连接。

2. 服务器收到 FIN 数据包后,发送 ACK(确认)数据包。这个数据包表示服务器已经收到客户端的 FIN 数据包,并同意关闭连接。

3. 服务器发送 FIN 数据包。这个数据包表示服务器已经完成数据传输,并希望关闭连接。

4. 客户端收到 FIN 数据包后,发送 ACK(确认)数据包。这个数据包表示客户端已经收到服务器的 FIN 数据包,并同意关闭连接。四次挥手完成后,客户端和服务器之间的连接就关闭了。


网站公告

今日签到

点亮在社区的每一天
去签到