码迷,mamicode.com
首页 > 其他好文 > 详细

你弄懂三次握手和四次挥手了吗?带你解读最全技术信息

时间:2020-02-29 17:33:32      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:完成   根据   是什么   ack   基本   数据   数据段   image   状态   

前几天,一个学员说在网上视频面试时,被问到“对TCP协议的三次握手和四次挥手的理解”,他回答的有点差强人意,后来他特意问了我们这个问题,在双重记忆下,终于对此有所理解。今天,就与大家探讨下“对TCP协议的三次握手和四次挥手的理解”问题。希望可以帮助到更多新手小白或基础不太牢固的同学,加深对此的理解和感悟。

技术图片
为什么会用到三次握手和四次挥手?

为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。就需要三次握手。三次握手的意义在于防止已过期的连接再次传到被连接的主机。

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,当需要断开TCP连接时,这里就有了四次挥手。

三次握手是什么?

简单说来,第一次握手是发送带有SYN标志的数据包从客户端到服务端。第二次握手是发送带有SYN/ACK标志的数据包从服务端到客户端。第三次握手是发送带有带有ACK标志的数据包从客户端到服务端。

四次挥手是什么?

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

为什么要进行三次握手?

客户端只有确定了自己能与服务端连接上才能开始发数据。所以两次握手肯定是最基本的。假设如果没有第三次握手,而是两次握手后我们就认为连接成功了,那么会发生什么?第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方ACK和FIN一般都会分开发送。

你,明白了吗?

你弄懂三次握手和四次挥手了吗?带你解读最全技术信息

标签:完成   根据   是什么   ack   基本   数据   数据段   image   状态   

原文地址:https://blog.51cto.com/14376316/2474519

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!