计算机网络高频面试题
什么是 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 。