1. TCP三次握手过程
- 最开始双方都是CLOSED关闭状态。然后服务端开启监听某个端口,进入
LISTEN
状态。 - 客户端发起请求,发送
SYN
,客户端变为SYN_SENT
(同步消息发送)状态 - 服务端收到
SYN
请求,返回一个SYN
和ACK
,变为SYN_REVD
(同步消息接收)状态
当客户端收到服务器返回的的
SYN
和ACK
之后,即可知道服务器能够正常接收
- 客户端收到服务端返回的消息,再向服务端返回一个
ACK
,开始变为ESTABLISHED
状态
当服务器收到客户端发来的
ACK
后,服务端才能知道客户端能够正常接收
- 服务端收到客户端传来的
ACK
之后,变为ESTABLISHED
状态,连接建立
2. 抓包分析
使用wireshark 进行抓包
可以看到
- 6523请求和80端口建立连接,发送
SYN
,此时的Seq
= 0- 80端口向6523返回一个
SYN
和ACK
,此时的的Seq
=0,Ack
为80端口发送的Seq + 1
,值为1- 6523接收到80端口的
SYN
和ACK
之后,向80端口再发送一个ACK
,此时的Seq
= 1,Ack
= 1。三次握手完成,连接建立。
3.为什么不能是两次握手
如果只进行两次握手的话,服务端不知道客户端能否正常接收消息。
是为了防止已经失效的连接请求报文突然又传到了服务端,假设没有第三次握手,连接将被建立,进而浪费资源。