在 DNS 查找之后,浏览器就知道了我们实际要查找的 IP 地址。现在是第二步了:与位于该 IP 地址的服务器建立连接。
为了创建这样的连接,浏览器执行一种称为 TCP/IP 三次握手(也称为SYN-SYN-ACK)的过程。毫不奇怪,握手由三个步骤组成。
要从服务器获取数据,必须在浏览器和服务器之间建立连接。但是,浏览器首先必须询问服务器当前是否能够建立此连接。
如果服务器有可连接的开放端口,那么服务器就会让浏览器知道它可以建立连接!
浏览器从服务器接收此消息,然后将消息发送回服务器以实际建立连接。
就像计算机科学中的所有事情一样,它比这个要复杂得多。下面我们来看看为了建立这种连接,浏览器和服务器实际上向对方发送了什么。
传输控制协议(Transmission Control Protocol,TCP)管理客户端(在本例中是浏览器)和服务器如何实际发送消息、接收消息,以及这些消息实际上是什么。TCP 将数据拆分成更小的信息单元,称为段(或者包)。这些段是网络可以传递的数据块。一旦较小的数据块,即段,到达目的地,TCP 就会把它们重新组装起来。TCP 段由如下内容组成:
我不会在这里全部介绍它们,现在只介绍序号、确认号、ACK和SYN。
首先,客户端(本例中的浏览器)通过发送同步序号(SYN
)设置为1
的TCP数据段开始三次握手。此标志让服务器知道数据段包含序号。每次发起新连接时,客户端都会随机选择这个号码(初始序号)。
服务器收到此数据段,如果一切正常,则确认收到了客户端发送的 SYN
数据段。它通过返回同时设置了 ACK
和 SYN
标志、一个序号和一个确认号的数据段来实现这一点。
从服务器发送到客户端的确认号是从客户端发送到服务器的序号的值,递增 1
。SYN 段包含一个序号 4091
,因此服务器发回确认号 4092
。
服务器还将随机选择的序号发送回客户端。
客户端收到此数据段,然后发回一个数据段。该数据段设置了 ACK
标志和一个确认号,该确认号是从服务器发送到客户端的序号的值,递增 1
(就像上一步一样)。
服务器收到设置了 ACK
标志的该段后,连接就建立了!现在有了连接,是时候通过 HTTP 实际传输数据了。