之前讲了「从输入 URL 再到浏览器成功看到界面」中的域名是如何变成 IP 地址的,了解了 DNS 相关的东西。这篇文章就聊聊发生在 DNS 解析之后的操作——建立连接。也就是我们常说的三次握手。
看到三次握手你可能会说,这不是面试都被问烂了的题吗?
三次握手不就是:
- 服务器开始为
CLOSE
状态,然后监听某个端口,此时服务器会进入LISTEN
状态 - 客户端最初也是
CLOSE
状态,客户端会向服务器发送一个带SYN
标志位的数据包,主动发起连接。此时客户端会变成SYN-SENT
状态 - 服务器接收到客户端的数据包之后,通过标志位判断出了客户端想要建立连接。然后返回一个
SYN
和ACK
,此时服务器的状态变为了SYN-RCVD
- 客户端收到了服务器的 ACK 之后,会回一个 ACK 给服务器,回完这个 ACK 之后,客户端的状态就变为了
ESTABLISH
- 服务器收到了客户端回复的 ACK 之后,服务器的状态也变成了
ESTABLISH