TCP 协议

一 . 三次握手

具体过程

  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 数据包,并同意关闭连接。四次挥手完成后,客户端和服务器之间的连接就关闭了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值