1、TCP 三次握手
接下来介绍向服务器发送 HTTP 请求阶段,HTTP 请求分为三个部分:TCP 三次握手
、http 请求响应信息
、关闭 TCP 连接
。
在客户端发送数据之前
,会发起 TCP 三次握手用以同步
客户端和服务端的序列号
和确认号
,并交换 TCP 窗口大小信息
。
1-1.TCP 三次握手的过程如下:
- 客户端发送一个带
SYN=1,Seq=X
的数据包到服务器端口(第一次握手,由浏览器发起,告诉服务器我要发送请求了) - 服务器发回一个带
SYN=1, ACK=X+1, Seq=Y
的响应包以示传达确认信息(第二次握手,由服务器发起,告诉浏览器我准备接受了,你赶紧发送吧) - 客户端再回传一个带
ACK=Y+1, Seq=Z
的数据包,代表“握手结束”(第三次握手,由浏览器发送,告诉服务器,我马上就发了,准备接受吧)
各个字段的说明:
- SYN表示建立连接
- Seq是序列号,这是为了连接以后传送数据用的
- ACK表示响应,是对收到的数据包的确认,值期望对方继续发送的那个数据包的序列号,因为已经接收了X,期望接收下一个X+1
1-2.为什么要三次握手
这是为了防止无效
的连接请求报文到达服务器
。
因为有可能A先发了一个连接请求报文,但是由于网络的 问题,迟迟没有到达B主机,这时候,A主机就超时重传了该报文,然后B主机响应了该请求报文,但是不妙了,第一个报文居然又到了B主机,那么B主机就会把它作为新的连接请求,如果只有两次握手,那么B主机对于该连接请求也会建立连接,但是如果是三次握手,B主机发出确认报文后,A主机不予理睬,这样就不会建立TCP连接了。