首先客户端向服务端发起建立连接的请求,第一步客户端在TCP报文格式中,将SYN值变为1,相当于告诉服务端,我要和你建立连接,随机生成seq值代表当前的报文序号,假设是1000。 当服务端接收到这个请求后,向服务端发起响应,此时服务端发送的TCP报文格式中,SYN的值变成1,随机生成seq值代表当前的报文序号,假设是2000,ACK变成1,相当于告诉客户端,我已经收到了你的请求,ack会变成在之前客户端发送的seq值+1,也就是1000+1=1001当客户端收到服务端发送的报文,客户端此时可以确定一件事情,就是客户端发送消息和接受消息都是正常的,但是,对于服务端来说,它只知道自己可以成功接受消息,但是自己能不能成功发送消息,并不知道,所以,只有两次握手肯定是不行的,由于TCP/IP协议是一种可靠的传输层通信协议,所以不能让这种情况发生由此就有了第三步,客户端发送报文,ack值为2001,ACK值为1,相当于告诉服务端,你发送的消息,我已经收到了,那么当服务端接收到这个报文,就可以确认自己是可以正常的接受消息和发送消息了,这就是三次握手的过程。由此就有了第三步,客户端发送报文,ack值为2001,ACK值为1,相当于告诉服务端,你发送的消息,我已经收到了,那么当服务端接收到这个报文,就可以确认自己是可以正常的接受消息和发送消息了,这就是三次握手的过程。首先客户端发送报文,FIN=1,相当于告诉服务端,我和你断开连接了,seq=2345,这里的seq不是随机生成的,而是由之前一系列操作演变而来的。 当服务端接收到报文,发送报文给客户端,ACK=1,相当于告诉客户端,我收到了你的消息,ack是上一个seq值+1。然后服务端又会发送报文,FIN=1,相当于告诉客户端,我要和你断开连接了,seq=5555,这里的seq不是随机生成的,而是由之前一系列操作演变而来的。当客户端收到从服务端发送过来的消息后,发送报文给服务端,ACK=1,相当于告诉服务端,我收到了你的消息,ackack是上一个seq值+1,至此客户端和服务端断开连接,这就是四次挥手过程 三次握手 第一次握手:Client什么都不能确认;Server确认了对方发送正常 第二次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己接收正常,对方发送正常 第三次握手:Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己发送、接收正常,对方发送收正常 四次断开 假设A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B可能还会有要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束
|