通信协议 | 三次握手、七次握手、四次挥手

TCP/IP 传输协议的 TCP 协议是面向连接的,也就是传输数据之前,必须建立可靠的连接。建立连接的过程中,需交换信息(如选取哪种协议、协议版本等),这个过程称为握手 handshaking

握手过程中会协商后续通信使用的参数,如传输速率、编码方式、校验,以及其他协议选取、硬件支持的功能等。握手是两个实体之间的通信,但在 TCP/IP 中握手常指 TCP 的三次握手。

1. 三次握手

TCP 中的数据传输、连接建立与终止都由特定控制参数管理,控制参数有以下这些:

参数 用途
SYN 用于启动和建立连接时,同步设备之间的序列号。0到2^32 - 1的随机数。
ACK 向另一端确认已经收到 SYN,数值为收到 SYN 增一。
SYN-ACK 确认之前收到了 SYN,数值为自定义值。
FIN 终止连接。
RST 重置连接。

建立 TCP 连接需要三次握手:

  1. 客户端想要连接服务端时,向服务端发送 SYN message。Message 还包含 sequence number(32位的随机数),ACK 为0,window size、最大 segment 大小。例如,如果 window size 是 2000 bits,最大 segment 大小是 200 bits,则最大可传输 segments 是 10 data。
  2. 服务端收到客户端 synchronization request 后,回复客户端 SYN 和 ACK。ACK 数值是收到的 SYN 加一。例如客户端发送的 SYN 是 1000,则服务端回复的 ACK 是 1001。如果服务端也想建立连接,回复中还会包括一个 SYN,这里的 SYN 是另一随机数,与客服端的 SYN 不相同。这一阶段完成时,客户端与服务端的连接已经建立。
  3. 收到服务端的 SYN 后,客户端回复 ACK,ACK 值是 SYN 值加一。这一过程完成后,服务端与客户端的连接也建立了起来。

TCP 连接的双方通过三次握手确定 TCP 连接的初始序列号、窗口大小以及最大数据段,这样通信双方就能利用连接中的初始序列号保证双方数据段的不重不漏,通过窗口大小控制流量,并使用最大数据段避免 IP 协议对数据包分片。

换个角度看为什么需要三次握手?客户端和服务端通信前要进行连接,三次握手就是为了确保自己和对方的收发能力是正常的。

  1. 第一次握手:客户端发送、服务端接收网络包,服务端可以得出:客户端发送能力、服务端接收能力是正常的。
  2. 第二次握手:服务端发送、客户端接收网络包。从客户端的视角来看,我接收到了服务端发送的响应数据包,说明服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TrustZone_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值