📑 题目:19. 什么是 TCP 三次握手?
参考解析
三次握手,简单来说,就是:
- 发送方:我要和你建立链接?
- 接收方:你真的要和我建立链接么?
- 发送方:我真的要和你建立链接,成功。
详细来说,步骤如下:
TCP 三次握手的干货
第一次握手:Client 将标志位
SYN=1
,随机产生一个值seq=J
,并将该数据包发送给 Server 。此时,Client 进入SYN_SENT 状态,等待 Server 确认。第二次握手:Server 收到数据包后由标志位
SYN=1
知道Client请求建立连接,Server 将标志位SYN
和ACK
都置为 1 ,ack=J+1
,随机产生一个值seq=K
,并将该数据包发送给 Client 以确认连接请求,Server 进入SYN_RCVD
状态。此时,Server 进入 SYC_RCVD 状态。第三次握手:Client 收到确认后,检查
ack
是否为
J+1
,
ACK
是否为 1 。
- 如果正确,则将标志位
ACK
置为 1 ,ack=K+1
,并将该数据包发送给 Server 。此时,Client 进入 ESTABLISHED 状态。 - Server 检查
ack
是否为K+1
,ACK
是否为 1 ,如果正确则连接建立成功。此时 Server 进入 ESTABLISHED 状态,完成三次握手,随后 Client 与 Server 之间可以开始传输数据了。
仔细看来,Client 会发起两次数据包,分别是
SYNC
和ACK
;Server 会发起一次数据包,包含SYNC
和ACK
。也就是说,三次握手的过程中,Client 和 Server 互相做了一次SYNC
和ACK
。