绝绝子!三次握手 四次挥手过程,小白必看的网络通信秘籍😎面试必备

27 阅读2分钟

一些基础概念

TCP报文标志位和序列号

1.SYN (Synchronize Sequence Numbers)

同步序列号标志位

值为1或0(1位)

SYN=1 表示这是一个连接请求或连接接受报文

用于建立连接时的同步序列号

2.ACK (Acknowledgment)

确认标志位

值为1或0(1位)

ACK=1 表示确认号字段有效

在连接建立后所有报文的ACK都为1

3.seq (Sequence Number)

序列号

32位的数字

用于标识从TCP发送端向TCP接收端发送的数据字节流的序号

初始序列号(ISN)是随机的

表示这个报文段的第一个字节的序号是1000

4.ack (Acknowledgment Number)

确认号

32位的数字

期望收到对方下一个报文段的第一个字节的序号

等于已收到的数据的最后一个字节的序号加1

例如:ack=1001 表示序号为1000的数据已收到,下次期望收到1001序号的数据

三次握手过程

为什么需要三次握手

  1. 确认双方通信能力

    • 发送能力
    • 接收能力
    • 双方的序列号能被对方正确接收和确认
  2. 防止旧连接

    • 如果是历史连接的 SYN 报文,服务器回复 SYN+ACK 后
    • 客户端会回复 RST 报文,而不是 ACK
    • 从而避免建立错误的连接
  3. 同步双方初始序列号

    • 防止网络包被延迟、重复或丢失
    • 保证数据包的有序性

四次挥手过程

为什么需要四次挥手?

  1. TCP是全双工通信

    • 两端都能独立发送和接收数据
    • 关闭连接时两个方向都需要单独关闭
  2. 确保数据完整传输

    • 服务器收到关闭请求时可能还有数据需要发送
    • 等待数据发送完毕后才能关闭