TCP/IP协议是传输层的一个面向连接的安全可靠的传输协议。
刚开始客户端处于 closed 的状态,服务端处于 listen 状态;
第一次握手是由客户端发起,客户端会向服务端发送一个SYN报文,报文里面SYN标志位是置1的,并指明客户端的初始化序列号。此时客户端处于SYN_Send状态;
当服务端收到这个SYN 报文的时候就知道客户端要和我发起一个新的连接,于是服务端就向客户端发送一个自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ack 的值,ACK位置1,表示自己已经收到了客户端的 SYN报文,此时服务器处于SYN_RCVD的状态;以上两次握手之后,对于客户端而言,其实是已经知道了所有信息,就是我既能给服务端发送消息,我还能收到服务端的消息;对于服务端而言,两次握手是不够的,因为到目前为止,服务端只知道一件事情,客户端给我发送的消息我收的到,但是我发给客户端的消息,客户端能不能收到我还不知道。
所以还要进行第三次握手。第三次握手就是当客户端收到服务端发过来的确认消息的SYN报文之后,还要继续给服务端进行一个回应,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ack 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于established状态。
通过以上三次连接,不管是服务端还是客户端都彼此知道了,我既能给对方发送消息也能收到对方的消息,那么这个连接就能被安全的建立了。
三次握手的作用:
1、确认双方的接受能力、发送能力是否正常。
2、指定自己的初始化序列号,为后面的可靠传送做准备。
3.为了保证能建立一个安全可靠的连接。