TCP连接建立的条件
我们这里从TCP连接建立的前提入手。TCP连接建立的前提,是通信的双方都要知道本方和对方的发送和接收功能,都是正常的。也就是在TCP连接建立之前,有以下八个待确认项。
服务端发送 | 服务端接收 | 客户端发送 | 客户端接收 | |
---|---|---|---|---|
服务端 | ○ | ○ | ○ | ○ |
客户端 | ○ | ○ | ○ | ○ |
图例:○:待确认,√:已确认 |
三次握手
第一次握手
客户端向服务端发送连接请求报文段。该报文段的头部中SYN=1,ACK=0,seq=x。
服务端接收到报文后,可以确认客户端的发送功能,服务端的接收功能,都是正常的。
服务端发送 | 服务端接收 | 客户端发送 | 客户端接收 | |
---|---|---|---|---|
服务端 | ○ | √ | √ | ○ |
客户端 | ○ | ○ | ○ | ○ |
第二次握手
服务端收到连接请求报文段后,如果同意连接,则会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。
客户端接收到第二次握手报文后,可以确认服务端的发送功能,客户端的接收功能是正常的。不过,此时服务端并不知道自己的发送功能,客户端的接收功能是否正常。
服务端发送 | 服务端接收 | 客户端发送 | 客户端接收 | |
---|---|---|---|---|
服务端 | ○ | √ | √ | ○ |
客户端 | √ | √ | √ | √ |
第三次握手
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。该报文段的头部为:ACK=1,seq=x+1,ack=y+1
此时,服务端就可以确认自己的发送功能,客户端的接收功能是正常的。
服务端发送 | 服务端接收 | 客户端发送 | 客户端接收 | |
---|---|---|---|---|
服务端 | √ | √ | √ | √ |
客户端 | √ | √ | √ | √ |
至此,八个确认项都确认完成。服务端和客户端就可以开始愉快地通信了。