【计算机网络】TCP的握手挥手机制详解

网友投稿 853 2022-11-05

【计算机网络】TCP的握手挥手机制详解

【计算机网络】TCP的握手挥手机制详解

写在最前面:计算机网络涉及到的东西很多很多,不仅仅是网络,涉及到数据库,硬件方面,网络编程等等。并且我没有很多的时间来写这个专题,毕竟还是需要参加训练。。所以对于可以在下边留言告诉我大概想要了解计算机网络的哪个部分,我会抽空写的。。(嘻嘻,前提是我知道哦,计网我也是只是学了一个皮毛,但是还是可以说一下我自己的看法,给需要帮助的人)。

1.前边我们大概的说到了不可靠的传输,以及一个典型的不可靠输-UDP,虽然说不可靠传输有着很多的缺点,但是也并不是一无是处,在现在依旧是被广泛使用。今天来说一下可靠传输的代表-TCP。

2.之前其实也提到过,可靠传输只是一个相对的概念,没有什么一定的标准。因为各自的需求不同,只要是满足了需求的,就可以认为是可靠的。UDP也叫做用户数据报文,他是一种协议包的形式传输。TCP全称:传输控制协议,是一种基于虚电路的传输方式。一个很经典的比喻:TCP就是我们打电话,在双方通信的过程中,会建立链接。对于曾经的有线电话来说,在通话的过程中的确是会有一根物理上实际存在的电线链接这双方),但是在TCP中却是一种虚拟电路链接。但是形式还是不变的。

3.TCP的三次握手。首先我们知道,通话必须建立连接,那么TCP的连接时怎么从无到有的建立起来的呢?TCP采用一种握手机制。如图:

来解释一下上图:首先时第一次握手,客户机给服务器发送SYN报文,请求连接(其中有一个序列号为x)。然后是第二次握手,服务器接收到这个SYN包,反馈客户机ACK(这个ACK有两个序列号,第一个是用来回答客户机的,第二个是用来校验第三次握手)。最后是第三次握手:客户机接收到服务器的报文,反馈给服务器成功接受的信息。然后这个TCP连接就建立了,通信可以开始。其实这里面有很多的问题,我们来简单的说几个:

(1)为什么要发送序列号?其实这是一种确认的机制。举个简单的例子,客户端给服务器发包,序列号为1,也就是x=1.只有服务器反馈回来的x=2,才说明这个包是成功了。为什么这么做?这就涉及到可靠的传输了,首先介绍一个概念:TIMEOUT。最大时延。因为我们知道,数据传输的过程中,时间其实不会很长,数据传输的速度基本上都是光速传输,所以就是绕地球一圈,也不会用很长时间,一旦我们发出去一个包,我们这边开始计时,规定的时间内,没有得到答复,说明了一个问题,很有可能就是这个包在路上丢失了(包丢失很正常的,很简单的一个场景,你发的包到了一个路由器,结果这个路由器现在十分的繁忙,导致他的缓冲区已经满了,那么你这个包就会被丢弃了)。所以这个时候客户端会继续发送一个新的包,加一个新的序列号。当然,上一次发的包也可能在路上堵车了,毕竟路由这个东西你说不了,很有可能你发的第一个包没有丢失,它只是在某个路由器的缓冲区内排队,然后时间超过了,你又发了一个包过去,结果这个过程中,你上一次发的包排队结束了,并且比第二次发的包先到达了服务器,服务器做出了ACK,然后客户端接收到了这个ACK,但是这个时候发现序列号不对,不是刚才发出去的那个,所以也不行。这就是序列号的作用,他是为了保证当前的包的确实我想要的那个。其他两次握手也是这个道理。

(2)为什么是三次握手?其实也就是再说,为什么第三次握手是必须的。前两次肯定是必须的,但是第三次有必要吗?如果从客户端考虑:第三次为啥还有我确认,前两次确认不久OK了?其实从服务器考虑就不是这样了,你会发现第三次握手时必须的。我们从服务器考虑:对于每个客户端过来的通信请求,服务器需要分配资源(CPU,内存等)来处理这个请求,如果没有第三次确认,那么客户端在接收到ACK之后忽然觉得自己好像不用继续通信了(这个在生活中很常见,比如你想下一个东西,忽然不想下了),那么就不会发送第三次握手。这个时候,服务器没有接接收到第三次握手,就不会分配资源给这个请求。这对服务器来说,是必须的。因为毕竟服务器资源有限并且十分珍贵。

对应的状态机:

客户端的状态机:

服务器的状态机:

4.TCP的四次挥手。在建立连接后,就开始愉快的传输数据,然后传完之后就需要关闭连接。那么关闭连接的过程有事怎样?

在关闭连接的时,首先时由客户端发送FIN报文,服务器ACK,这个时候,客户端进入等待状态,然后服务器发送FIN报文,客户端ACK之后关闭,服务器接受ACK之后释放这个连接的资源。这叫做TCP的四次挥手。

其实四次挥手和三次握手就是同一个东西,这里也是有很多问题的,为什么客户端在第一次接收到服务器的ACK之后,不直接关闭,而是进入等待状态?这个其实很容易解释了,因为客户端提出FIN以后,说明它想做的事情基本上做完了,但是这个时候服务器给客户端的数据不一定就传完了,所以客户端需要先等待一段时间,等到服务器把数据给传完了再关闭。

对应的状态机:

主动提出关闭的状态机:

被动关闭的状态机:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【POJ 1556】The Doors
下一篇:mybatis判断list不为空/大小的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~