TCP的三次握手是一个很重要的概念,这里重点梳理一下。
建立连接
如上所示
客户端:发送syn=1,告诉服务器,我要和你建立连接,而且发送序列号。
服务器:发送syn=1 ack,ACK,告诉客户端可以连接了。
客户端:发送syn=0,发送ack
在很多的文章里面有ACK和ack两种表示,ACK是单纯的确认与否(确认为1)ack则是一种报文的下一个请求,如果客户端发送的数据编号为n,那么服务器的ack=n+1,表示要第n+1个数据。
下面的图更详细了
断开连接
客户端:发送FIN标志,告诉服务器,我发完了。
服务器:发送ACK,知道了。然后告诉下面的应用程序小弟,TCP要断开了啊。
服务器:发送FIN,我也要关了。
客户端:发送ACK,我收到了你的回复。然后客户端就彻底关了。
下面这图更详细。
为啥最后又要客户端要发送确认呢?怕丢包。如果服务器没收到确认,还要在发一个FIN,这样就可以保证让客户端关闭了。