seq:用来标记计算机之间发送数据包的序号。
ack:确认号,用于确认收到数据包,ack=seq+1
三次握手简略图:
三个序号分别代表三次握手:
1、服务端知晓了客户端发消息功能正常,服务端收消息功能正常。
2、客户端知晓了服务端收发消息功能均正常,客户端发消息正常。
3、服务端知晓服务端能发消息功能正常。
如果只有两次握手的话,客户端没有回应,会消耗服务端资源。
四次挥手简略图:
①客户端申请断开连接即FIN (我这边准备断开连接了)
②服务端接收信息返回,表示我已经接收到 (收到,请稍等,我这边准备一下)
③服务端发送信息表示可以断开连接 (我准备好了,你可以断开连接了)
④客户端接受信息,同时返回信息通知服务端自己收到信息,开始断开 连接(好的,拜拜!)
为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当服务端收到客户端发出的释放连接报文时,可能有些数据客户端已经发出,但这时服务端并未收到,所以不会立刻关闭socket,等待报文发送完毕,就会向客户端发出第三次握手,表示客户端可以断开连接了。
为什么客户端再发送完最后的确认ack后还需要等待一段时间才close?
1、确认服务器已经收到断开