3.2 四次挥手(重点)
- 四次挥手即终止 TCP 连接,就是指断开一个 TCP 连接时,需要客户端和服务端总共发送 4 个包以确认连接的断开 。在 socket 编程中,这一过程由客户端或服务端任一方执行 close 来触发 。
- 由于 TCP 连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个 FIN 来终止这一方向的连接,收到一个 FIN 只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个 TCP 连接上仍然能够发送数据,直到这一方向也发送了 FIN 。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭 。
四次挥手
- 中断连接端可以是客户端,也可以是服务器端 。
- 第一次挥手:客户端发送一个 FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入 FIN_WAIT_1 状态 。意思是说”我客户端没有数据要发给你了”,但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据 。
- 第二次挥手:服务器端收到 FIN 后,先发送 ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息 。这个时候客户端就进入 FIN_WAIT_2 状态,继续等待服务器端的 FIN 报文 。
- 第三次挥手:当服务器端确定数据已发送完成,则向客户端发送 FIN=N 报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了 。服务器端进入 LAST_ACK 状态 。
- 第四次挥手:客户端收到 FIN=N 报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送 ack=N+1 后进入 TIME_WAIT 状态,如果 Server 端没有收到 ACK 则可以重传 。服务器端收到 ACK 后,就知道可以断开连接了 。客户端等待了 2MSL 后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了 。最终完成了四次握手 。
具体流程如下图:
【tcp网络协议详细讲解 tcp ip协议】 同时挥手
3.3 通过序列号与确认应答提高可靠性
- 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知 。这个消息叫做确认应答(ACK) 。当发送端将数据发出之后会等待对端的确认应答 。如果有确认应答,说明数据已经成功到达对端 。反之,则数据丢失的可能性很大 。
- 在一定时间内没有等待到确认应答,发送端就可以认为数据已经丢失,并进行重发 。由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输 。
- 未收到确认应答并不意味着数据一定丢失 。也有可能是数据对方已经收到,只是返回的确认应答在途中丢失 。这种情况也会导致发送端误以为数据没有到达目的地而重发数据 。
- 此外,也有可能因为一些其他原因导致确认应答延迟到达,在源主机重发数据以后才到达的情况也屡见不鲜 。此时,源主机只要按照机制重发数据即可 。
- 对于目标主机来说,反复收到相同的数据是不可取的 。为了对上层应用提供可靠的传输,目标主机必须放弃重复的数据包 。为此我们引入了序列号 。
- 序列号是按照顺序给发送数据的每一个字节(8 位字节)都标上号码的编号 。接收端查询接收数据 TCP 首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送回去 。通过序列号和确认应答号,TCP 能够识别是否已经接收数据,又能够判断是否需要接收,从而实现可靠传输 。
推荐阅读
- 网络经常掉线如何解决办法 为什么网络老是掉线
- 网络打印机安装步骤图解 网络打印机怎么安装
- 关闭它需要以下几步 如何关闭网络防火墙
- Windows如何通过命令刷新DNS缓存
- emui忘记密码怎么办 忘记密码怎么连接wifi网络
- 笔记本找不到无线网络咋办 win8无线网络不见了怎么办
- win7网络连接不上解决方法 win7网络连接不可用
- 不得不看的网络安全四大问题 网络安全问题有哪些
- 5个原因会导致手机没有网络信号 手机没信号怎么解决
- 手把手教你家庭网络解决方案 网络如何提速