三次握手
正常情况下,TCP要经过三次握手建立连接,四次挥手释放连接。
三次握手过程:
- 客户端首先发起建立连接请求,向服务器发送一个SYN希望建立连接,并消耗一个序列号。
- 服务器收到客户端的SYN请求之后,如果能够建立连接,向客户端返回一个SYN+ACK,表示确认应答。
- 客户端收到服务器的确认应答后,向服务器端在发送一个ACK确认应答。
以上过程其实很好理解,下面总结在三次握手过程,客户端与服务器的状态变化:
服务器端状态转化:
- 起初,客户端与服务器都是CLOSED状态。B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(监听)状态,等待客户的连接请求。若有,则作出响应。
- 一旦监听到连接请求,就将该连接放入内核等待队列,状态就变化为SYN_RCVD同步接收。
- 服务器端在接收到客户端的确认应答报文时,就进入ESTABLISHED状态。
客户端状态变化:
- 客户端向服务器发送SYN发送同步报文段,从CLOSED状态变化为SYN_SENT同步发送状态。
- 客户端向服务器发送ACK确认应答后,就变为了ESTABLISHED状态。
- 双方状态都变成ESTABLISHED说明连接建立,此时就可以读写数据通信了。